//----------------------------------------------------------------------- // // Copyright (c) Microsoft. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.AspNet.Clients { using System; using System.Collections.Generic; using DotNetOpenAuth.OAuth; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.OAuth.Messages; /// /// An implementation of IOAuthTokenManager which stores keys in memory. /// public sealed class InMemoryOAuthTokenManager : IConsumerTokenManager { #region Constants and Fields /// /// The _tokens and secrets. /// private readonly Dictionary _tokensAndSecrets = new Dictionary(); #endregion #region Constructors and Destructors /// /// Initializes a new instance of the class. /// /// /// The consumer key. /// /// /// The consumer secret. /// public InMemoryOAuthTokenManager(string consumerKey, string consumerSecret) { Requires.NotNull(consumerKey, "consumerKey"); Requires.NotNull(consumerSecret, "consumerSecret"); this.ConsumerKey = consumerKey; this.ConsumerSecret = consumerSecret; } #endregion #region Public Properties /// /// Gets the consumer key. /// public string ConsumerKey { get; private set; } /// /// Gets the consumer secret. /// public string ConsumerSecret { get; private set; } #endregion #region Public Methods and Operators /// /// Deletes a request token and its associated secret and stores a new access token and secret. /// /// /// The Consumer that is exchanging its request token for an access token. /// /// /// The Consumer's request token that should be deleted/expired. /// /// /// The new access token that is being issued to the Consumer. /// /// /// The secret associated with the newly issued access token. /// /// /// /// Any scope of granted privileges associated with the request token from the /// original call to /// /// should be carried over /// to the new Access Token. /// /// /// To associate a user account with the new access token, /// HttpContext.Current.User /// may be /// useful in an ASP.NET web application within the implementation of this method. /// Alternatively you may store the access token here without associating with a user account, /// and wait until /// /// or /// /// return the access /// token to associate the access token with a user account at that point. /// /// public void ExpireRequestTokenAndStoreNewAccessToken( string consumerKey, string requestToken, string accessToken, string accessTokenSecret) { this._tokensAndSecrets.Remove(requestToken); this._tokensAndSecrets[accessToken] = accessTokenSecret; } /// /// Gets the Token Secret given a request or access token. /// /// /// The request or access token. /// /// /// The secret associated with the given token. /// /// /// Thrown if the secret cannot be found for the given token. /// public string GetTokenSecret(string token) { return this._tokensAndSecrets[token]; } /// /// Classifies a token as a request token or an access token. /// /// /// The token to classify. /// /// /// Request or Access token, or invalid if the token is not recognized. /// public TokenType GetTokenType(string token) { throw new NotImplementedException(); } /// /// Stores a newly generated unauthorized request token, secret, and optional application-specific parameters for later recall. /// /// /// The request message that resulted in the generation of a new unauthorized request token. /// /// /// The response message that includes the unauthorized request token. /// /// /// Thrown if the consumer key is not registered, or a required parameter was not found in the parameters collection. /// /// /// Request tokens stored by this method SHOULD NOT associate any user account with this token. It usually opens up security holes in your application to do so. Instead, you associate a user account with access tokens (not request tokens) in the method. /// public void StoreNewRequestToken(UnauthorizedTokenRequest request, ITokenSecretContainingMessage response) { this._tokensAndSecrets[response.Token] = response.TokenSecret; } #endregion } }