//-----------------------------------------------------------------------
//
// 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
}
}