summaryrefslogtreecommitdiffstats
path: root/samples/ServiceProvider/App_Code
diff options
context:
space:
mode:
Diffstat (limited to 'samples/ServiceProvider/App_Code')
-rw-r--r--samples/ServiceProvider/App_Code/CustomOAuthTypeProvider.cs30
-rw-r--r--samples/ServiceProvider/App_Code/DatabaseTokenManager.cs12
-rw-r--r--samples/ServiceProvider/App_Code/RequestScopedTokenMessage.cs20
3 files changed, 57 insertions, 5 deletions
diff --git a/samples/ServiceProvider/App_Code/CustomOAuthTypeProvider.cs b/samples/ServiceProvider/App_Code/CustomOAuthTypeProvider.cs
new file mode 100644
index 0000000..d7a9ebf
--- /dev/null
+++ b/samples/ServiceProvider/App_Code/CustomOAuthTypeProvider.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using DotNetOAuth.ChannelElements;
+using DotNetOAuth.Messages;
+
+/// <summary>
+/// A custom class that will cause the OAuth library to use our custom message types
+/// where we have them.
+/// </summary>
+public class CustomOAuthTypeProvider : OAuthServiceProviderMessageTypeProvider {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CustomOAuthTypeProvider"/> class.
+ /// </summary>
+ /// <param name="tokenManager">The token manager instance to use.</param>
+ public CustomOAuthTypeProvider(ITokenManager tokenManager) : base(tokenManager) {
+ }
+
+ public override Type GetRequestMessageType(IDictionary<string, string> fields) {
+ Type type = base.GetRequestMessageType(fields);
+
+ // inject our own type here to replace the standard one
+ if (type == typeof(RequestTokenMessage)) {
+ type = typeof(RequestScopedTokenMessage);
+ }
+
+ return type;
+ }
+}
diff --git a/samples/ServiceProvider/App_Code/DatabaseTokenManager.cs b/samples/ServiceProvider/App_Code/DatabaseTokenManager.cs
index acc8b94..b484086 100644
--- a/samples/ServiceProvider/App_Code/DatabaseTokenManager.cs
+++ b/samples/ServiceProvider/App_Code/DatabaseTokenManager.cs
@@ -9,6 +9,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using DotNetOAuth.ChannelElements;
+using DotNetOAuth.Messages;
public class DatabaseTokenManager : ITokenManager {
#region ITokenManager Members
@@ -33,13 +34,14 @@ public class DatabaseTokenManager : ITokenManager {
return tokenRow.TokenSecret;
}
- public void StoreNewRequestToken(string consumerKey, string requestToken, string requestTokenSecret, IDictionary<string, string> requestParameters, IDictionary<string, string> responseParameters) {
- var consumer = Global.DataContext.OAuthConsumers.Single(consumerRow => consumerRow.ConsumerKey == consumerKey);
- string scope = requestParameters["scope"];
+ public void StoreNewRequestToken(RequestTokenMessage request, UnauthorizedRequestTokenMessage response) {
+ RequestScopedTokenMessage scopedRequest = (RequestScopedTokenMessage)request;
+ var consumer = Global.DataContext.OAuthConsumers.Single(consumerRow => consumerRow.ConsumerKey == request.ConsumerKey);
+ string scope = scopedRequest.Scope;
OAuthToken newToken = new OAuthToken {
OAuthConsumer = consumer,
- Token = requestToken,
- TokenSecret = requestTokenSecret,
+ Token = response.RequestToken,
+ TokenSecret = response.TokenSecret,
IssueDate = DateTime.UtcNow,
Scope = scope,
};
diff --git a/samples/ServiceProvider/App_Code/RequestScopedTokenMessage.cs b/samples/ServiceProvider/App_Code/RequestScopedTokenMessage.cs
new file mode 100644
index 0000000..e8dbdeb
--- /dev/null
+++ b/samples/ServiceProvider/App_Code/RequestScopedTokenMessage.cs
@@ -0,0 +1,20 @@
+using DotNetOAuth.Messages;
+using DotNetOAuth.Messaging;
+
+/// <summary>
+/// A custom web app version of the message sent to request an unauthorized token.
+/// </summary>
+public class RequestScopedTokenMessage : RequestTokenMessage {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="RequestScopedTokenMessage"/> class.
+ /// </summary>
+ /// <param name="endpoint">The endpoint that will receive the message.</param>
+ public RequestScopedTokenMessage(MessageReceivingEndpoint endpoint) : base(endpoint) {
+ }
+
+ /// <summary>
+ /// Gets or sets the scope of the access being requested.
+ /// </summary>
+ [MessagePart("scope", IsRequired = true)]
+ public string Scope { get; set; }
+}