2 // SecurityContextSecurityTokenResolver.cs
5 // Atsushi Enomoto <atsushi@ximian.com>
7 // Copyright (C) 2006 Novell, Inc. http://www.novell.com
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using System.Collections.Generic;
30 using System.Collections.ObjectModel;
31 using System.IdentityModel.Selectors;
32 using System.IdentityModel.Tokens;
35 using Table = System.Collections.Generic.Dictionary<System.Xml.UniqueId,System.ServiceModel.Security.Tokens.SecurityContextSecurityToken>;
37 namespace System.ServiceModel.Security.Tokens
39 public class SecurityContextSecurityTokenResolver : SecurityTokenResolver, ISecurityContextSecurityTokenCache
44 Dictionary<UniqueId,Table> cache =
45 new Dictionary<UniqueId,Table> ();
47 public SecurityContextSecurityTokenResolver (
48 int securityContextCacheCapacity,
49 bool removeOldestTokensOnCacheFull)
51 capacity = securityContextCacheCapacity;
52 allow_removal = removeOldestTokensOnCacheFull;
55 public bool RemoveOldestTokensOnCacheFull {
56 get { return allow_removal; }
59 public int SecurityContextTokenCacheCapacity {
60 get { return capacity; }
63 public void AddContext (SecurityContextSecurityToken token)
65 if (!TryAddContext (token))
66 throw new InvalidOperationException ("Argument token is already in the cache.");
69 public void ClearContexts ()
74 public Collection<SecurityContextSecurityToken> GetAllContexts (UniqueId contextId)
77 if (!cache.TryGetValue (contextId, out table))
78 return new Collection<SecurityContextSecurityToken> ();
79 SecurityContextSecurityToken [] arr =
80 new SecurityContextSecurityToken [table.Count];
81 table.Values.CopyTo (arr, 0);
82 return new Collection<SecurityContextSecurityToken> (arr);
85 public SecurityContextSecurityToken GetContext (UniqueId contextId, UniqueId generation)
88 if (!cache.TryGetValue (contextId, out table))
90 SecurityContextSecurityToken ret;
91 return table.TryGetValue (generation, out ret) ? ret : null;
94 public void RemoveAllContexts (UniqueId contextId)
96 cache.Remove (contextId);
99 public void RemoveContext (UniqueId contextId, UniqueId generation)
102 if (!cache.TryGetValue (contextId, out table))
104 table.Remove (generation);
107 public bool TryAddContext (SecurityContextSecurityToken token)
110 if (!cache.TryGetValue (token.ContextId, out table)) {
111 table = new Table ();
112 table [token.KeyGeneration] = token;
114 if (table.ContainsKey (token.KeyGeneration))
116 table [token.KeyGeneration] = token;
122 public void UpdateContextCachingTime (SecurityContextSecurityToken context, DateTime expirationTime)
124 throw new NotImplementedException ();
127 // SecurityTokenResolver
130 protected override bool TryResolveSecurityKeyCore (
131 SecurityKeyIdentifierClause keyIdentifierClause,
134 throw new NotImplementedException ();
138 protected override bool TryResolveTokenCore (
139 SecurityKeyIdentifier keyIdentifier,
140 out SecurityToken token)
142 throw new NotImplementedException ();
146 protected override bool TryResolveTokenCore (
147 SecurityKeyIdentifierClause keyIdentifierClause,
148 out SecurityToken token)
150 throw new NotImplementedException ();