summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2009-11-10 08:58:22 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2009-11-10 08:58:22 -0800
commit1fc942e7cefa847a919ae7c4ce424797c438a011 (patch)
tree6aaa7e8ca9f4aba504dd34b0efe70bfad364b162
parentcbc0964271849df85ba864944377d592d410de38 (diff)
downloadDotNetOpenAuth-1fc942e7cefa847a919ae7c4ce424797c438a011.zip
DotNetOpenAuth-1fc942e7cefa847a919ae7c4ce424797c438a011.tar.gz
DotNetOpenAuth-1fc942e7cefa847a919ae7c4ce424797c438a011.tar.bz2
Split up token manager into an SP side and a consumer side.
-rw-r--r--projecttemplates/WebFormsRelyingParty/Code/OAuthConsumerTokenManager.cs48
-rw-r--r--projecttemplates/WebFormsRelyingParty/Code/OAuthServiceProviderTokenManager.cs112
-rw-r--r--projecttemplates/WebFormsRelyingParty/Code/OAuthTokenManager.cs159
-rw-r--r--projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj2
4 files changed, 166 insertions, 155 deletions
diff --git a/projecttemplates/WebFormsRelyingParty/Code/OAuthConsumerTokenManager.cs b/projecttemplates/WebFormsRelyingParty/Code/OAuthConsumerTokenManager.cs
new file mode 100644
index 0000000..107934b
--- /dev/null
+++ b/projecttemplates/WebFormsRelyingParty/Code/OAuthConsumerTokenManager.cs
@@ -0,0 +1,48 @@
+//-----------------------------------------------------------------------
+// <copyright file="OAuthConsumerTokenManager.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace WebFormsRelyingParty.Code {
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Web;
+ using DotNetOpenAuth.OAuth.ChannelElements;
+
+ public class OAuthConsumerTokenManager : OAuthTokenManager, IConsumerTokenManager {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="OAuthConsumerTokenManager"/> class.
+ /// </summary>
+ /// <param name="consumerKey">The consumer key.</param>
+ /// <param name="consumerSecret">The consumer secret.</param>
+ public OAuthConsumerTokenManager(string consumerKey, string consumerSecret) {
+ if (String.IsNullOrEmpty(consumerKey)) {
+ throw new ArgumentNullException("consumerKey");
+ }
+ if (consumerSecret == null) {
+ throw new ArgumentNullException("consumerSecret");
+ }
+
+ this.ConsumerKey = consumerKey;
+ this.ConsumerSecret = consumerSecret;
+ }
+
+ #region IConsumerTokenManager Members
+
+ /// <summary>
+ /// Gets the consumer key.
+ /// </summary>
+ /// <value>The consumer key.</value>
+ public string ConsumerKey { get; private set; }
+
+ /// <summary>
+ /// Gets the consumer secret.
+ /// </summary>
+ /// <value>The consumer secret.</value>
+ public string ConsumerSecret { get; private set; }
+
+ #endregion
+ }
+}
diff --git a/projecttemplates/WebFormsRelyingParty/Code/OAuthServiceProviderTokenManager.cs b/projecttemplates/WebFormsRelyingParty/Code/OAuthServiceProviderTokenManager.cs
new file mode 100644
index 0000000..224a181
--- /dev/null
+++ b/projecttemplates/WebFormsRelyingParty/Code/OAuthServiceProviderTokenManager.cs
@@ -0,0 +1,112 @@
+//-----------------------------------------------------------------------
+// <copyright file="OAuthServiceProviderTokenManager.cs" company="Andrew Arnott">
+// Copyright (c) Andrew Arnott. All rights reserved.
+// </copyright>
+//-----------------------------------------------------------------------
+
+namespace WebFormsRelyingParty.Code {
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Web;
+ using DotNetOpenAuth.OAuth.ChannelElements;
+
+ public class OAuthServiceProviderTokenManager : OAuthTokenManager, IServiceProviderTokenManager {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="OAuthServiceProviderTokenManager"/> class.
+ /// </summary>
+ public OAuthServiceProviderTokenManager() {
+ }
+
+ #region IServiceProviderTokenManager Members
+
+ /// <summary>
+ /// Gets the Consumer description for a given a Consumer Key.
+ /// </summary>
+ /// <param name="consumerKey">The Consumer Key.</param>
+ /// <returns>
+ /// A description of the consumer. Never null.
+ /// </returns>
+ /// <exception cref="KeyNotFoundException">Thrown if the consumer key cannot be found.</exception>
+ public IConsumerDescription GetConsumer(string consumerKey) {
+ try {
+ return Global.DataContext.Consumer.First(c => c.ConsumerKey == consumerKey);
+ } catch (InvalidOperationException) {
+ throw new KeyNotFoundException();
+ }
+ }
+
+ /// <summary>
+ /// Checks whether a given request token has already been authorized
+ /// by some user for use by the Consumer that requested it.
+ /// </summary>
+ /// <param name="requestToken">The Consumer's request token.</param>
+ /// <returns>
+ /// 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.
+ /// </returns>
+ public bool IsRequestTokenAuthorized(string requestToken) {
+ return Global.DataContext.IssuedToken.OfType<IssuedRequestToken>().Any(
+ t => t.Token == requestToken && t.User != null);
+ }
+
+ /// <summary>
+ /// Gets details on the named request token.
+ /// </summary>
+ /// <param name="token">The request token.</param>
+ /// <returns>A description of the token. Never null.</returns>
+ /// <exception cref="KeyNotFoundException">Thrown if the token cannot be found.</exception>
+ /// <remarks>
+ /// It is acceptable for implementations to find the token, see that it has expired,
+ /// delete it from the database and then throw <see cref="KeyNotFoundException"/>,
+ /// or alternatively it can return the expired token anyway and the OAuth channel will
+ /// log and throw the appropriate error.
+ /// </remarks>
+ public IServiceProviderRequestToken GetRequestToken(string token) {
+ try {
+ return Global.DataContext.IssuedToken.OfType<IssuedRequestToken>().First(tok => tok.Token == token);
+ } catch (InvalidOperationException) {
+ throw new KeyNotFoundException();
+ }
+ }
+
+ /// <summary>
+ /// Gets details on the named access token.
+ /// </summary>
+ /// <param name="token">The access token.</param>
+ /// <returns>A description of the token. Never null.</returns>
+ /// <exception cref="KeyNotFoundException">Thrown if the token cannot be found.</exception>
+ /// <remarks>
+ /// It is acceptable for implementations to find the token, see that it has expired,
+ /// delete it from the database and then throw <see cref="KeyNotFoundException"/>,
+ /// or alternatively it can return the expired token anyway and the OAuth channel will
+ /// log and throw the appropriate error.
+ /// </remarks>
+ public IServiceProviderAccessToken GetAccessToken(string token) {
+ try {
+ return Global.DataContext.IssuedToken.OfType<IssuedAccessToken>().First(tok => tok.Token == token);
+ } catch (InvalidOperationException) {
+ throw new KeyNotFoundException();
+ }
+ }
+
+ /// <summary>
+ /// Persists any changes made to the token.
+ /// </summary>
+ /// <param name="token">The token whose properties have been changed.</param>
+ /// <remarks>
+ /// 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).
+ /// </remarks>
+ public void UpdateToken(IServiceProviderRequestToken token) {
+ Global.DataContext.SaveChanges();
+ }
+
+ #endregion
+ }
+}
diff --git a/projecttemplates/WebFormsRelyingParty/Code/OAuthTokenManager.cs b/projecttemplates/WebFormsRelyingParty/Code/OAuthTokenManager.cs
index a685b70..653d791 100644
--- a/projecttemplates/WebFormsRelyingParty/Code/OAuthTokenManager.cs
+++ b/projecttemplates/WebFormsRelyingParty/Code/OAuthTokenManager.cs
@@ -8,148 +8,23 @@ namespace WebFormsRelyingParty.Code {
using System;
using System.Collections.Generic;
using System.Linq;
+ using System.Security.Cryptography.X509Certificates;
using System.Web;
+ using DotNetOpenAuth.OAuth;
using DotNetOpenAuth.OAuth.ChannelElements;
using DotNetOpenAuth.OAuth.Messages;
- using System.Security.Cryptography.X509Certificates;
- using DotNetOpenAuth.OAuth;
/// <summary>
/// The token manager this web site uses in its roles both as
/// a consumer and as a service provider.
/// </summary>
- public class OAuthTokenManager : IConsumerTokenManager, IServiceProviderTokenManager {
- /// <summary>
- /// Initializes a new instance of the <see cref="OAuthTokenManager"/> class
- /// for use as a Consumer.
- /// </summary>
- /// <param name="consumerKey">The consumer key.</param>
- /// <param name="consumerSecret">The consumer secret.</param>
- private OAuthTokenManager(string consumerKey, string consumerSecret) {
- if (String.IsNullOrEmpty(consumerKey)) {
- throw new ArgumentNullException("consumerKey");
- }
- if (consumerSecret == null) {
- throw new ArgumentNullException("consumerSecret");
- }
-
- this.ConsumerKey = consumerKey;
- this.ConsumerSecret = consumerSecret;
- }
-
+ public class OAuthTokenManager : ITokenManager {
/// <summary>
/// Initializes a new instance of the <see cref="OAuthTokenManager"/> class.
/// </summary>
- private OAuthTokenManager() {
- }
-
- #region IConsumerTokenManager Members
-
- /// <summary>
- /// Gets the consumer key.
- /// </summary>
- /// <value>The consumer key.</value>
- public string ConsumerKey { get; private set; }
-
- /// <summary>
- /// Gets the consumer secret.
- /// </summary>
- /// <value>The consumer secret.</value>
- public string ConsumerSecret { get; private set; }
-
- #endregion
-
- #region IServiceProviderTokenManager Members
-
- /// <summary>
- /// Gets the Consumer description for a given a Consumer Key.
- /// </summary>
- /// <param name="consumerKey">The Consumer Key.</param>
- /// <returns>
- /// A description of the consumer. Never null.
- /// </returns>
- /// <exception cref="KeyNotFoundException">Thrown if the consumer key cannot be found.</exception>
- public IConsumerDescription GetConsumer(string consumerKey) {
- try {
- return Global.DataContext.Consumer.First(c => c.ConsumerKey == consumerKey);
- } catch (InvalidOperationException) {
- throw new KeyNotFoundException();
- }
- }
-
- /// <summary>
- /// Checks whether a given request token has already been authorized
- /// by some user for use by the Consumer that requested it.
- /// </summary>
- /// <param name="requestToken">The Consumer's request token.</param>
- /// <returns>
- /// 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.
- /// </returns>
- public bool IsRequestTokenAuthorized(string requestToken) {
- return Global.DataContext.IssuedToken.OfType<IssuedRequestToken>().Any(
- t => t.Token == requestToken && t.User != null);
- }
-
- /// <summary>
- /// Gets details on the named request token.
- /// </summary>
- /// <param name="token">The request token.</param>
- /// <returns>A description of the token. Never null.</returns>
- /// <exception cref="KeyNotFoundException">Thrown if the token cannot be found.</exception>
- /// <remarks>
- /// It is acceptable for implementations to find the token, see that it has expired,
- /// delete it from the database and then throw <see cref="KeyNotFoundException"/>,
- /// or alternatively it can return the expired token anyway and the OAuth channel will
- /// log and throw the appropriate error.
- /// </remarks>
- public IServiceProviderRequestToken GetRequestToken(string token) {
- try {
- return Global.DataContext.IssuedToken.OfType<IssuedRequestToken>().First(tok => tok.Token == token);
- } catch (InvalidOperationException) {
- throw new KeyNotFoundException();
- }
+ protected OAuthTokenManager() {
}
- /// <summary>
- /// Gets details on the named access token.
- /// </summary>
- /// <param name="token">The access token.</param>
- /// <returns>A description of the token. Never null.</returns>
- /// <exception cref="KeyNotFoundException">Thrown if the token cannot be found.</exception>
- /// <remarks>
- /// It is acceptable for implementations to find the token, see that it has expired,
- /// delete it from the database and then throw <see cref="KeyNotFoundException"/>,
- /// or alternatively it can return the expired token anyway and the OAuth channel will
- /// log and throw the appropriate error.
- /// </remarks>
- public IServiceProviderAccessToken GetAccessToken(string token) {
- try {
- return Global.DataContext.IssuedToken.OfType<IssuedAccessToken>().First(tok => tok.Token == token);
- } catch (InvalidOperationException) {
- throw new KeyNotFoundException();
- }
- }
-
- /// <summary>
- /// Persists any changes made to the token.
- /// </summary>
- /// <param name="token">The token whose properties have been changed.</param>
- /// <remarks>
- /// 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).
- /// </remarks>
- public void UpdateToken(IServiceProviderRequestToken token) {
- Global.DataContext.SaveChanges();
- }
-
- #endregion
-
#region ITokenManager Members
/// <summary>
@@ -233,31 +108,5 @@ namespace WebFormsRelyingParty.Code {
}
#endregion
-
- /// <summary>
- /// Creates a token manager for use when this web site acts as a consumer of
- /// another OAuth service provider.
- /// </summary>
- /// <param name="consumerKey">The consumer key.</param>
- /// <param name="consumerSecret">The consumer secret.</param>
- /// <returns>The token manager.</returns>
- internal static IConsumerTokenManager CreateConsumer(string consumerKey, string consumerSecret) {
- if (String.IsNullOrEmpty(consumerKey)) {
- throw new ArgumentNullException("consumerKey");
- }
- if (consumerSecret == null) {
- throw new ArgumentNullException("consumerSecret");
- }
-
- return new OAuthTokenManager(consumerKey, consumerSecret);
- }
-
- /// <summary>
- /// Creates a token manager suitable for this web site acting as an OAuth service provider.
- /// </summary>
- /// <returns>The token manager.</returns>
- internal static IServiceProviderTokenManager CreateServiceProvider() {
- return new OAuthTokenManager();
- }
}
}
diff --git a/projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj b/projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj
index 23ae988..afd2cec 100644
--- a/projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj
+++ b/projecttemplates/WebFormsRelyingParty/WebFormsRelyingParty.csproj
@@ -87,6 +87,8 @@
<Content Include="Web.config" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="Code\OAuthConsumerTokenManager.cs" />
+ <Compile Include="Code\OAuthServiceProviderTokenManager.cs" />
<Compile Include="Code\OAuthTokenManager.cs" />
<Compile Include="Code\Policies.cs" />
<Compile Include="Model.IssuedRequestToken.cs" />