//----------------------------------------------------------------------- // // Copyright (c) Outercurve Foundation. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.OAuth.ChannelElements { using System; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; using System.Text; /// /// A token manager for use by a web site in its role as a /// service provider. /// [ContractClass(typeof(IServiceProviderTokenManagerContract))] public interface IServiceProviderTokenManager : ITokenManager { /// /// Gets the Consumer description for a given a Consumer Key. /// /// The Consumer Key. /// A description of the consumer. Never null. /// Thrown if the consumer key cannot be found. IConsumerDescription GetConsumer(string consumerKey); /// /// Checks whether a given request token has already been authorized /// by some user for use by the Consumer that requested it. /// /// The Consumer's request token. /// /// True if the request token has already been fully authorized by the user /// who owns the relevant protected resources. False if the token has not yet /// been authorized, has expired or does not exist. /// bool IsRequestTokenAuthorized(string requestToken); /// /// Gets details on the named request token. /// /// The request token. /// A description of the token. Never null. /// Thrown if the token cannot be found. /// /// It is acceptable for implementations to find the token, see that it has expired, /// delete it from the database and then throw , /// or alternatively it can return the expired token anyway and the OAuth channel will /// log and throw the appropriate error. /// IServiceProviderRequestToken GetRequestToken(string token); /// /// Gets details on the named access token. /// /// The access token. /// A description of the token. Never null. /// Thrown if the token cannot be found. /// /// It is acceptable for implementations to find the token, see that it has expired, /// delete it from the database and then throw , /// or alternatively it can return the expired token anyway and the OAuth channel will /// log and throw the appropriate error. /// IServiceProviderAccessToken GetAccessToken(string token); /// /// Persists any changes made to the token. /// /// The token whose properties have been changed. /// /// This library will invoke this method after making a set /// of changes to the token as part of a web request to give the host /// the opportunity to persist those changes to a database. /// Depending on the object persistence framework the host site uses, /// this method MAY not need to do anything (if changes made to the token /// will automatically be saved without any extra handling). /// void UpdateToken(IServiceProviderRequestToken token); } /// /// Code contract class for the interface. /// [ContractClassFor(typeof(IServiceProviderTokenManager))] internal abstract class IServiceProviderTokenManagerContract : IServiceProviderTokenManager { /// /// Prevents a default instance of the class from being created. /// private IServiceProviderTokenManagerContract() { } #region IServiceProviderTokenManager Members /// /// Gets the Consumer description for a given a Consumer Key. /// /// The Consumer Key. /// /// A description of the consumer. Never null. /// /// Thrown if the consumer key cannot be found. IConsumerDescription IServiceProviderTokenManager.GetConsumer(string consumerKey) { Requires.NotNullOrEmpty(consumerKey, "consumerKey"); Contract.Ensures(Contract.Result() != null); throw new NotImplementedException(); } /// /// Checks whether a given request token has already been authorized /// by some user for use by the Consumer that requested it. /// /// The Consumer's request token. /// /// True if the request token has already been fully authorized by the user /// who owns the relevant protected resources. False if the token has not yet /// been authorized, has expired or does not exist. /// bool IServiceProviderTokenManager.IsRequestTokenAuthorized(string requestToken) { Requires.NotNullOrEmpty(requestToken, "requestToken"); throw new NotImplementedException(); } /// /// Gets details on the named request token. /// /// The request token. /// A description of the token. Never null. /// Thrown if the token cannot be found. /// /// It is acceptable for implementations to find the token, see that it has expired, /// delete it from the database and then throw , /// or alternatively it can return the expired token anyway and the OAuth channel will /// log and throw the appropriate error. /// IServiceProviderRequestToken IServiceProviderTokenManager.GetRequestToken(string token) { Requires.NotNullOrEmpty(token, "token"); Contract.Ensures(Contract.Result() != null); throw new NotImplementedException(); } /// /// Gets details on the named access token. /// /// The access token. /// A description of the token. Never null. /// Thrown if the token cannot be found. /// /// It is acceptable for implementations to find the token, see that it has expired, /// delete it from the database and then throw , /// or alternatively it can return the expired token anyway and the OAuth channel will /// log and throw the appropriate error. /// IServiceProviderAccessToken IServiceProviderTokenManager.GetAccessToken(string token) { Requires.NotNullOrEmpty(token, "token"); Contract.Ensures(Contract.Result() != null); throw new NotImplementedException(); } /// /// Persists any changes made to the token. /// /// The token whose properties have been changed. /// /// This library will invoke this method after making a set /// of changes to the token as part of a web request to give the host /// the opportunity to persist those changes to a database. /// Depending on the object persistence framework the host site uses, /// this method MAY not need to do anything (if changes made to the token /// will automatically be saved without any extra handling). /// void IServiceProviderTokenManager.UpdateToken(IServiceProviderRequestToken token) { Requires.NotNull(token, "token"); throw new NotImplementedException(); } #endregion #region ITokenManager Members /// /// 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. string ITokenManager.GetTokenSecret(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. /// void ITokenManager.StoreNewRequestToken(DotNetOpenAuth.OAuth.Messages.UnauthorizedTokenRequest request, DotNetOpenAuth.OAuth.Messages.ITokenSecretContainingMessage response) { throw new NotImplementedException(); } /// /// 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 WebConsumer.ProcessUserAuthorization or /// DesktopConsumer.ProcessUserAuthorization return the access /// token to associate the access token with a user account at that point. /// /// void ITokenManager.ExpireRequestTokenAndStoreNewAccessToken(string consumerKey, string requestToken, string accessToken, string accessTokenSecret) { throw new NotImplementedException(); } /// /// 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. /// TokenType ITokenManager.GetTokenType(string token) { throw new NotImplementedException(); } #endregion } }