public static AuthorizedTokenResponse CompleteAuthorization(DesktopConsumer consumer, string requestToken, string userCode)
    {
        var customServiceDescription = new ServiceProviderDescription
        {
            RequestTokenEndpoint      = ServiceProviderDescription.RequestTokenEndpoint,
            UserAuthorizationEndpoint =
                new MessageReceivingEndpoint(
                    string.Format("{0}?key={1}&token={2}", ServiceProviderDescription.UserAuthorizationEndpoint.Location.AbsoluteUri,
                                  consumer.TokenManager.ConsumerKey, requestToken),
                    HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.GetRequest),
            AccessTokenEndpoint = new MessageReceivingEndpoint(
                ServiceProviderDescription.AccessTokenEndpoint.Location.AbsoluteUri + "?oauth_verifier" + userCode + string.Empty,
                HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.GetRequest),
            TamperProtectionElements = ServiceProviderDescription.TamperProtectionElements,
            ProtocolVersion          = ProtocolVersion.V10a
        };
        var customConsumer = new DesktopConsumer(customServiceDescription, consumer.TokenManager);
        var response       = customConsumer.ProcessUserAuthorization(requestToken, userCode);

        return(response);
    }
Esempio n. 2
0
        private async Task <ImageUpload> UploadImage(string albumUri, string fileName, byte[] image, CancellationToken cancellationToken)
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(SMUGMUG_API_v2_UploadEndpoint);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Add("X-Smug-AlbumUri", albumUri);
                client.DefaultRequestHeaders.Add("X-Smug-FileName", fileName);
                client.DefaultRequestHeaders.Add("X-Smug-ResponseType", "JSON");
                client.DefaultRequestHeaders.Add("X-Smug-Version", "v2");

                if (LoginType == LoginType.OAuth)
                {
                    smugmugConsumer = new DesktopConsumer(smugmugServiceDescription, smugmugTokenManager);
                    HttpDeliveryMethods resourceHttpMethod = HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest;

                    var resourceEndpoint = new MessageReceivingEndpoint(SMUGMUG_API_v2_UploadEndpoint, resourceHttpMethod);
                    var httpRequest      = smugmugConsumer.PrepareAuthorizedRequest(resourceEndpoint, smugmugTokenManager.AccessToken);

                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("OAuth", httpRequest.Headers["Authorization"].Substring(6));
                }
                else
                {
                    throw new NotSupportedException(string.Format("LoginType {0} is unsupported", LoginType));
                }

                var content = new StreamContent(new MemoryStream(image));

                HttpResponseMessage httpResponse = client.PostAsync(SMUGMUG_API_v2_UploadEndpoint, content, cancellationToken).Result;
                System.Diagnostics.Trace.WriteLine(string.Format("POST {0}", httpResponse.RequestMessage.RequestUri));
                httpResponse.EnsureSuccessStatusCode();
                ImagePostResponse contentResponse = await httpResponse.Content.ReadAsAsync <ImagePostResponse>();

                System.Diagnostics.Trace.WriteLine(string.Format("---{0} {1}: {2}", contentResponse.Stat, contentResponse.Method, contentResponse.Image));

                return(contentResponse.Image);
            }
        }
Esempio n. 3
0
        private async Task <T> PostRequest <T>(string baseAddress, string endpoint, string jsonContent)
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(baseAddress);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                if (LoginType == LoginType.Anonymous)
                {
                    endpoint = string.Format("{0}{2}APIKey={1}", endpoint, smugmugTokenManager.ConsumerKey, endpoint.Contains('?') ? "&" : "?");
                }
                else if (LoginType == LoginType.OAuth)
                {
                    smugmugConsumer = new DesktopConsumer(smugmugServiceDescription, smugmugTokenManager);
                    HttpDeliveryMethods resourceHttpMethod = HttpDeliveryMethods.PostRequest | HttpDeliveryMethods.AuthorizationHeaderRequest;

                    var resourceEndpoint = new MessageReceivingEndpoint(baseAddress + endpoint, resourceHttpMethod);
                    var httpRequest      = smugmugConsumer.PrepareAuthorizedRequest(resourceEndpoint, smugmugTokenManager.AccessToken);
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("OAuth", httpRequest.Headers["Authorization"].Substring(6));
                }
                else
                {
                    throw new NotSupportedException(string.Format("LoginType {0} is unsupported", LoginType));
                }

                HttpResponseMessage httpResponse = client.PostAsync(endpoint, new StringContent(jsonContent)).Result;
                System.Diagnostics.Trace.WriteLine(string.Format("POST {0}: {1}", httpResponse.RequestMessage.RequestUri, jsonContent));

                PostResponseStub <T> contentResponse = null;
                if (httpResponse.IsSuccessStatusCode)
                {
                    contentResponse = await httpResponse.Content.ReadAsAsync <PostResponseStub <T> >();
                }
                else
                {
                    var     failedResponse    = httpResponse.Content.ReadAsStringAsync();
                    JObject response          = JObject.Parse(failedResponse.Result);
                    var     invalidParameters =
                        from p in response["Options"]["Parameters"]["POST"]
                        where p["Problems"] != null
                        select new POSTParameter
                    {
                        ParameterName = (string)p["Name"],
                        Problem       = (string)p["Problems"].First()
                    };

                    if (invalidParameters.Count() > 0)
                    {
                        List <ArgumentException> argumentExceptions = new List <ArgumentException>();
                        foreach (POSTParameter invalidParameter in invalidParameters)
                        {
                            argumentExceptions.Add(new ArgumentException(invalidParameter.Problem, invalidParameter.ParameterName));
                        }
                        throw new AggregateException("HTTP POST Request failed.  See inner exceptions for individual reasons.", argumentExceptions.ToArray());
                    }
                    else
                    {
                        throw new HttpRequestException("HTTP POST Request failed for unknown reasons");
                    }
                }

                System.Diagnostics.Trace.WriteLine(string.Format("---{0} {1}: {2}", contentResponse.Code, contentResponse.Message, contentResponse.Response));

                return(contentResponse.Response);
            }
        }
Esempio n. 4
0
        private static HttpMessageHandler OAuthHandler(string requestTokenURL,
                                                       string authorizationTokenURL,
                                                       string accessTokenURL,
                                                       string consumerKey,
                                                       string consumerSecret,
                                                       string user,
                                                       string passwd,
                                                       string authUrl)
        {
            ServiceProviderDescription serviceDescription = new ServiceProviderDescription();

            serviceDescription.AccessTokenEndpoint       = new MessageReceivingEndpoint(new Uri(accessTokenURL), HttpDeliveryMethods.PostRequest);
            serviceDescription.ProtocolVersion           = ProtocolVersion.V10a;
            serviceDescription.RequestTokenEndpoint      = new MessageReceivingEndpoint(new Uri(requestTokenURL), HttpDeliveryMethods.PostRequest);
            serviceDescription.TamperProtectionElements  = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement() };
            serviceDescription.UserAuthorizationEndpoint = new MessageReceivingEndpoint(new Uri(authorizationTokenURL), HttpDeliveryMethods.PostRequest);

            TokenManager tokenManager = new TokenManager(consumerKey, consumerSecret);
            WebConsumer  consumer     = new WebConsumer(serviceDescription, tokenManager);

            // callback is never called by CLM, but needed to do OAuth based forms login
            // XXX - Dns.GetHostName() alway seems to return simple, uppercased hostname
            string callback = "https://" + Dns.GetHostName() + '.' + IPGlobalProperties.GetIPGlobalProperties().DomainName + ":9443/cb";

            callback = callback.ToLower();

            consumer.PrepareRequestUserAuthorization(new Uri(callback), null, null);
            OslcClient oslcClient = new OslcClient();
            HttpClient client     = oslcClient.GetHttpClient();

            HttpStatusCode      statusCode = HttpStatusCode.Unused;
            string              location   = null;
            HttpResponseMessage resp;

            try
            {
                client.DefaultRequestHeaders.Clear();

                resp = client.GetAsync(authorizationTokenURL + "?oauth_token=" + tokenManager.GetRequestToken() +
                                       "&oauth_callback=" + Uri.EscapeUriString(callback).Replace("#", "%23").Replace("/", "%2F").Replace(":", "%3A")).Result;
                statusCode = resp.StatusCode;

                if (statusCode == HttpStatusCode.Found)
                {
                    location = resp.Headers.Location.AbsoluteUri;
                    resp.ConsumeContent();
                    statusCode = FollowRedirects(client, statusCode, location);
                }

                string        securityCheckUrl = "j_username="******"&j_password="******"application/x-www-form-urlencoded");

                mediaTypeValue.CharSet = "utf-8";

                content.Headers.ContentType = mediaTypeValue;

                resp       = client.PostAsync(authUrl + "/j_security_check", content).Result;
                statusCode = resp.StatusCode;

                string jazzAuthMessage      = null;
                IEnumerable <string> values = new List <string>();

                if (resp.Headers.TryGetValues(JAZZ_AUTH_MESSAGE_HEADER, out values))
                {
                    jazzAuthMessage = values.Last();
                }

                if (jazzAuthMessage != null && string.Compare(jazzAuthMessage, JAZZ_AUTH_FAILED, true) == 0)
                {
                    resp.ConsumeContent();
                    throw new JazzAuthFailedException(user, authUrl);
                }
                else if (statusCode != HttpStatusCode.OK && statusCode != HttpStatusCode.Found)
                {
                    resp.ConsumeContent();
                    throw new JazzAuthErrorException(statusCode, authUrl);
                }
                else         //success
                {
                    Uri callbackUrl = resp.Headers.Location;

                    resp        = client.GetAsync(callbackUrl.AbsoluteUri).Result;
                    callbackUrl = resp.Headers.Location;
                    resp        = client.GetAsync(callbackUrl.AbsoluteUri).Result;
                    callbackUrl = resp.Headers.Location;

                    NameValueCollection qscoll = callbackUrl.ParseQueryString();

                    if (callbackUrl.OriginalString.StartsWith(callback + '?') && qscoll["oauth_verifier"] != null)
                    {
                        DesktopConsumer         desktopConsumer         = new DesktopConsumer(serviceDescription, tokenManager);
                        AuthorizedTokenResponse authorizedTokenResponse = desktopConsumer.ProcessUserAuthorization(tokenManager.GetRequestToken(), qscoll["oauth_verifier"]);

                        return(consumer.CreateAuthorizingHandler(authorizedTokenResponse.AccessToken, CreateSSLHandler()));
                    }

                    throw new JazzAuthErrorException(statusCode, authUrl);
                }
            } catch (JazzAuthFailedException jfe) {
                throw jfe;
            } catch (JazzAuthErrorException jee) {
                throw jee;
            } catch (Exception e) {
                Console.WriteLine(e.StackTrace);
            }

            // return consumer.CreateAuthorizingHandler(accessToken);
            return(null);
        }