Beispiel #1
0
        public string GetUserAuthorizationUrlForToken(IToken token, string callbackUrl)
        {
            var builder = new UriBuilder(UserAuthorizeUri);

            var collection = new NameValueCollection();

            if (builder.Query != null)
            {
                collection.Add(HttpUtility.ParseQueryString(builder.Query));
            }

            if (_queryParameters != null)
            {
                collection.Add(_queryParameters);
            }

            collection[Parameters.OAuth_Token] = token.Token;

            if (!string.IsNullOrEmpty(callbackUrl))
            {
                collection[Parameters.OAuth_Callback] = callbackUrl;
            }

            builder.Query = string.Empty;

            return(builder.Uri + "?" + UriUtility.FormatQueryString(collection));
        }
Beispiel #2
0
        public HttpWebResponse GetResponse(OAuthContext context, TokenBase accessToken)
        {
            SignContext(context, accessToken);

            Uri uri = context.GenerateUri();

            Console.WriteLine("Uri: {0}", uri);

            var request = (HttpWebRequest)WebRequest.Create(uri);

            request.Method = context.RequestMethod;

            if ((context.FormEncodedParameters != null) && (context.FormEncodedParameters.Count > 0))
            {
                request.ContentType = "application/x-www-form-urlencoded";
                using (var writer = new StreamWriter(request.GetRequestStream()))
                {
                    writer.Write(UriUtility.FormatQueryString(context.FormEncodedParameters));
                }
            }

            if (UseHeaderForOAuthParameters)
            {
                request.Headers[Parameters.OAuth_Authorization_Header] = context.GenerateOAuthParametersForHeader();
            }

            return((HttpWebResponse)request.GetResponse());
        }
Beispiel #3
0
        public RequestDescription GetRequestDescription()
        {
            if (string.IsNullOrEmpty(_context.Signature))
            {
                if (_token != null)
                {
                    _consumerContext.SignContextWithToken(_context, _token);
                }
                else
                {
                    _consumerContext.SignContext(_context);
                }
            }

            Uri uri = _context.GenerateUri();

            var description = new RequestDescription
            {
                Url    = uri,
                Method = _context.RequestMethod
            };

            if ((_context.FormEncodedParameters != null) && (_context.FormEncodedParameters.Count > 0))
            {
                description.ContentType = "application/x-www-form-urlencoded";
                description.Body        = UriUtility.FormatQueryString(_context.FormEncodedParameters.ToQueryParametersExcludingTokenSecret());
            }

            if (_consumerContext.UseHeaderForOAuthParameters)
            {
                description.Headers[Parameters.OAuth_Authorization_Header] = _context.GenerateOAuthParametersForHeader();
            }

            return(description);
        }
        /// <summary>
        /// Generate the uri.
        /// </summary>
        /// <returns>The URI string.</returns>
        public string GenerateUrl()
        {
            var builder = new UriBuilder(NormalizedRequestUrl);

            builder.Query = "";

            return(builder.Uri + "?" + UriUtility.FormatQueryString(QueryParameters));
        }
        /// <summary>
        /// Generate the uri.
        /// </summary>
        /// <returns>The URI.</returns>
        public Uri GenerateUri()
        {
            var builder = new UriBuilder(NormalizedRequestUrl);

            IEnumerable <QueryParameter> parameters = QueryParameters.ToQueryParametersExcludingTokenSecret();

            builder.Query = UriUtility.FormatQueryString(parameters);

            return(builder.Uri);
        }
        /// <summary>
        /// Generate uri without OAuth parameters.
        /// </summary>
        /// <returns>The generated URI.</returns>
        public Uri GenerateUriWithoutOAuthParameters()
        {
            var builder = new UriBuilder(NormalizedRequestUrl);

            IEnumerable <QueryParameter> parameters = QueryParameters.ToQueryParameters()
                                                      .Where(q => !q.Key.StartsWith(Parameters.OAuthParameterPrefix) && !q.Key.StartsWith(Parameters.XAuthParameterPrefix));

            builder.Query = UriUtility.FormatQueryString(parameters);

            return(builder.Uri);
        }
        private RequestDescription GetRequestDescription()
        {
            if (string.IsNullOrEmpty(_context.Signature))
            {
                if (_token != null)
                {
                    _consumerContext.SignContextWithToken(_context, _token);
                }
                else
                {
                    _consumerContext.SignContext(_context);
                }
            }

            RequestDescription description = new RequestDescription
            {
                Url    = _context.GenerateUri(),
                Method = _context.RequestMethod
            };

            if ((_context.FormEncodedParameters != null) && (_context.FormEncodedParameters.Count > 0))
            {
                description.ContentType = Parameters.HttpFormEncoded;
                description.Body        = UriUtility.FormatQueryString(_context.FormEncodedParameters.ToQueryParametersExcludingTokenSecret());
            }
            else if (!string.IsNullOrEmpty(RequestBody))
            {
                description.Body        = UriUtility.UrlEncode(RequestBody);
                description.ContentType = ContentType;
            }
            else if (RequestStream != null)
            {
                description.RequestStream = RequestStream;
                description.ContentType   = ContentType;
            }

            if (_consumerContext.UseHeaderForOAuthParameters)
            {
                description.Headers[Parameters.OAuth_Authorization_Header] = _context.GenerateOAuthParametersForHeader();
            }

            return(description);
        }
Beispiel #8
0
        private string GetUserAuthorizationUrl(IToken requestToken)
        {
            var builder = new UriBuilder(ConsumerContext.UserAuthorizeUri);

            var collection = new NameValueCollection();

            if (builder.Query != null)
            {
                collection.Add(UriUtility.ParseQueryString(builder.Query));
            }

            if (_queryParameters != null)
            {
                collection.Add(_queryParameters);
            }

            collection[Parameters.OAuth_Token] = requestToken.Token;

            builder.Query = UriUtility.FormatQueryString(collection);

            return(builder.Uri.ToString());
        }
Beispiel #9
0
        /// <summary>
        /// Create a authorise token from the request.
        /// </summary>
        /// <param name="rawUri">A System.Uri object containing information regarding the URL of the current request.</param>
        /// <param name="queryString">The collection of HTTP query string variables.</param>
        /// <param name="form">The collection of form variables.</param>
        /// <param name="headers">The collection of HTTP headers.</param>
        /// <param name="cookies">The collection of cookies sent by the client.</param>
        /// <param name="isApprovedByUser">Has the user approved the client to access the resources.</param>
        /// <returns>The formatted redirect url; else null.</returns>
        public string CreateAuthoriseToken(Uri rawUri, NameValueCollection queryString,
                                           NameValueCollection form, NameValueCollection headers, HttpCookieCollection cookies, bool isApprovedByUser = false)
        {
            try
            {
                // Make sure that all the passed parameters are valid.
                if (rawUri == null)
                {
                    throw new ArgumentNullException("rawUri");
                }
                if (queryString == null)
                {
                    throw new ArgumentNullException("queryString");
                }
                if (form == null)
                {
                    throw new ArgumentNullException("form");
                }
                if (headers == null)
                {
                    throw new ArgumentNullException("headers");
                }
                if (cookies == null)
                {
                    throw new ArgumentNullException("cookies");
                }

                // Only process if the user has approved the request.
                if (isApprovedByUser)
                {
                    // Make sure that all the maditory OAuth parameters
                    // have been passed to the provider from the consumer
                    OAuthProblemReport validate = new OAuthProblemReport(queryString);
                    validate.ValidateAuthoriseParametersAbsent(queryString);
                    string validationError = validate.ToString();

                    // If any of the maditory OAuth parameters are missing.
                    if (!String.IsNullOrEmpty(validationError))
                    {
                        throw new OAuthException(OAuthProblemParameters.ParameterAbsent, "Absent Parameters", new Exception(validationError));
                    }

                    // Create an assign each manditory parameter.
                    IOAuthContext context = new OAuthContextProvider();
                    context.RawUri                = rawUri;
                    context.RequestMethod         = "GET";
                    context.Headers               = headers;
                    context.QueryParameters       = queryString;
                    context.FormEncodedParameters = form;
                    context.Token       = queryString[Parameters.OAuth_Token];
                    context.CallbackUrl = queryString[Parameters.OAuth_Callback];
                    string companyUniqueUserID = queryString[Parameters.Company_Unique_User_Identifier];

                    // Assign each optional parameter
                    GetOptionalAuthoriseParameters(context, queryString);

                    // Create a new OAuth provider.
                    _oAuthProvider = new OAuthProvider(_tokenStore,
                                                       new NonceStoreInspector(_nonceStore),
                                                       new TimestampRangeInspector(new TimeSpan(1, 0, 0)),
                                                       new ConsumerValidationInspector(_consumerStore),
                                                       new XAuthValidationInspector(ValidateXAuthMode, AuthenticateXAuthUsernameAndPassword));

                    // Create the access token from the stores, and create a new verification code.
                    string verifier = _consumerStore.SetVerificationCode(context, companyUniqueUserID);
                    IToken token    = _oAuthProvider.CreateAccessToken(context);

                    // Create the parameter response.
                    NameValueCollection parameters = new NameValueCollection();
                    parameters[Parameters.OAuth_Token]    = token.Token;
                    parameters[Parameters.OAuth_Verifier] = verifier;

                    // Return the token callback query string..
                    return(context.CallbackUrl + "?" + UriUtility.FormatQueryString(parameters));
                }
                else
                {
                    throw new OAuthException(OAuthProblemParameters.PermissionDenied, "Authorisation Denied", new Exception("User has denied access"));
                }
            }
            catch (OAuthException aex)
            {
                // Get the current token errors.
                _tokenError = aex.Report.ToString();
                return(null);
            }
            catch (Exception ex)
            {
                // Transform the execption.
                OAuthException OAuthException =
                    new OAuthException(OAuthProblemParameters.ParameterRejected, ex.Message, ex);

                // Get the current token errors.
                _tokenError = OAuthException.Report.ToString();
                return(null);
            }
        }
Beispiel #10
0
 private static string GetQueryString(IEnumerable <QueryParameter> parameters)
 {
     return(UriUtility.FormatQueryString(parameters.ToNameValueCollection()));
 }