summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2008-09-30 08:57:03 -0700
committerAndrew <andrewarnott@gmail.com>2008-10-02 07:34:01 -0700
commit26813f1d37d82ad29a545df7c48fbde82228b80d (patch)
treedb37c57df2afb770593b22b142fc85bd1e672053
parent1b9d589c7ed1cf7648ee7abc9150def40d6274b3 (diff)
downloadDotNetOpenAuth-26813f1d37d82ad29a545df7c48fbde82228b80d.zip
DotNetOpenAuth-26813f1d37d82ad29a545df7c48fbde82228b80d.tar.gz
DotNetOpenAuth-26813f1d37d82ad29a545df7c48fbde82228b80d.tar.bz2
Public API work.
-rw-r--r--src/DotNetOAuth.Test/Scenarios/CoordinatingOAuthChannel.cs8
-rw-r--r--src/DotNetOAuth/ChannelElements/ITokenGenerator.cs2
-rw-r--r--src/DotNetOAuth/Consumer.cs54
-rw-r--r--src/DotNetOAuth/Messaging/Channel.cs2
-rw-r--r--src/DotNetOAuth/ServiceProvider.cs8
5 files changed, 48 insertions, 26 deletions
diff --git a/src/DotNetOAuth.Test/Scenarios/CoordinatingOAuthChannel.cs b/src/DotNetOAuth.Test/Scenarios/CoordinatingOAuthChannel.cs
index 6bddaf8..4e9ce0f 100644
--- a/src/DotNetOAuth.Test/Scenarios/CoordinatingOAuthChannel.cs
+++ b/src/DotNetOAuth.Test/Scenarios/CoordinatingOAuthChannel.cs
@@ -59,6 +59,10 @@ namespace DotNetOAuth.Test.Scenarios {
this.RemoteChannel.incomingMessageSignal.Set();
}
+ protected internal override HttpRequestInfo GetRequestFromContext() {
+ return new HttpRequestInfo(this.AwaitIncomingMessage());
+ }
+
protected override IProtocolMessage RequestInternal(IDirectedProtocolMessage request) {
HttpRequestInfo requestInfo = this.SpoofHttpMethod(request);
TestBase.TestLogger.InfoFormat("Sending request: {0}", requestInfo.Message);
@@ -83,10 +87,6 @@ namespace DotNetOAuth.Test.Scenarios {
return this.SendDirectMessageResponse(message);
}
- protected override HttpRequestInfo GetRequestFromContext() {
- return new HttpRequestInfo(this.AwaitIncomingMessage());
- }
-
protected override IProtocolMessage ReadFromRequestInternal(HttpRequestInfo request) {
return request.Message;
}
diff --git a/src/DotNetOAuth/ChannelElements/ITokenGenerator.cs b/src/DotNetOAuth/ChannelElements/ITokenGenerator.cs
index b9d690f..c1e3494 100644
--- a/src/DotNetOAuth/ChannelElements/ITokenGenerator.cs
+++ b/src/DotNetOAuth/ChannelElements/ITokenGenerator.cs
@@ -8,7 +8,7 @@ namespace DotNetOAuth.ChannelElements {
/// <summary>
/// An interface allowing OAuth hosts to inject their own algorithm for generating tokens and secrets.
/// </summary>
- internal interface ITokenGenerator {
+ public interface ITokenGenerator {
/// <summary>
/// Generates a new token to represent a not-yet-authorized request to access protected resources.
/// </summary>
diff --git a/src/DotNetOAuth/Consumer.cs b/src/DotNetOAuth/Consumer.cs
index 9bc7951..436548e 100644
--- a/src/DotNetOAuth/Consumer.cs
+++ b/src/DotNetOAuth/Consumer.cs
@@ -8,6 +8,7 @@ namespace DotNetOAuth {
using System;
using System.Collections.Generic;
using System.Net;
+ using System.Web;
using DotNetOAuth.ChannelElements;
using DotNetOAuth.Messages;
using DotNetOAuth.Messaging;
@@ -123,23 +124,20 @@ namespace DotNetOAuth {
/// Processes an incoming authorization-granted message from an SP and obtains an access token.
/// </summary>
/// <returns>The access token, or null if no incoming authorization message was recognized.</returns>
+ /// <remarks>
+ /// Requires HttpContext.Current.
+ /// </remarks>
public string ProcessUserAuthorization() {
- DirectUserToConsumerMessage authorizationMessage;
- if (this.Channel.TryReadFromRequest<DirectUserToConsumerMessage>(out authorizationMessage)) {
- // Exchange request token for access token.
- string requestTokenSecret = this.TokenManager.GetTokenSecret(authorizationMessage.RequestToken);
- var requestAccess = new RequestAccessTokenMessage(this.ServiceProvider.AccessTokenEndpoint) {
- RequestToken = authorizationMessage.RequestToken,
- TokenSecret = requestTokenSecret,
- ConsumerKey = this.ConsumerKey,
- ConsumerSecret = this.ConsumerSecret,
- };
- var grantAccess = this.Channel.Request<GrantAccessTokenMessage>(requestAccess);
- this.TokenManager.ExpireRequestTokenAndStoreNewAccessToken(this.ConsumerKey, authorizationMessage.RequestToken, grantAccess.AccessToken, grantAccess.TokenSecret);
- return grantAccess.AccessToken;
- } else {
- return null;
- }
+ return this.ProcessUserAuthorization(this.Channel.GetRequestFromContext());
+ }
+
+ /// <summary>
+ /// Processes an incoming authorization-granted message from an SP and obtains an access token.
+ /// </summary>
+ /// <param name="request">The incoming HTTP request.</param>
+ /// <returns>The access token, or null if no incoming authorization message was recognized.</returns>
+ public string ProcessUserAuthorization(HttpRequest request) {
+ return this.ProcessUserAuthorization(new HttpRequestInfo(request));
}
/// <summary>
@@ -170,6 +168,30 @@ namespace DotNetOAuth {
}
/// <summary>
+ /// Processes an incoming authorization-granted message from an SP and obtains an access token.
+ /// </summary>
+ /// <param name="request">The incoming HTTP request.</param>
+ /// <returns>The access token, or null if no incoming authorization message was recognized.</returns>
+ internal string ProcessUserAuthorization(HttpRequestInfo request) {
+ DirectUserToConsumerMessage authorizationMessage;
+ if (this.Channel.TryReadFromRequest<DirectUserToConsumerMessage>(request, out authorizationMessage)) {
+ // Exchange request token for access token.
+ string requestTokenSecret = this.TokenManager.GetTokenSecret(authorizationMessage.RequestToken);
+ var requestAccess = new RequestAccessTokenMessage(this.ServiceProvider.AccessTokenEndpoint) {
+ RequestToken = authorizationMessage.RequestToken,
+ TokenSecret = requestTokenSecret,
+ ConsumerKey = this.ConsumerKey,
+ ConsumerSecret = this.ConsumerSecret,
+ };
+ var grantAccess = this.Channel.Request<GrantAccessTokenMessage>(requestAccess);
+ this.TokenManager.ExpireRequestTokenAndStoreNewAccessToken(this.ConsumerKey, authorizationMessage.RequestToken, grantAccess.AccessToken, grantAccess.TokenSecret);
+ return grantAccess.AccessToken;
+ } else {
+ return null;
+ }
+ }
+
+ /// <summary>
/// Creates a web request prepared with OAuth authorization
/// that may be further tailored by adding parameters by the caller.
/// </summary>
diff --git a/src/DotNetOAuth/Messaging/Channel.cs b/src/DotNetOAuth/Messaging/Channel.cs
index fff8f7c..a5cf25f 100644
--- a/src/DotNetOAuth/Messaging/Channel.cs
+++ b/src/DotNetOAuth/Messaging/Channel.cs
@@ -328,7 +328,7 @@ namespace DotNetOAuth.Messaging {
/// Requires an HttpContext.Current context.
/// </remarks>
/// <exception cref="InvalidOperationException">Thrown when <see cref="HttpContext.Current"/> is null.</exception>
- protected virtual HttpRequestInfo GetRequestFromContext() {
+ protected internal virtual HttpRequestInfo GetRequestFromContext() {
if (HttpContext.Current == null) {
throw new InvalidOperationException(MessagingStrings.HttpContextRequired);
}
diff --git a/src/DotNetOAuth/ServiceProvider.cs b/src/DotNetOAuth/ServiceProvider.cs
index 44d64e4..493cd09 100644
--- a/src/DotNetOAuth/ServiceProvider.cs
+++ b/src/DotNetOAuth/ServiceProvider.cs
@@ -6,13 +6,13 @@
namespace DotNetOAuth {
using System;
+ using System.Collections.Generic;
using System.Globalization;
using System.Web;
using DotNetOAuth.ChannelElements;
using DotNetOAuth.Messages;
using DotNetOAuth.Messaging;
using DotNetOAuth.Messaging.Bindings;
-using System.Collections.Generic;
/// <summary>
/// A web application that allows access via OAuth.
@@ -31,7 +31,7 @@ using System.Collections.Generic;
/// </summary>
/// <param name="serviceDescription">The endpoints and behavior on the Service Provider.</param>
/// <param name="tokenManager">The host's method of storing and recalling tokens and secrets.</param>
- internal ServiceProvider(ServiceProviderDescription serviceDescription, ITokenManager tokenManager) {
+ public ServiceProvider(ServiceProviderDescription serviceDescription, ITokenManager tokenManager) {
if (serviceDescription == null) {
throw new ArgumentNullException("serviceDescription");
}
@@ -61,12 +61,12 @@ using System.Collections.Generic;
/// <summary>
/// Gets or sets the generator responsible for generating new tokens and secrets.
/// </summary>
- internal ITokenGenerator TokenGenerator { get; set; }
+ public ITokenGenerator TokenGenerator { get; set; }
/// <summary>
/// Gets the persistence store for tokens and secrets.
/// </summary>
- internal ITokenManager TokenManager { get; private set; }
+ public ITokenManager TokenManager { get; private set; }
internal RequestTokenMessage ReadTokenRequest() {
return this.Channel.ReadFromRequest<RequestTokenMessage>();