//----------------------------------------------------------------------- // // Copyright (c) Andrew Arnott. All rights reserved. // //----------------------------------------------------------------------- namespace RelyingPartyLogic { using System; using System.Collections.Generic; using System.Linq; using System.Web; using DotNetOpenAuth.OAuth.ChannelElements; public class OAuthServiceProviderTokenManager : OAuthTokenManager, IServiceProviderTokenManager { /// /// Initializes a new instance of the class. /// public OAuthServiceProviderTokenManager() { } #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. public IConsumerDescription GetConsumer(string consumerKey) { try { return Database.DataContext.Consumers.First(c => c.ConsumerKey == consumerKey); } catch (InvalidOperationException) { throw new KeyNotFoundException(); } } /// /// 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. /// public bool IsRequestTokenAuthorized(string requestToken) { return Database.DataContext.IssuedTokens.OfType().Any( t => t.Token == requestToken && t.User != null); } /// /// 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. /// public IServiceProviderRequestToken GetRequestToken(string token) { try { return Database.DataContext.IssuedTokens.OfType().First(tok => tok.Token == token); } catch (InvalidOperationException) { throw new KeyNotFoundException(); } } /// /// 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. /// public IServiceProviderAccessToken GetAccessToken(string token) { try { return Database.DataContext.IssuedTokens.OfType().First(tok => tok.Token == token); } catch (InvalidOperationException) { throw new KeyNotFoundException(); } } /// /// 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). /// public void UpdateToken(IServiceProviderRequestToken token) { Database.DataContext.SaveChanges(); } #endregion } }