Example #1
0
 public static string Get(string url, OAuthToken consumerToken, OAuthToken oauthToken, WebProxy proxy)
 {
     string nonce, timestamp;
     string signature = GetSignature(WebMethod.GET, consumerToken, oauthToken, url, out timestamp, out nonce);
     HttpWebRequest request = CreateWebRequest(url, WebMethod.GET, nonce, timestamp, signature, consumerToken, oauthToken, proxy);
     return GetWebResponse(request);
 }
        private Uri SignRequest(Uri uri, OAuthToken requestToken = null)
        {
            var nonce = _oAuthBase.GenerateNonce();
            var timestamp = _oAuthBase.GenerateTimeStamp();
            string parameters;
            string normalizedUrl;

            string token = requestToken == null ? String.Empty : requestToken.Token;
            string secret = requestToken == null ? String.Empty : requestToken.Secret;

            var signature = _oAuthBase.GenerateSignature(
                uri, _consumerKey, _consumerSecret,
                token, secret, "GET", timestamp,
                nonce, OAuthBase.SignatureTypes.HMACSHA1,
                out normalizedUrl, out parameters);

            signature = HttpUtility.UrlEncode(signature);

            var requestUri = new StringBuilder(uri.ToString());
            requestUri.AppendFormat("?oauth_consumer_key={0}&", _consumerKey);
            if (!String.IsNullOrEmpty(token))
                requestUri.AppendFormat("oauth_token={0}&", token);
            requestUri.AppendFormat("oauth_nonce={0}&", nonce);
            requestUri.AppendFormat("oauth_timestamp={0}&", timestamp);
            requestUri.AppendFormat("oauth_signature_method={0}&", "HMAC-SHA1");
            requestUri.AppendFormat("oauth_version={0}&", "1.0");
            requestUri.AppendFormat("oauth_signature={0}", signature);

            return new Uri(requestUri.ToString());
        }
Example #3
0
 public OAuthToken GetToken(Uri uri)
 {
     var tokenString = Get(uri);
     var parts = tokenString.Split('&');
     var tokenKey = parts[1].Substring(parts[1].IndexOf('=') + 1);
     var tokenSecret = parts[0].Substring(parts[0].IndexOf('=') + 1);
     var token = new OAuthToken() { Token = tokenKey, Secret = tokenSecret };
     return token;
 }
Example #4
0
            /// <summary>
            ///     Подписывает запрос
            /// </summary>
            /// <param name="httpMethod">
            ///     метод, используемый для запроса
            /// </param>
            /// <param name="requestUrl">
            ///     адрес для запроса
            /// </param>
            /// <param name="requestParameters">
            ///     параметры запроса
            /// </param>
            /// <param name="consumerInfo">
            ///     информация о программе клиенте
            /// </param>
            /// <param name="token">
            ///     токен
            /// </param>
            /// <exception cref="ArgumentNullException"></exception>
            /// <exception cref="ArgumentOutOfRangeException"></exception>
            /// <returns>
            ///     подписанная сторока запроса
            /// </returns>
            public static string Sign(HttpMethods httpMethod, string requestUrl,
                List<RequestParameter> requestParameters,
                ConsumerInfo consumerInfo,
                OAuthToken token)
            {
                if (consumerInfo.CallbackUrl == null && consumerInfo.ConsumerKey == null &&
                    consumerInfo.ConsumerSecret == null) throw new ArgumentNullException("consumerInfo");
                // Подготовка и нормализация операндов для подписи
                // Определяем метод запроса
                if ((httpMethod < 0) && (httpMethod > (HttpMethods) 3))
                    throw new ArgumentOutOfRangeException("httpMethod");
                var baseHttpMethod = httpMethod.ToString().ToUpper() + "&";
                // определяем и нормализуем Url запроса
                if (string.IsNullOrWhiteSpace(requestUrl)) throw new ArgumentNullException("requestUrl");
                var baseRequesUrl = Uri.EscapeDataString(requestUrl) + "&";
                // Определяем и нормализуем параметры запроса
                if (requestParameters == null) throw new ArgumentNullException("requestParameters");
                // нормализуем и сортируем список параметров
                requestParameters = NormalizeRequestParameters(requestParameters);

                var baseParameters = string.Join("&",
                    requestParameters.Select(param => param.Name + "=" + param.Value));
                //строка для подписывания
                var baseRequestString = baseHttpMethod + baseRequesUrl + Uri.EscapeDataString(baseParameters);
#if DEBUG
                Debug.WriteLine(string.Format("Подписываемая строка {0}", baseRequestString));
#endif
                // Определяем ключ для подписи
                var baseKey = token == null
                    ? consumerInfo.ConsumerSecret + "&" + string.Empty
                    : consumerInfo.ConsumerSecret + "&" + token.Secret;
                // осуществляем шифрование
                var encoder = new HMACSHA1 {Key = Encoding.ASCII.GetBytes(baseKey)};
                var buffer = Encoding.ASCII.GetBytes(baseRequestString);
                var signatureByte = encoder.ComputeHash(buffer, 0, buffer.Length);
                // получаем стороку подписи в представлении Base64
                var sigmature = Convert.ToBase64String(signatureByte);
#if DEBUG
                Debug.WriteLine(string.Format("Подписанная строка {0}", sigmature));
#endif

                /* Формируем подписанную строку запроса */

                // Для формирования стоки запроса к параметрам добавляем параметр с цифровой подписью
                requestParameters.Add(new RequestParameter(OAuthParam.Signature,
                    NormalizeParameter(sigmature)));
                // формируем строку
                var signedUrlString = requestUrl + "?" +
                                      string.Join("&", requestParameters.Select(param => param.Name + "=" + param.Value));
#if DEBUG
                Debug.WriteLine(string.Format("Подписанная строка запроса {0}", signedUrlString));
#endif

                // возвращаем подписанную строку
                return signedUrlString;
            }
Example #5
0
 public static HttpWebRequest CreateWebRequest(string fullUrl, WebMethod method, string nonce, string timeStamp, string sig, string contentType, OAuthToken consumerToken, OAuthToken oauthToken, WebProxy proxy)
 {
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fullUrl);
     request.Method = method.ToString();
     request.Proxy = proxy;
     string authHeader = CreateAuthHeader(method, nonce, timeStamp, sig, consumerToken, oauthToken);
     //request.ContentType = "multipart/form-data; boundary=" + boundary;
     request.ContentType = contentType;
     request.Headers.Add("Authorization", authHeader);
     return request;
 }
        public OAuthToken GetAccessToken(Uri baseUri, OAuthToken requestToken)
        {
            var uri = new Uri(baseUri, "oauth/access_token");

            uri = SignRequest(uri, requestToken);

            var request = (HttpWebRequest) WebRequest.Create(uri);
            request.Method = WebRequestMethods.Http.Get;

            var response = request.GetResponse();
            var reader = new StreamReader(response.GetResponseStream());
            var accessToken = reader.ReadToEnd();

            var parts = accessToken.Split('&');
            var token = parts[1].Substring(parts[1].IndexOf('=') + 1);
            var secret = parts[0].Substring(parts[0].IndexOf('=') + 1);

            return new OAuthToken(token, secret);
        }
Example #7
0
        public static string GetSignature(WebMethod method, OAuthToken consumerToken, OAuthToken oauthToken, string url, out string timestamp, out string nonce)
        {
            OAuthBase oAuth = new OAuthBase();
            nonce = oAuth.GenerateNonce();
            timestamp = oAuth.GenerateTimeStamp();
            string nurl, nrp;

            string tokenKey = oauthToken == null ? String.Empty : oauthToken.TokenKey;
            string tokenSecret = oauthToken == null ? String.Empty : oauthToken.TokenSecret;

            Uri uri = new Uri(url);
            string sig = oAuth.GenerateSignature(
                uri,
                consumerToken.TokenKey,
                consumerToken.TokenSecret,
                tokenKey,
                tokenSecret,
                method.ToString(),
                timestamp,
                nonce,
                OAuthBase.SignatureTypes.HMACSHA1, out nurl, out nrp);

            return System.Web.HttpUtility.UrlEncode(sig);
        }
 public Uri GetAuthorizeUri(Uri baseUri, OAuthToken requestToken)
 {
     var queryString = String.Format("oauth_token_secret={0}&oauth_token={1}", requestToken.Secret, requestToken.Token);
     var authorizeUri = String.Format("{0}{1}?{2}", baseUri, "oauth/authorize", queryString);
     return new Uri(authorizeUri);
 }
    protected void SignIt_OnWeb(object sender, EventArgs e)
    {
        bool isError = false;

        try
        {
            string userId         = "aa621eb5-e488-4135-9698-613136bce319"; // use your userId (guid), not email address
            string oauthBasePath  = "account-d.docusign.com";
            string integratorKey  = "ad00790f-c0c8-49d8-a621-904549bc9d88";
            string privateKeyFile = Server.MapPath(@"~/App_Data/DocuSign_PrivateKey.pem");
            string privateKey     = System.IO.File.ReadAllText(privateKeyFile);

            int    expiresInHours = 1;
            string host           = "https://demo.docusign.net/restapi";

            string accountId = string.Empty;

            ApiClient        apiClient = new ApiClient(host);
            OAuth.OAuthToken tokenInfo = apiClient.ConfigureJwtAuthorizationFlowByKey(integratorKey, userId, oauthBasePath, privateKey, expiresInHours);

            /////////////////////////////////////////////////////////////////
            // STEP 1: Get User Info
            // now that the API client has an OAuth token, let's use it in all// DocuSign APIs
            /////////////////////////////////////////////////////////////////

            OAuth.UserInfo userInfo = apiClient.GetUserInfo(tokenInfo.access_token);

            foreach (var item in userInfo.GetAccounts())
            {
                if (item.GetIsDefault() == "true")
                {
                    accountId = item.AccountId();
                    apiClient = new ApiClient(item.GetBaseUri() + "/restapi");
                    break;
                }
            }

            // New Code

            // Read a file from disk to use as a document.
            string pdfToSign = Server.MapPath(@"~/Application/Uploads/CONFIRMATION PAGE.pdf");
            byte[] fileBytes = System.IO.File.ReadAllBytes(pdfToSign);

            EnvelopeDefinition envDef = new EnvelopeDefinition();
            envDef.EmailSubject = "[DocuSign C# SDK] - Please sign this doc";

            // Add a document to the envelope
            Document doc = new Document();
            doc.DocumentBase64 = System.Convert.ToBase64String(fileBytes);
            doc.Name           = "PROGRAM GUIDE & CONFIRMATION PAGE.pdf";
            doc.DocumentId     = "1";

            envDef.Documents = new List <Document>();
            envDef.Documents.Add(doc);

            // Add a recipient to sign the documeent
            Signer signer = new Signer();
            signer.Email        = "*****@*****.**";
            signer.Name         = "Noel Ciambotti";
            signer.RecipientId  = "1";
            signer.ClientUserId = "1002";

            // Create a |SignHere| tab somewhere on the document for the recipient to sign
            signer.Tabs = new Tabs();
            signer.Tabs.SignHereTabs = new List <SignHere>();
            SignHere signHere = new SignHere();
            signHere.DocumentId  = "1";
            signHere.PageNumber  = "1";
            signHere.RecipientId = "1";
            signHere.XPosition   = "37";
            signHere.YPosition   = "666";
            signer.Tabs.SignHereTabs.Add(signHere);

            envDef.Recipients         = new Recipients();
            envDef.Recipients.Signers = new List <Signer>();
            envDef.Recipients.Signers.Add(signer);

            // set envelope status to "sent" to immediately send the signature request
            envDef.Status = "sent";

            // |EnvelopesApi| contains methods related to creating and sending Envelopes (aka signature requests)
            // EnvelopesApi envelopesApi = new EnvelopesApi();
            EnvelopesApi    envelopesApi    = new EnvelopesApi(apiClient.Configuration);
            EnvelopeSummary envelopeSummary = envelopesApi.CreateEnvelope(accountId, envDef);

            // print the JSON response
            lblEnvelopeId.Text = envelopeSummary.EnvelopeId;
            lblEnvelope.Text   = "EnvelopeSummary:<br />" + Newtonsoft.Json.JsonConvert.SerializeObject(envelopeSummary);
            //Console.WriteLine("EnvelopeSummary:\n" + Newtonsoft.Json.JsonConvert.SerializeObject(envelopeSummary));
            lblEnvelope.Text += "<br />" + envelopeSummary.EnvelopeId;
            lblEnvelope.Text += "<br />" + envelopeSummary.Status;
            lblEnvelope.Text += "<br />" + envelopeSummary.StatusDateTime;
            lblEnvelope.Text += "<br />" + envelopeSummary.Uri;
        }
        catch (Exception ex)
        {
            isError = true;
            string errMsg = "Sign Test";
            lblError.Text += String.Format("<hr /><table class='table_error'>"
                                           + "<tr><td>Error<td/><td>{0}</td></tr>"
                                           + "<tr><td>Message<td/><td>{1}</td></tr>"
                                           + "<tr><td>StackTrace<td/><td>{2}</td></tr>"
                                           + "<tr><td>Source<td/><td>{3}</td></tr>"
                                           + "<tr><td>InnerException<td/><td>{4}</td></tr>"
                                           + "<tr><td>Data<td/><td>{5}</td></tr>"
                                           + "</table>"
                                           , errMsg            //0
                                           , ex.Message        //1
                                           , ex.StackTrace     //2
                                           , ex.Source         //3
                                           , ex.InnerException //4
                                           , ex.Data           //5
                                           , ex.HelpLink
                                           , ex.TargetSite
                                           );
        }

        if (!isError)
        {
            // In DeBug - We comment out so we can do multiple steps
            SignIt_OnWeb_View(sender, e);
        }
    }
    protected void SignIt_OnWeb_View(object sender, EventArgs e)
    {
        try
        {
            string userId         = "aa621eb5-e488-4135-9698-613136bce319"; // use your userId (guid), not email address
            string oauthBasePath  = "account-d.docusign.com";
            string integratorKey  = "ad00790f-c0c8-49d8-a621-904549bc9d88";
            string privateKeyFile = Server.MapPath(@"~/App_Data/DocuSign_PrivateKey.pem");
            string privateKey     = System.IO.File.ReadAllText(privateKeyFile);

            int    expiresInHours = 1;
            string host           = "https://demo.docusign.net/restapi";

            string accountId = string.Empty;

            ApiClient        apiClient = new ApiClient(host);
            OAuth.OAuthToken tokenInfo = apiClient.ConfigureJwtAuthorizationFlowByKey(integratorKey, userId, oauthBasePath, privateKey, expiresInHours);

            /////////////////////////////////////////////////////////////////
            // STEP 1: Get User Info
            // now that the API client has an OAuth token, let's use it in all// DocuSign APIs
            /////////////////////////////////////////////////////////////////

            OAuth.UserInfo userInfo = apiClient.GetUserInfo(tokenInfo.access_token);

            foreach (var item in userInfo.GetAccounts())
            {
                if (item.GetIsDefault() == "true")
                {
                    accountId = item.AccountId();
                    apiClient = new ApiClient(item.GetBaseUri() + "/restapi");
                    break;
                }
            }

            // New Code
            RecipientViewRequest viewOptions = new RecipientViewRequest()
            {
                ReturnUrl            = "https://application.cardgroupintl.com/Application/SignTest",
                ClientUserId         = "1002", // must match clientUserId of the embedded recipient
                AuthenticationMethod = "email",
                UserName             = "******",
                Email = "*****@*****.**"
            };

            string envelopeId = lblEnvelopeId.Text;
            // instantiate an envelopesApi object
            //EnvelopesApi envelopesApi = new EnvelopesApi();
            EnvelopesApi envelopesApi = new EnvelopesApi(apiClient.Configuration);
            // create the recipient view (aka signing URL)
            ViewUrl recipientView = envelopesApi.CreateRecipientView(accountId, envelopeId, viewOptions);

            // print the JSON response
            //Console.WriteLine("ViewUrl:\n{0}", Newtonsoft.Json.JsonConvert.SerializeObject(recipientView));
            //Trace.WriteLine("ViewUrl:\n{0}", JsonConvert.SerializeObject(recipientView));

            lblView.Text  = "ViewUrl:<br />" + Newtonsoft.Json.JsonConvert.SerializeObject(recipientView);
            lblView.Text += "<br />" + recipientView.Url;

            HyperLink1.NavigateUrl = recipientView.Url;

            // Start the embedded signing session
            // System.Diagnostics.Process.Start(recipientView.Url);

            // In DeBug - We comment out so we can do multiple steps
            Response.Redirect(recipientView.Url);
        }
        catch (Exception ex)
        {
            string errMsg = "Sign Test View";
            lblError.Text += String.Format("<hr /><table class='table_error'>"
                                           + "<tr><td>Error<td/><td>{0}</td></tr>"
                                           + "<tr><td>Message<td/><td>{1}</td></tr>"
                                           + "<tr><td>StackTrace<td/><td>{2}</td></tr>"
                                           + "<tr><td>Source<td/><td>{3}</td></tr>"
                                           + "<tr><td>InnerException<td/><td>{4}</td></tr>"
                                           + "<tr><td>Data<td/><td>{5}</td></tr>"
                                           + "</table>"
                                           , errMsg            //0
                                           , ex.Message        //1
                                           , ex.StackTrace     //2
                                           , ex.Source         //3
                                           , ex.InnerException //4
                                           , ex.Data           //5
                                           , ex.HelpLink
                                           , ex.TargetSite
                                           );
        }
    }
    //static void Main(string[] args)
    protected void SignIt(object sender, EventArgs e)
    {
        string userId         = "aa621eb5-e488-4135-9698-613136bce319"; // use your userId (guid), not email address
        string oauthBasePath  = "account-d.docusign.com";
        string integratorKey  = "ad00790f-c0c8-49d8-a621-904549bc9d88";
        string privateKeyFile = Server.MapPath(@"~/App_Data/DocuSign_PrivateKey.pem");
        string privateKey     = System.IO.File.ReadAllText(privateKeyFile);

        int    expiresInHours = 1;
        string host           = "https://demo.docusign.net/restapi";

        string accountId = string.Empty;

        ApiClient apiClient = new ApiClient(host);

        OAuth.OAuthToken tokenInfo = apiClient.ConfigureJwtAuthorizationFlowByKey(integratorKey, userId, oauthBasePath, privateKey, expiresInHours);

        /////////////////////////////////////////////////////////////////
        // STEP 1: Get User Info
        // now that the API client has an OAuth token, let's use it in all// DocuSign APIs
        /////////////////////////////////////////////////////////////////

        OAuth.UserInfo userInfo = apiClient.GetUserInfo(tokenInfo.access_token);

        foreach (var item in userInfo.GetAccounts())
        {
            if (item.GetIsDefault() == "true")
            {
                accountId = item.AccountId();
                apiClient = new ApiClient(item.GetBaseUri() + "/restapi");
                break;
            }
        }

        /////////////////////////////////////////////////////////////////
        // STEP 2: CREATE ENVELOPE API
        /////////////////////////////////////////////////////////////////

        EnvelopeDefinition envDef = new EnvelopeDefinition();

        envDef.EmailSubject = "[DocuSign C# SDK] - Please sign this doc";

        // assign recipient to template role by setting name, email, and role name.  Note that the
        // template role name must match the placeholder role name saved in your account template.
        TemplateRole tRole = new TemplateRole();

        tRole.Email    = "[SIGNER_EMAIL]";
        tRole.Name     = "[SIGNER_NAME]";
        tRole.RoleName = "[ROLE_NAME]";
        List <TemplateRole> rolesList = new List <TemplateRole>()
        {
            tRole
        };

        // add the role to the envelope and assign valid templateId from your account
        envDef.TemplateRoles = rolesList;
        envDef.TemplateId    = "[TEMPLATE_ID]";

        // set envelope status to "sent" to immediately send the signature request
        envDef.Status = "sent";

        // |EnvelopesApi| contains methods related to creating and sending Envelopes (aka signature requests)
        EnvelopesApi    envelopesApi    = new EnvelopesApi(apiClient.Configuration);
        EnvelopeSummary envelopeSummary = envelopesApi.CreateEnvelope(accountId, envDef);
    }
Example #12
0
 public static string Put(string url, NameValueCollection parameters, string body, string contentType, OAuthToken consumerToken, OAuthToken oauthToken, WebProxy proxy)
 {
     string nonce, timestamp;
     string fullUrl = EncodeUrl(url, parameters);
     string signature = GetSignature(WebMethod.PUT, consumerToken, oauthToken, fullUrl, out timestamp, out nonce);
     HttpWebRequest request = CreateWebRequest(fullUrl, WebMethod.PUT, nonce, timestamp, signature, contentType, consumerToken, oauthToken, proxy);
     WritePostData(body, request.GetRequestStream(), true);
     return GetWebResponse(request);
 }
Example #13
0
 /// <summary>
 ///     Конструктор
 /// </summary>
 public OAuthBroker()
 {
     Token = new OAuthToken();
     AccessToken = new OAuthToken();
     RequestParameters = new List<RequestParameter>();
 }
Example #14
0
        /// <summary>
        ///     возвращает строку ресурса для авторизации пользователя
        /// </summary>
        /// <param name="requestToken">
        ///     request token
        /// </param>
        /// <returns>
        ///     возвращает строку ресурса для авторизации пользователя
        /// </returns>
        public string GetAuthorizationUrl(OAuthToken requestToken)
        {
            RequestParameters?.Clear();
            RequestParameters = new List<RequestParameter>
            {
                new RequestParameter(OAuthParam.Callback, Consumer.CallbackUrl),
                new RequestParameter(OAuthParam.Token, requestToken.Token)
            };
            var resultString = Core.Sign(HttpMethods.Post, OAuthConst.AuthorizeUrl, RequestParameters,
                Consumer, requestToken);
#if DEBUG
            Debug.WriteLine(string.Format("Authorize Url:  {0}", resultString));
#endif
            return resultString;
        }
Example #15
0
        public static string Upload(string url, NameValueCollection parameters, string path, OAuthToken consumerToken, OAuthToken oauthToken, WebProxy proxy)
        {
            List<String> files = new List<String>();
            files.Add(path);

            return UploadAttachments(url, parameters, files, consumerToken, oauthToken, proxy);
        }
Example #16
0
        private static string UploadAttachments(string url, NameValueCollection parameters, List<string> fileNames, OAuthToken consumerToken, OAuthToken oauthToken, WebProxy proxy)
        {
            string nonce, timestamp;
            string beginBoundary = GenerateRandomString(25);
            string contentBoundary = "--" + beginBoundary;
            string endBoundary = contentBoundary + "--";
            string contentTrailer = "\r\n" + endBoundary;

            string signature = OAuthHttp.GetSignature(WebMethod.POST, consumerToken, oauthToken, url, out timestamp, out nonce);
            string contentType = "multipart/form-data; boundary=" + beginBoundary;
            HttpWebRequest request = OAuthHttp.CreateWebRequest(url, WebMethod.POST, nonce, timestamp, signature, contentType, consumerToken, oauthToken, proxy);
            Version protocolVersion = HttpVersion.Version11;
            string method = WebMethod.POST.ToString();
            string contentDisposition = "Content-Disposition: form-data; name=";
            request.Headers.Add("Cache-Control", "no-cache");
            request.KeepAlive = true;
            string postParams = GetPostParameters(parameters, contentBoundary, contentDisposition);

            FileInfo[] fi = new FileInfo[fileNames.Count];
            int i = 0;
            long postDataSize = 0;
            int headerLength = 0;
            List<string> fileHeaders = new List<string>();
            AddFileHeaders(fileNames, contentBoundary, contentDisposition, fi, ref i, ref postDataSize, ref headerLength, fileHeaders);
            request.ContentLength = postParams.Length + headerLength + contentTrailer.Length + postDataSize;
            System.IO.Stream io =  request.GetRequestStream();
            WritePostData(postParams, io, false);
            i = 0;
            foreach (string fileName in fileNames)
            {
                WritePostData(fileHeaders[i], io, false);
                WriteFile(io, fileName);
                i++;
            }
            WritePostData(contentTrailer,io, true);

            string response = GetWebResponse(request);
            io.Close();
            request = null;

            return response;
        }
Example #17
0
        private static HttpWebRequest CreateWebRequest(string fullUrl, WebMethod method, string nonce, string timeStamp, string sig, OAuthToken consumerToken, OAuthToken oauthToken, WebProxy proxy)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fullUrl);
            request.Method = method.ToString();
            request.Proxy = proxy;
            string authHeader = CreateAuthHeader(method, nonce, timeStamp, sig, consumerToken, oauthToken);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Headers.Add("Authorization", authHeader);

            return request;
        }
Example #18
0
        private static string CreateAuthHeader(WebMethod method, string nonce, string timeStamp, string sig, OAuthToken consumerToken, OAuthToken oauthToken)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("OAuth ");
            //sb.Append("realm=\"" + Resources.API_ROOT + "\",");
            sb.Append("oauth_consumer_key=\"" + consumerToken.TokenKey + "\",");

            if (oauthToken != null && oauthToken.TokenKey.Length > 0)
                sb.Append("oauth_token=\"" + oauthToken.TokenKey + "\",");

            string authHeader = "oauth_nonce=\"" + nonce + "\"," +
                                "oauth_timestamp=\"" + timeStamp + "\"," +
                                "oauth_signature_method=\"" + "HMAC-SHA1" + "\"," +
                                "oauth_version=\"" + "1.0" + "\"," +
                                "oauth_signature=\"" +sig + "\"";

            sb.Append(authHeader);
            return sb.ToString();
        }
Example #19
0
        /// <summary>
        ///     Получает Access Token
        /// </summary>
        /// <param name="requestToken">токен</param>
        /// <returns>
        ///     задача, получения токена
        /// </returns>
        public async Task<OAuthToken> GetAccessTokenAsync(OAuthToken requestToken)
        {
            RequestParameters?.Clear();
            RequestParameters = new List<RequestParameter>
            {
                new RequestParameter(OAuthParam.Callback, Consumer.CallbackUrl),
                new RequestParameter(OAuthParam.ConsumerKey, Consumer.ConsumerKey),
                new RequestParameter(OAuthParam.Nonce, OAuthHelpers.GenerateNonce()),
                new RequestParameter(OAuthParam.SignatureMethod, OAuthConst.OAuthSignatureMethod),
                new RequestParameter(OAuthParam.Timestamp, OAuthHelpers.GenerateTimeStamp()),
                new RequestParameter(OAuthParam.Version, OAuthConst.OAuthVersion),
                new RequestParameter(OAuthParam.Verifier, Token.Verifier),
                new RequestParameter(OAuthParam.Token, Token.Token)
            };

            var signature = Core.Sign(HttpMethods.Post, OAuthConst.AccessUrl, RequestParameters, Consumer,
                requestToken);
            using (var client = new HttpClient())
            {
                var response = await client.PostAsync(signature, null);
                if (response == null || !response.IsSuccessStatusCode) return AccessToken;
                var content = await response.Content.ReadAsStringAsync();
                var parameters = content.Split('&');
                foreach (var parameterParts in parameters.Select(parameter => parameter.Split('=')))
                {
                    switch (parameterParts[0])
                    {
                        case "oauth_token":
                            AccessToken.Token = parameterParts[1];
                            break;
                        case "oauth_token_secret":
                            AccessToken.Secret = parameterParts[1];
                            break;
                    }
                }
            }
#if DEBUG
            Debug.Indent();
            Debug.WriteLineIf(!string.IsNullOrEmpty(AccessToken.Secret) && (!string.IsNullOrEmpty(AccessToken.Token)),
                string.Format("Access Token: {0}, Secret: {1}", AccessToken.Token, AccessToken.Secret));
            Debug.Unindent();
            Debug.WriteLine("Access token complete!");
#endif
            return AccessToken;
        }
Example #20
0
 public Consumer(OAuthToken consumerToken)
 {
     this.consumerToken = consumerToken;
     this.Proxy = null;
 }
Example #21
0
        /// <summary>
        ///     Получает request token
        /// </summary>
        /// <returns>
        ///     задача, получения request token
        /// </returns>
        public async Task<OAuthToken> GetRequestTokenAsync()
        {
            // возвращаемый токен
            var token = new OAuthToken();
            // определяем параметры запроса
            RequestParameters?.Clear();
            RequestParameters = new List<RequestParameter>
            {
                new RequestParameter(OAuthParam.Callback, Consumer.CallbackUrl),
                new RequestParameter(OAuthParam.ConsumerKey, Consumer.ConsumerKey),
                new RequestParameter(OAuthParam.Nonce, OAuthHelpers.GenerateNonce()),
                new RequestParameter(OAuthParam.SignatureMethod, OAuthConst.OAuthSignatureMethod),
                new RequestParameter(OAuthParam.Timestamp, OAuthHelpers.GenerateTimeStamp()),
                new RequestParameter(OAuthParam.Version, OAuthConst.OAuthVersion)
            };

            // подписываем строку запроса
            var requestUrl = Core.Sign(HttpMethods.Post, OAuthConst.RequestUrl, RequestParameters, Consumer,
                null);
            // инициализируем HTTP Client
            using (var httpClient = new HttpClient())
            {
                // осуществляем запрос
                var response = await httpClient.PostAsync(requestUrl, null);
                //проверяем результат
                if (response.StatusCode == HttpStatusCode.Unauthorized ||
                    response.StatusCode == HttpStatusCode.InternalServerError) return token;
                if (response.IsSuccessStatusCode)
                {
                    //асинхронное чтение ответа сервера
                    var contentResponse = await response.Content.ReadAsStringAsync();
                    //"режем" по амперсанду
                    var responsesegments = contentResponse.Split('&');
                    if (responsesegments.Length <= 0) return token;
                    foreach (var item in responsesegments.Select(responsesegment => responsesegment.Split('=')))
                    {
                        switch (item[0])
                        {
                            case "oauth_token":
                                //возвращаеи токен
                                token.Token = item[1];
                                break;
                            case "oauth_token_secret":
                                //возвращаем секрет
                                token.Secret = item[1];
                                break;
                        }
                    }
                }
            }
#if DEBUG
            Debug.Indent();
            Debug.WriteLineIf(!string.IsNullOrEmpty(token.Secret) && (!string.IsNullOrEmpty(token.Token)),
                string.Format("Token: {0}, Secret: {1}", token.Token, token.Secret));
            Debug.Unindent();
            Debug.WriteLine("Request token complete!");
#endif
            Token = token;
            return token;
        }
Example #22
0
 public Consumer(OAuthToken consumerToken, OAuthToken accessToken)
 {
     this.consumerToken = consumerToken;
     this.accessToken = accessToken;
     this.Proxy = null;
 }