diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2008-09-24 20:57:49 -0700 |
---|---|---|
committer | Andrew <andrewarnott@gmail.com> | 2008-09-24 20:57:49 -0700 |
commit | de6a705de31c11ee5892c94cc9afc5c8e49a90ce (patch) | |
tree | ace1f83f585c1e84da5f768cb6ed4dbeecb42d57 /src/DotNetOAuth/ServiceProvider.cs | |
parent | 22341a07b0ba0dc685bb859b0ed82c22fc3c09db (diff) | |
download | DotNetOpenAuth-de6a705de31c11ee5892c94cc9afc5c8e49a90ce.zip DotNetOpenAuth-de6a705de31c11ee5892c94cc9afc5c8e49a90ce.tar.gz DotNetOpenAuth-de6a705de31c11ee5892c94cc9afc5c8e49a90ce.tar.bz2 |
Added a scenario test from Appendix A (incomplete but passing so far).
Included in this change are a lot of fixes and additional implementation.
Diffstat (limited to 'src/DotNetOAuth/ServiceProvider.cs')
-rw-r--r-- | src/DotNetOAuth/ServiceProvider.cs | 89 |
1 files changed, 86 insertions, 3 deletions
diff --git a/src/DotNetOAuth/ServiceProvider.cs b/src/DotNetOAuth/ServiceProvider.cs index 812a6a8..217d064 100644 --- a/src/DotNetOAuth/ServiceProvider.cs +++ b/src/DotNetOAuth/ServiceProvider.cs @@ -6,9 +6,11 @@ namespace DotNetOAuth {
using System;
- using System.Collections.Generic;
- using System.Text;
using System.Web;
+ using DotNetOAuth.ChannelElements;
+ using DotNetOAuth.Messages;
+ using DotNetOAuth.Messaging;
+ using DotNetOAuth.Messaging.Bindings;
/// <summary>
/// A web application that allows access via OAuth.
@@ -21,13 +23,22 @@ namespace DotNetOAuth { /// <item>Any additional request parameters that the Service Provider requires in order to obtain a Token. Service Provider specific parameters MUST NOT begin with oauth_.</item>
/// </list>
/// </remarks>
- internal class ServiceProvider {
+ public class ServiceProvider {
/// <summary>
/// The field used to store the value of the <see cref="RequestTokenEndpoint"/> property.
/// </summary>
private ServiceProviderEndpoint requestTokenEndpoint;
/// <summary>
+ /// Initializes a new instance of the <see cref="ServiceProvider"/> class.
+ /// </summary>
+ public ServiceProvider() {
+ SigningBindingElementBase signingElement = new PlainTextSigningBindingElement();
+ INonceStore store = new NonceMemoryStore(StandardExpirationBindingElement.DefaultMaximumMessageAge);
+ this.Channel = new OAuthChannel(signingElement, store);
+ }
+
+ /// <summary>
/// Gets or sets the URL used to obtain an unauthorized Request Token,
/// described in Section 6.1 (Obtaining an Unauthorized Request Token).
/// </summary>
@@ -68,5 +79,77 @@ namespace DotNetOAuth { /// This is the URL that <see cref="Messages.RequestAccessTokenMessage"/> messages are directed to.
/// </remarks>
public ServiceProviderEndpoint AccessTokenEndpoint { get; set; }
+
+ /// <summary>
+ /// Gets or sets the channel to use for sending/receiving messages.
+ /// </summary>
+ internal OAuthChannel Channel { get; set; }
+
+ /// <summary>
+ /// Gets the pending user agent redirect based message to be sent as an HttpResponse.
+ /// </summary>
+ public Response PendingRequest { get; private set; }
+
+ internal RequestTokenMessage ReadTokenRequest() {
+ return this.Channel.ReadFromRequest<RequestTokenMessage>();
+ }
+
+ internal RequestTokenMessage ReadTokenRequest(HttpRequest request) {
+ return this.ReadTokenRequest(new HttpRequestInfo(request));
+ }
+
+ internal RequestTokenMessage ReadTokenRequest(HttpRequestInfo request) {
+ return this.Channel.ReadFromRequest<RequestTokenMessage>(request);
+ }
+
+ internal void SendUnauthorizedTokenResponse(string token, string secret) {
+ UnauthorizedRequestTokenMessage response = new UnauthorizedRequestTokenMessage {
+ RequestToken = token,
+ TokenSecret = secret,
+ };
+
+ this.Channel.Send(response);
+ }
+
+ internal DirectUserToServiceProviderMessage ReadAuthorizationRequest() {
+ return this.Channel.ReadFromRequest<DirectUserToServiceProviderMessage>();
+ }
+
+ internal DirectUserToServiceProviderMessage ReadAuthorizationRequest(HttpRequest request) {
+ return this.ReadAuthorizationRequest(new HttpRequestInfo(request));
+ }
+
+ internal DirectUserToServiceProviderMessage ReadAuthorizationRequest(HttpRequestInfo request) {
+ return this.Channel.ReadFromRequest<DirectUserToServiceProviderMessage>(request);
+ }
+
+ internal void SendAuthorizationResponse(DirectUserToServiceProviderMessage request) {
+ var authorization = new DirectUserToConsumerMessage(request.Callback) {
+ RequestToken = request.RequestToken,
+ };
+ this.Channel.Send(authorization);
+ this.PendingRequest = this.Channel.DequeueIndirectOrResponseMessage();
+ }
+
+ internal RequestAccessTokenMessage ReadAccessTokenRequest() {
+ return this.Channel.ReadFromRequest<RequestAccessTokenMessage>();
+ }
+
+ internal RequestAccessTokenMessage ReadAccessTokenRequest(HttpRequest request) {
+ return this.ReadAccessTokenRequest(new HttpRequestInfo(request));
+ }
+
+ internal RequestAccessTokenMessage ReadAccessTokenRequest(HttpRequestInfo request) {
+ return this.Channel.ReadFromRequest<RequestAccessTokenMessage>(request);
+ }
+
+ internal void SendAccessToken(string accessToken, string tokenSecret) {
+ var grantAccess = new GrantAccessTokenMessage {
+ AccessToken = accessToken,
+ TokenSecret = tokenSecret,
+ };
+
+ this.Channel.Send(grantAccess);
+ }
}
}
|