summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.Test/OAuth/AppendixScenarios.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/DotNetOpenAuth.Test/OAuth/AppendixScenarios.cs')
-rw-r--r--src/DotNetOpenAuth.Test/OAuth/AppendixScenarios.cs112
1 files changed, 72 insertions, 40 deletions
diff --git a/src/DotNetOpenAuth.Test/OAuth/AppendixScenarios.cs b/src/DotNetOpenAuth.Test/OAuth/AppendixScenarios.cs
index a295732..88e461c 100644
--- a/src/DotNetOpenAuth.Test/OAuth/AppendixScenarios.cs
+++ b/src/DotNetOpenAuth.Test/OAuth/AppendixScenarios.cs
@@ -8,6 +8,9 @@ namespace DotNetOpenAuth.Test.OAuth {
using System;
using System.IO;
using System.Net;
+ using System.Net.Http;
+ using System.Net.Http.Headers;
+ using System.Threading.Tasks;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OAuth;
using DotNetOpenAuth.OAuth.ChannelElements;
@@ -17,50 +20,79 @@ namespace DotNetOpenAuth.Test.OAuth {
[TestFixture]
public class AppendixScenarios : TestBase {
[Test]
- public void SpecAppendixAExample() {
- ServiceProviderDescription serviceDescription = new ServiceProviderDescription() {
- RequestTokenEndpoint = new MessageReceivingEndpoint("https://photos.example.net/request_token", HttpDeliveryMethods.PostRequest),
- UserAuthorizationEndpoint = new MessageReceivingEndpoint("http://photos.example.net/authorize", HttpDeliveryMethods.GetRequest),
- AccessTokenEndpoint = new MessageReceivingEndpoint("https://photos.example.net/access_token", HttpDeliveryMethods.PostRequest),
- TamperProtectionElements = new ITamperProtectionChannelBindingElement[] {
- new PlaintextSigningBindingElement(),
- new HmacSha1SigningBindingElement(),
- },
+ public async Task SpecAppendixAExample() {
+ var serviceDescription = new ServiceProviderDescription(
+ "https://photos.example.net/request_token",
+ "http://photos.example.net/authorize",
+ "https://photos.example.net/access_token");
+ var serviceHostDescription = new ServiceProviderHostDescription {
+ RequestTokenEndpoint = new MessageReceivingEndpoint(serviceDescription.TemporaryCredentialsRequestEndpoint, HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest),
+ UserAuthorizationEndpoint = new MessageReceivingEndpoint(serviceDescription.ResourceOwnerAuthorizationEndpoint, HttpDeliveryMethods.GetRequest),
+ AccessTokenEndpoint = new MessageReceivingEndpoint(serviceDescription.TokenRequestEndpoint, HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest),
+ TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement(), },
};
- MessageReceivingEndpoint accessPhotoEndpoint = new MessageReceivingEndpoint("http://photos.example.net/photos?file=vacation.jpg&size=original", HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.GetRequest);
- ConsumerDescription consumerDescription = new ConsumerDescription("dpf43f3p2l4k3l03", "kd94hf93k423kf44");
+ var accessPhotoEndpoint = new Uri("http://photos.example.net/photos?file=vacation.jpg&size=original");
+ var consumerDescription = new ConsumerDescription("dpf43f3p2l4k3l03", "kd94hf93k423kf44");
+
+ var tokenManager = new InMemoryTokenManager();
+ tokenManager.AddConsumer(consumerDescription);
+ var sp = new ServiceProvider(serviceHostDescription, tokenManager);
+
+ var coordinator = new CoordinatorBase(
+ async (hostFactories, ct) => {
+ var consumer = new Consumer(
+ consumerDescription.ConsumerKey,
+ consumerDescription.ConsumerSecret,
+ serviceDescription,
+ new MemoryTemporaryCredentialStorage());
+ consumer.HostFactories = hostFactories;
+ var authorizeUrl = await consumer.RequestUserAuthorizationAsync(new Uri("http://printer.example.com/request_token_ready"));
+ Uri authorizeResponseUri;
+ using (var httpClient = hostFactories.CreateHttpClient()) {
+ using (var response = await httpClient.GetAsync(authorizeUrl, ct)) {
+ Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Redirect));
+ authorizeResponseUri = response.Headers.Location;
+ }
+ }
+
+ var accessTokenResponse = await consumer.ProcessUserAuthorizationAsync(authorizeResponseUri, ct);
+ Assert.That(accessTokenResponse, Is.Not.Null);
- OAuthCoordinator coordinator = new OAuthCoordinator(
- consumerDescription,
- serviceDescription,
- consumer => {
- consumer.Channel.PrepareResponse(consumer.PrepareRequestUserAuthorization(new Uri("http://printer.example.com/request_token_ready"), null, null)); // .Send() dropped because this is just a simulation
- string accessToken = consumer.ProcessUserAuthorization().AccessToken;
- var photoRequest = consumer.CreateAuthorizingMessage(accessPhotoEndpoint, accessToken);
- OutgoingWebResponse protectedPhoto = ((CoordinatingOAuthConsumerChannel)consumer.Channel).RequestProtectedResource(photoRequest);
- Assert.IsNotNull(protectedPhoto);
- Assert.AreEqual(HttpStatusCode.OK, protectedPhoto.Status);
- Assert.AreEqual("image/jpeg", protectedPhoto.Headers[HttpResponseHeader.ContentType]);
- Assert.AreNotEqual(0, protectedPhoto.ResponseStream.Length);
+ using (var authorizingClient = consumer.CreateHttpClient(accessTokenResponse.AccessToken)) {
+ using (var protectedPhoto = await authorizingClient.GetAsync(accessPhotoEndpoint, ct)) {
+ Assert.That(protectedPhoto, Is.Not.Null);
+ protectedPhoto.EnsureSuccessStatusCode();
+ Assert.That("image/jpeg", Is.EqualTo(protectedPhoto.Content.Headers.ContentType.MediaType));
+ Assert.That(protectedPhoto.Content.Headers.ContentLength, Is.Not.EqualTo(0));
+ }
+ }
},
- sp => {
- var requestTokenMessage = sp.ReadTokenRequest();
- sp.Channel.PrepareResponse(sp.PrepareUnauthorizedTokenMessage(requestTokenMessage)); // .Send() dropped because this is just a simulation
- var authRequest = sp.ReadAuthorizationRequest();
- ((InMemoryTokenManager)sp.TokenManager).AuthorizeRequestToken(authRequest.RequestToken);
- sp.Channel.PrepareResponse(sp.PrepareAuthorizationResponse(authRequest)); // .Send() dropped because this is just a simulation
- var accessRequest = sp.ReadAccessTokenRequest();
- sp.Channel.PrepareResponse(sp.PrepareAccessTokenMessage(accessRequest)); // .Send() dropped because this is just a simulation
- string accessToken = sp.ReadProtectedResourceAuthorization().AccessToken;
- ((CoordinatingOAuthServiceProviderChannel)sp.Channel).SendDirectRawResponse(new OutgoingWebResponse {
- ResponseStream = new MemoryStream(new byte[] { 0x33, 0x66 }),
- Headers = new WebHeaderCollection {
- { HttpResponseHeader.ContentType, "image/jpeg" },
- },
- });
- });
+ CoordinatorBase.Handle(serviceDescription.TemporaryCredentialsRequestEndpoint).By(
+ async (request, ct) => {
+ var requestTokenMessage = await sp.ReadTokenRequestAsync(request, ct);
+ return await sp.Channel.PrepareResponseAsync(sp.PrepareUnauthorizedTokenMessage(requestTokenMessage));
+ }),
+ CoordinatorBase.Handle(serviceDescription.ResourceOwnerAuthorizationEndpoint).By(
+ async (request, ct) => {
+ var authRequest = await sp.ReadAuthorizationRequestAsync(request, ct);
+ ((InMemoryTokenManager)sp.TokenManager).AuthorizeRequestToken(authRequest.RequestToken);
+ return await sp.Channel.PrepareResponseAsync(sp.PrepareAuthorizationResponse(authRequest));
+ }),
+ CoordinatorBase.Handle(serviceDescription.TokenRequestEndpoint).By(
+ async (request, ct) => {
+ var accessRequest = await sp.ReadAccessTokenRequestAsync(request, ct);
+ return await sp.Channel.PrepareResponseAsync(sp.PrepareAccessTokenMessage(accessRequest), ct);
+ }),
+ CoordinatorBase.Handle(accessPhotoEndpoint).By(
+ async (request, ct) => {
+ string accessToken = (await sp.ReadProtectedResourceAuthorizationAsync(request)).AccessToken;
+ Assert.That(accessToken, Is.Not.Null.And.Not.Empty);
+ var responseMessage = new HttpResponseMessage { Content = new ByteArrayContent(new byte[] { 0x33, 0x66 }), };
+ responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
+ return responseMessage;
+ }));
- coordinator.Run();
+ await coordinator.RunAsync();
}
}
}