DocSpace-buildtools/thirdparty/AppLimit.CloudComputing.SharpBox/Common/Net/oAuth/Impl/OAuthUrlGenerator.cs

85 lines
3.5 KiB
C#
Raw Normal View History

2020-03-13 13:40:58 +00:00
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using AppLimit.CloudComputing.SharpBox.Common.Net.oAuth.Context;
using AppLimit.CloudComputing.SharpBox.Common.Net.oAuth.Token;
using AppLimit.CloudComputing.SharpBox.Common.Net.Web;
namespace AppLimit.CloudComputing.SharpBox.Common.Net.oAuth.Impl
{
internal class OAuthUrlGenerator
{
public static string GenerateRequestTokenUrl(string baseRequestTokenUrl, OAuthConsumerContext context)
{
return GenerateSignedUrl(baseRequestTokenUrl, WebRequestMethodsEx.Http.Get, context, null);
}
public static string GenerateAuthorizationUrl(string baseAuthorizeUrl, string callbackUrl, OAuthToken requestToken)
{
var sb = new StringBuilder(baseAuthorizeUrl);
sb.AppendFormat("?oauth_token={0}", requestToken.TokenKey);
sb.AppendFormat("&oauth_callback={0}", OAuthBase.UrlEncode(callbackUrl, '.'));
return sb.ToString();
}
public static string GenerateAccessTokenUrl(string baseAccessTokenUrl, OAuthConsumerContext context, OAuthToken requestToken)
{
return GenerateSignedUrl(baseAccessTokenUrl, WebRequestMethodsEx.Http.Get, context, requestToken);
}
private static string GenerateSignedUrl(string baseRequestTokenUrl, string method, OAuthConsumerContext context, OAuthToken token)
{
string normalizedUrl;
string normalizedRequestParameters;
var oAuth = new OAuthBase();
var nonce = oAuth.GenerateNonce();
var timeStamp = oAuth.GenerateTimeStamp();
var sig = oAuth.GenerateSignature(new Uri(baseRequestTokenUrl),
context.ConsumerKey, context.ConsumerSecret,
token == null ? string.Empty : token.TokenKey, token == null ? string.Empty : token.TokenSecret,
method, timeStamp, nonce,
context.SignatureMethod,
out normalizedUrl, out normalizedRequestParameters);
//
// The signature as self has to be encoded to be ensure that no not url compatibale characters
// will be used. The SHA1 hash can contain a bunch of this characters
//
sig = HttpUtility.UrlEncode(sig);
var sb = new StringBuilder(normalizedUrl);
sb.AppendFormat("?");
sb.AppendFormat(normalizedRequestParameters);
sb.AppendFormat("&oauth_signature={0}", sig);
return sb.ToString();
}
public static string GenerateSignedUrl(string baseResourceUrl, string method, OAuthConsumerContext context, OAuthToken token, Dictionary<string, string> urlParameter)
{
var sb = new StringBuilder(baseResourceUrl);
if (urlParameter != null)
{
sb.Append('?');
foreach (var kvp in urlParameter)
{
if (sb[sb.Length - 1] == '?')
sb.AppendFormat("{0}={1}", kvp.Key, OAuthBase.UrlEncode(kvp.Value));
else
sb.AppendFormat("&{0}={1}", kvp.Key, OAuthBase.UrlEncode(kvp.Value));
}
}
return GenerateSignedUrl(sb.ToString(), method, context, token);
}
}
}