DocSpace-client/thirdparty/AppLimit.CloudComputing.SharpBox/StorageProvider/GoogleDocs/GoogleDocsAuthorizationHelper.cs

75 lines
4.1 KiB
C#
Raw Normal View History

2020-03-13 13:40:58 +00:00
using System;
using System.Text;
using AppLimit.CloudComputing.SharpBox.Common.Net.oAuth;
using AppLimit.CloudComputing.SharpBox.Common.Net.oAuth.Context;
using AppLimit.CloudComputing.SharpBox.Common.Net.oAuth.Impl;
namespace AppLimit.CloudComputing.SharpBox.StorageProvider.GoogleDocs
{
public static class GoogleDocsAuthorizationHelper
{
public static GoogleDocsRequestToken GetGoogleDocsRequestToken(GoogleDocsConfiguration configuration, string consumerKey, string consumerSecret)
{
var consumerContext = new OAuthConsumerContext(consumerKey, consumerSecret);
var serviceContext = new OAuthServiceContext(GetRequestTokenUrl(configuration),
configuration.OAuthAuthorizeTokenUrl.ToString(),
configuration.AuthorizationCallBack.ToString(),
GetAccessTokenUrl(configuration, null));
var service = new OAuthService();
var token = service.GetRequestToken(serviceContext, consumerContext);
return token != null ? new GoogleDocsRequestToken(token) : null;
}
public static string GetGoogleDocsAuthorizationUrl(GoogleDocsConfiguration configuration, GoogleDocsRequestToken token)
{
return OAuthUrlGenerator.GenerateAuthorizationUrl(configuration.OAuthAuthorizeTokenUrl.ToString(),
configuration.AuthorizationCallBack.ToString(),
token.RealToken);
}
public static ICloudStorageAccessToken ExchangeGoogleDocsRequestTokenIntoAccessToken(GoogleDocsConfiguration configuration, string consumerKey, string consumerSecret, GoogleDocsRequestToken requestToken, string oAuthVerifier)
{
var consumerContext = new OAuthConsumerContext(consumerKey, consumerSecret);
var serviceContext = new OAuthServiceContext(configuration.OAuthGetRequestTokenUrl.ToString(),
configuration.OAuthAuthorizeTokenUrl.ToString(),
configuration.AuthorizationCallBack.ToString(),
GetAccessTokenUrl(configuration, oAuthVerifier));
var service = new OAuthService();
var accessToken = service.GetAccessToken(serviceContext, consumerContext, requestToken.RealToken);
if (accessToken == null) throw new UnauthorizedAccessException();
return new GoogleDocsToken(accessToken, consumerKey, consumerSecret);
}
public static ICloudStorageAccessToken BuildToken(string tokenKey, string tokenSecret, string consumerKey, string consumerSecret)
{
return new GoogleDocsToken(OAuthBase.UrlEncode(tokenKey), OAuthBase.UrlEncode(tokenSecret), consumerKey, consumerSecret);
}
private static string GetAccessTokenUrl(GoogleDocsConfiguration configuration, string oAuthVerifier)
{
var accessTokenUrl = configuration.OAuthGetAccessTokenUrl.ToString();
if (!string.IsNullOrEmpty(oAuthVerifier))
{
accessTokenUrl = string.Format("{0}?oauth_verifier={1}", accessTokenUrl, oAuthVerifier);
}
return accessTokenUrl;
}
private static string GetRequestTokenUrl(GoogleDocsConfiguration configuration)
{
var requestTokenUrl = configuration.OAuthGetRequestTokenUrl.ToString();
if (!string.IsNullOrEmpty(configuration.AccessUrlScope))
{
var sb = new StringBuilder(requestTokenUrl);
sb.AppendFormat("?scope={0}", OAuthBase.UrlEncode(configuration.AccessUrlScope, '.'));
sb.AppendFormat("&oauth_callback={0}", OAuthBase.UrlEncode(configuration.AuthorizationCallBack.ToString(), '.'));
requestTokenUrl = sb.ToString();
}
return requestTokenUrl;
}
}
}