--
Justin Kerr Sheckler
Developer API Lead
Etsy.com
jus...@etsy.com
Consumer.Channel.Send(Consumer.PrepareRequestUserAuthorization(null, null, null)); var accessTokenResponse = Consumer.ProcessUserAuthorization(); AccessToken = accessTokenResponse.AccessToken; TokenSecret = TokenManager.GetTokenSecret(AccessToken);...
Consumer.Channel.Send(Consumer.PrepareRequestUserAuthorization(null, null, null));...
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OAuth;
using DotNetOpenAuth.OAuth.ChannelElements;
using DotNetOpenAuth.OAuth.Messages;
using RestSharp;
using RestSharp.Authenticators;
public class Authorise
{
#region Supporting class
public class ConsumerTokenManager : IConsumerTokenManager
{
private Dictionary<string, string> tokensAndSecrets = new Dictionary<string, string>();
public ConsumerTokenManager(string consumerKey, string consumerKeySecret)
{
ConsumerKey = consumerKey;
ConsumerSecret = consumerKeySecret;
}
#region ITokenManager Members
public string ConsumerKey { get; private set; }
public string ConsumerSecret { get; private set; }
public string GetTokenSecret(string token)
{
return this.tokensAndSecrets[token];
}
public void StoreNewRequestToken(UnauthorizedTokenRequest request, ITokenSecretContainingMessage response)
{
this.tokensAndSecrets[response.Token] = response.TokenSecret;
}
public void ExpireRequestTokenAndStoreNewAccessToken(string consumerKey, string requestToken, string accessToken, string accessTokenSecret)
{
this.tokensAndSecrets.Remove(requestToken);
this.tokensAndSecrets[accessToken] = accessTokenSecret;
}
/// <summary>
/// Classifies a token as a request token or an access token.
/// </summary>
/// <param name="token">The token to classify.</param>
/// <returns>Request or Access token, or invalid if the token is not recognized.</returns>
public TokenType GetTokenType(string token)
{
throw new NotImplementedException();
}
#endregion
}
#endregion Supporting class
private WebConsumer Consumer
{
get;
set;
}
private ConsumerTokenManager TokenManager
{
get;
set;
}
public string AccessToken
{
get;
set;
}
public string TokenSecret
{
get;
set;
}
public void GetAccessTokensFromEtsy(string consumerKey, string consumerKeySecret)
{
MessageReceivingEndpoint requestTokenEndpoint = new MessageReceivingEndpoint(new Uri("https://openapi.etsy.com/v2/oauth/request_token"), HttpDeliveryMethods.GetRequest | HttpDeliveryMethods.AuthorizationHeaderRequest);
MessageReceivingEndpoint userAuthEndpoint = new MessageReceivingEndpoint(new Uri("https://www.etsy.com/oauth/signin"), HttpDeliveryMethods.GetRequest);
MessageReceivingEndpoint accessTokenEndpoint = new MessageReceivingEndpoint(new Uri("https://openapi.etsy.com/v2/oauth/access_token"), HttpDeliveryMethods.GetRequest);
TokenManager = new ConsumerTokenManager(consumerKey, consumerKeySecret);
Consumer = new WebConsumer
(
new ServiceProviderDescription
{
AccessTokenEndpoint = accessTokenEndpoint,
RequestTokenEndpoint = requestTokenEndpoint,
UserAuthorizationEndpoint = userAuthEndpoint,
TamperProtectionElements = new DotNetOpenAuth.Messaging.ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement(), },
ProtocolVersion = ProtocolVersion.V10
},
TokenManager
);
try
{
// https://scatteredcode.wordpress.com/2011/12/01/dotnetopenauth-oauth-and-mvc-for-dummies/
GetAccessTokens();
}
catch (Exception ex)
{
}
}
public void GetAccessTokens()
{
try
{
// Url to redirect to
//var authUrl = new Uri(Request.Url.Scheme + "://" + Request.Url.Authority + "/Home/OAuthCallBack");
// request access
Consumer.Channel.Send(Consumer.PrepareRequestUserAuthorization(null, null, null));
var accessTokenResponse = Consumer.ProcessUserAuthorization();
AccessToken = accessTokenResponse.AccessToken;
TokenSecret = TokenManager.GetTokenSecret(AccessToken);
}
catch (Exception ex)
{
}
}
}