namespace OAuth2ProtectedWebApi.Code { using System; using System.Collections.Generic; using System.Linq; using System.Web; using DotNetOpenAuth.Messaging.Bindings; internal class MemoryCryptoKeyStore : ICryptoKeyStore { private Dictionary> keys = new Dictionary>(); private MemoryCryptoKeyStore() { } internal static ICryptoKeyStore Instance = new MemoryCryptoKeyStore(); public CryptoKey GetKey(string bucket, string handle) { Dictionary keyBucket; if (this.keys.TryGetValue(bucket, out keyBucket)) { CryptoKey key; if (keyBucket.TryGetValue(handle, out key)) { return key; } } return null; } public IEnumerable> GetKeys(string bucket) { Dictionary keyBucket; if (this.keys.TryGetValue(bucket, out keyBucket)) { foreach (var cryptoKey in keyBucket) { yield return cryptoKey; } } } public void StoreKey(string bucket, string handle, CryptoKey key) { Dictionary keyBucket; if (!this.keys.TryGetValue(bucket, out keyBucket)) { keyBucket = this.keys[bucket] = new Dictionary(); } keyBucket[handle] = key; } public void RemoveKey(string bucket, string handle) { Dictionary keyBucket; if (this.keys.TryGetValue(bucket, out keyBucket)) { keyBucket.Remove(handle); } } } }