diff options
author | unknown <andarno@.redmond.corp.microsoft.com> | 2010-06-21 21:39:03 -0700 |
---|---|---|
committer | unknown <andarno@.redmond.corp.microsoft.com> | 2010-06-21 21:39:03 -0700 |
commit | e4b6a46c82db607d43ee352dd5ab0ae65848e5ba (patch) | |
tree | 75293bcf244e3be4610593fe97f7924f2a3c2a1f /samples/DotNetOpenAuth.ApplicationBlock/YammerConsumer.cs | |
parent | 5fcb636cd7485ccc1c19e36ddb212577ac0c7b43 (diff) | |
parent | c31fe99ee54f25890abc49a6f9ab7086a97c6c92 (diff) | |
download | DotNetOpenAuth-e4b6a46c82db607d43ee352dd5ab0ae65848e5ba.zip DotNetOpenAuth-e4b6a46c82db607d43ee352dd5ab0ae65848e5ba.tar.gz DotNetOpenAuth-e4b6a46c82db607d43ee352dd5ab0ae65848e5ba.tar.bz2 |
Added Yammer OAuth consumer sample.
(yuck, Yammer is so non-standard.)
Diffstat (limited to 'samples/DotNetOpenAuth.ApplicationBlock/YammerConsumer.cs')
-rw-r--r-- | samples/DotNetOpenAuth.ApplicationBlock/YammerConsumer.cs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/samples/DotNetOpenAuth.ApplicationBlock/YammerConsumer.cs b/samples/DotNetOpenAuth.ApplicationBlock/YammerConsumer.cs new file mode 100644 index 0000000..1e4aeef --- /dev/null +++ b/samples/DotNetOpenAuth.ApplicationBlock/YammerConsumer.cs @@ -0,0 +1,61 @@ +//----------------------------------------------------------------------- +// <copyright file="YammerConsumer.cs" company="Andrew Arnott"> +// Copyright (c) Andrew Arnott. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace DotNetOpenAuth.ApplicationBlock { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Net; + using System.Text; + using DotNetOpenAuth.Messaging; + using DotNetOpenAuth.OAuth; + using DotNetOpenAuth.OAuth.ChannelElements; + using DotNetOpenAuth.OAuth.Messages; + + public static class YammerConsumer { + /// <summary> + /// The Consumer to use for accessing Google data APIs. + /// </summary> + public static readonly ServiceProviderDescription ServiceDescription = new ServiceProviderDescription { + RequestTokenEndpoint = new MessageReceivingEndpoint("https://www.yammer.com/oauth/request_token", HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.PostRequest), + UserAuthorizationEndpoint = new MessageReceivingEndpoint("https://www.yammer.com/oauth/authorize", HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.GetRequest), + AccessTokenEndpoint = new MessageReceivingEndpoint("https://www.yammer.com/oauth/access_token", HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.PostRequest), + TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new PlaintextSigningBindingElement() }, + ProtocolVersion = ProtocolVersion.V10, + }; + + public static DesktopConsumer CreateConsumer(IConsumerTokenManager tokenManager) { + return new DesktopConsumer(ServiceDescription, tokenManager); + } + + public static Uri PrepareRequestAuthorization(DesktopConsumer consumer, out string requestToken) { + if (consumer == null) { + throw new ArgumentNullException("consumer"); + } + + Uri authorizationUrl = consumer.RequestUserAuthorization(null, null, out requestToken); + return authorizationUrl; + } + + public static AuthorizedTokenResponse CompleteAuthorization(DesktopConsumer consumer, string requestToken, string userCode) { + // Because Yammer has a proprietary callback_token parameter, and it's passed + // with the message that specifically bans extra arguments being passed, we have + // to cheat by adding the data to the URL itself here. + var customServiceDescription = new ServiceProviderDescription { + RequestTokenEndpoint = ServiceDescription.RequestTokenEndpoint, + UserAuthorizationEndpoint = ServiceDescription.UserAuthorizationEndpoint, + AccessTokenEndpoint = new MessageReceivingEndpoint(ServiceDescription.AccessTokenEndpoint.Location.AbsoluteUri + "?oauth_verifier=" + Uri.EscapeDataString(userCode), HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.PostRequest), + TamperProtectionElements = ServiceDescription.TamperProtectionElements, + ProtocolVersion = ProtocolVersion.V10, + }; + + // To use a custom service description we also must create a new WebConsumer. + var customConsumer = new DesktopConsumer(customServiceDescription, consumer.TokenManager); + var response = customConsumer.ProcessUserAuthorization(requestToken, userCode); + return response; + } + } +} |