//
        // GET: /Connect/Callback - Callback url from the api.xero.com authorisation endpoint

        public ActionResult Callback()
        {
            Debug.Write("Processing: /Connect/Callback");

            ApiRepository apiRepository = new ApiRepository();

            ITokenRepository <AccessToken>  accessTokenRepository  = new HttpSessionAccessTokenRepository(Session);
            ITokenRepository <RequestToken> requestTokenRepository = new HttpSessionRequestTokenRepository(Session);

            string verificationCode = Request.Params["oauth_verifier"];

            // Call api.xero.com/oauth/AccessToken
            IOAuthSession oauthSession = apiRepository.GetOAuthSession();

            IToken requestToken = requestTokenRepository.GetToken("");

            if (requestToken == null)
            {
                throw new ApplicationException("The request token could not be retrived from the current http session. Is session state and cookies enabled?");
            }

            AccessToken accessToken = oauthSession.ExchangeRequestTokenForAccessToken(requestToken, verificationCode);

            accessTokenRepository.SaveToken(accessToken);

            GetAndStoreAuthorisedOrganisationName(apiRepository);

            return(new RedirectResult("~/"));
        }
        public string CreateOrMergeAuthSession(IOAuthSession oAuthSession, IOAuthTokens tokens)
        {
            var userAuth = GetUserAuth(oAuthSession, tokens) ?? new UserAuth();

            return dbFactory.Exec(dbCmd => {
                var oAuthProvider = dbCmd.FirstOrDefault<UserOAuthProvider>(
                "Provider = {0} AND UserId = {1}", tokens.Provider, tokens.UserId);

                if (oAuthProvider == null)
                {
                    oAuthProvider = new UserOAuthProvider {
                        Provider = tokens.Provider,
                        UserId = tokens.UserId,
                    };
                }

                oAuthProvider.PopulateMissing(tokens);
                userAuth.PopulateMissing(oAuthProvider);

                dbCmd.Save(userAuth);

                oAuthProvider.UserAuthId = userAuth.Id != default(int)
                    ? userAuth.Id
                    : (int) dbCmd.GetLastInsertId();

                dbCmd.Save(oAuthProvider);

                return oAuthProvider.UserAuthId.ToString();
            });
        }
Beispiel #3
0
    protected void Page_Load(object sender, EventArgs e)
    {
      IOAuthSession session = CreateSession();

      string requestTokenString = Request[Parameters.OAuth_Token];
      string verifier = Request[Parameters.OAuth_Verifier];

      if (string.IsNullOrEmpty(verifier))
      {
        throw new Exception("Expected a non-empty verifier value");
      }

      var requestToken = (IToken) Session[requestTokenString];

      IToken accessToken;

      try
      {
        accessToken = session.ExchangeRequestTokenForAccessToken(requestToken, verifier);
      }
      catch (OAuthException authEx)
      {
        Session["problem"] = authEx.Report;
        Response.Redirect("AccessDenied.aspx");        
        return;
      }

      Session[requestTokenString] = null;
      Session[accessToken.Token] = accessToken;

      Response.Redirect("ViewData.aspx?oauth_token=" + accessToken.Token);
    }
Beispiel #4
0
        public void RequestTokenWithCallbackDoesNotThrowException()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.PlainText);
            IOAuthContext context = session.BuildRequestTokenContext("GET").Context;

            provider.GrantRequestToken(context);
        }
        /// <summary>
        /// Note: Default urls are taken from the developer documentation. Override if necessary.
        /// </summary>
        /// <param name="consumerKey"></param>
        /// <param name="consumerSecret"></param>
        /// <param name="intuitQboApiUrl"></param>
        /// <param name="intuitOauthUrl"></param>
        /// <param name="intuitRequestTokenUrl"></param>
        /// <param name="intuitAccessTokenUrl"></param>
        /// <param name="intuitUserAuthorizationUrl"></param>
        public OauthTokenManager(string consumerKey, string consumerSecret, string intuitQboApiUrl,
            string intuitOauthUrl = "https://oauth.intuit.com/oauth/v1",
            string intuitRequestTokenUrl = "https://oauth.intuit.com/oauth/v1/get_request_token",
            string intuitAccessTokenUrl = "https://oauth.intuit.com/oauth/v1/get_access_token",
            string intuitUserAuthorizationUrl = "https://appcenter.intuit.com/Connect/Begin")
        {
            if (string.IsNullOrEmpty(consumerKey)) { throw new InvalidParameterException("Oops. ConsumerKey is required."); }
            if (string.IsNullOrEmpty(consumerSecret)) { throw new InvalidParameterException("Oops. ConsumerSecret is required."); }
            if (string.IsNullOrEmpty(intuitQboApiUrl)) { throw new InvalidParameterException("Oops. API Url is required."); }

            _intuitUserAuthorizationUrl = intuitUserAuthorizationUrl;

            OauthInfo = new QboOauthConnectionInfo
            {
                ApiUrl = intuitQboApiUrl,
                ConsumerKey = consumerKey,
                ConsumerSecret = consumerSecret
            };

            var consumerContext = new OAuthConsumerContext
            {
                ConsumerKey = OauthInfo.ConsumerKey,
                ConsumerSecret = OauthInfo.ConsumerSecret,
                SignatureMethod = SignatureMethod.HmacSha1
            };
            _authSession = new OAuthSession(consumerContext, intuitRequestTokenUrl, intuitOauthUrl, intuitAccessTokenUrl);
        }
Beispiel #6
0
 public ConsumerRequest(IOAuthSession oauthSession, IOAuthContext context, IOAuthConsumerContext consumerContext, ICertificateFactory clientSslCertificateFactory)
 {
     _oauthSession = oauthSession;
     _context = context;
     _consumerContext = consumerContext;
     _clientSslCertificateFactory = clientSslCertificateFactory;
 }
        public string CreateOrMergeAuthSession(IOAuthSession oAuthSession, IOAuthTokens tokens)
        {
            using (var redis = factory.GetClient())
            {
                UserOAuthProvider oAuthProvider = null;

                var oAuthProviderId = GetAuthProviderByUserId(redis, tokens.Provider, tokens.UserId);
                if (!oAuthProviderId.IsNullOrEmpty())
                    oAuthProvider = redis.As<UserOAuthProvider>().GetById(oAuthProviderId);

                var userAuth = GetUserAuth(redis, oAuthSession, tokens)
                    ?? new UserAuth { Id = redis.As<UserAuth>().GetNextSequence(), };

                if (oAuthProvider == null)
                {
                    oAuthProvider = new UserOAuthProvider {
                        Id = redis.As<UserOAuthProvider>().GetNextSequence(),
                        UserAuthId = userAuth.Id,
                        Provider = tokens.Provider,
                        UserId = tokens.UserId,
                    };
                    var idx = IndexProviderToUserIdHash(tokens.Provider);
                    redis.SetEntryInHash(idx, tokens.UserId, oAuthProvider.Id.ToString());
                }

                oAuthProvider.PopulateMissing(tokens);
                userAuth.PopulateMissing(oAuthProvider);

                redis.Store(userAuth);
                redis.Store(oAuthProvider);
                redis.AddItemToSet(IndexUserAuthAndProviderIdsSet(userAuth.Id), oAuthProvider.Id.ToString());

                return userAuth.Id.ToString();
            }
        }
        public void Connect(string consumerKey, string consumerSecret, string baseAddress, string redirectUrl)
        {
            ConsumerKey    = consumerKey;
            ConsumerSecret = consumerSecret;
            BaseAddress    = baseAddress ?? _defaultBaseAddress;
            RedirectUrl    = redirectUrl;

            if (Current != null)
            {
                Current.Clean();
            }
            Current = this;

#if NET40
            _webApp = new HttpSelfHostServer(Startup.Configuration(BaseAddress));
            _webApp.OpenAsync().Wait();
#else
            _webApp = WebApp.Start <Startup>(url: BaseAddress);
#endif
            IOAuthSession session  = CreateSession();
            IToken        theToken = session.GetRequestToken();

            _requestToken = theToken;

            // Redirect user to Intuit for Auth
            string token  = theToken.Token;
            string secret = theToken.TokenSecret;
            System.Diagnostics.Process.Start(
                _baseAuthUrl
                + "?oauth_token=" + token
                + "&oauth_callback=" + UriUtility.UrlEncode(BaseAddress + "api/oauth/")
                );
        }
Beispiel #9
0
        //
        // GET: /Connect/Index - Main OAuth Connection Endpoint

        public ActionResult Index()
        {
            Debug.Write("Processing: /Connect/Index");

            IOAuthSession oauthSession = ServiceProvider.GetCurrentSession();
            Repository    repository   = ServiceProvider.GetCurrentRepository();

            // Can we already access an organisation??
            if (oauthSession.HasValidAccessToken && repository != null && repository.Organisation != null)
            {
                return(new RedirectResult("~/"));
            }

            if (oauthSession is XeroApiPrivateSession)
            {
                throw new ApplicationException("The current private session cannot access the authorised organisation. Has the access token been revoked?");
            }


            // Determine the callback uri to use - this must match the domain used when the application was registerd on http://api.xero.com
            var callbackUri = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port, Url.Action("Callback"));


            // Call: GET /oauth/RequestToken
            RequestToken requestToken = oauthSession.GetRequestToken(callbackUri.Uri);

            Trace.WriteLine("OAuth Request Token: " + requestToken.Token);
            Trace.WriteLine("OAuth Request Secret: " + requestToken.TokenSecret);

            string authorisationUrl = oauthSession.GetUserAuthorizationUrl();

            Trace.WriteLine("Redirecting browser to user authorisation uri:" + authorisationUrl);
            return(new RedirectResult(authorisationUrl));
        }
        public void RequestTokenWithHmacSha1WithInvalidSignatureThrows()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.HmacSha1);
            IOAuthContext context = session.BuildRequestTokenContext("GET").Context;

            context.Signature = "wrong";
            provider.GrantRequestToken(context);
        }
Beispiel #11
0
        public void run()
        {
            IOAuthSession consumer = Oauth.CurrentEtsyConsumer();
            EtsyApi       api      = new EtsyApi(consumer);

            InventoryManager.Load(api);
            Cmd.Instance.Run();
        }
Beispiel #12
0
        public void RequestTokenWithoutCallbackWillThrowException()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.PlainText);
            IOAuthContext context = session.BuildRequestTokenContext("GET").Context;

            context.CallbackUrl = null; // clear parameter, as it will default to "oob"
            provider.GrantRequestToken(context);
        }
        /// <summary>
        /// Get Access token.
        /// </summary>
        private void getAccessToken()
        {
            IOAuthSession clientSession = CreateSession();
            IToken        accessToken   = clientSession.ExchangeRequestTokenForAccessToken((IToken)HttpContext.Current.Session["requestToken"], HttpContext.Current.Session["oauthVerifyer"].ToString());

            HttpContext.Current.Session["accessToken"]       = accessToken.Token;
            HttpContext.Current.Session["accessTokenSecret"] = accessToken.TokenSecret;
        }
 public ConsumerRequest(IOAuthSession oauthSession, IOAuthContext context, IOAuthConsumerContext consumerContext,
                        ICertificateFactory clientSslCertificateFactory)
 {
     _oauthSession                = oauthSession;
     _context                     = context;
     _consumerContext             = consumerContext;
     _clientSslCertificateFactory = clientSslCertificateFactory;
 }
        public void RequestTokenWithInvalidConsumerKeyThrowsException()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.PlainText);

            session.ConsumerContext.ConsumerKey = "invalid";
            IOAuthContext context = session.BuildRequestTokenContext("GET").Context;

            provider.GrantRequestToken(context);
        }
        public void RequestTokenWithRsaSha1WithInvalidSignatureThrows()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);
            IOAuthContext context = session.BuildRequestTokenContext("GET").Context;

            context.Signature =
                "eeh8hLNIlNNq1Xrp7BOCc+xgY/K8AmjxKNM7UdLqqcvNSmJqcPcf7yQIOvu8oj5R/mDvBpSb3+CEhxDoW23gggsddPIxNdOcDuEOenugoCifEY6nRz8sbtYt3GHXsDS2esEse/N8bWgDdOm2FRDKuy9OOluQuKXLjx5wkD/KYMY=";
            provider.GrantRequestToken(context);
        }
        public void RequestTokenWithRsaSha1()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);
            IOAuthContext context = session.BuildRequestTokenContext("GET").Context;
            IToken        token   = provider.GrantRequestToken(context);

            Assert.Equal("requestkey", token.Token);
            Assert.Equal("requestsecret", token.TokenSecret);
        }
Beispiel #18
0
        public void ExchangeTokensWhenVerifierIsWrongThrowsException()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);
            IOAuthContext context = session.BuildExchangeRequestTokenForAccessTokenContext(
                new TokenBase {
                ConsumerKey = "key", Token = "requestkey"
            }, "GET", "wrong").Context;

            provider.ExchangeRequestTokenForAccessToken(context);
        }
Beispiel #19
0
        /// <summary>
        /// Authorizes the specified request.
        /// </summary>
        /// <param name="webRequest">The request.</param>
        /// <param name="requestBody">The requestBody if form encoded parameters.</param>
        public void Authorize(WebRequest webRequest, string requestBody)
        {
            IOAuthConsumerContext consumerContext = this.CreateConsumerContext(true);
            IOAuthSession         oauthSession    = CreateOAuthSessionWithConsumerContext(consumerContext);

            oauthSession.AccessToken = this.CreateAccessToken();
            string oauthHeader = this.GetOAuthHeaderForRequest(oauthSession, webRequest);

            webRequest.Headers.Add(AuthorizationHeader, oauthHeader);
        }
        public void RequestTokenForRsaSha1()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);

            IToken token = session.GetRequestToken();

            Assert.Equal("key", token.ConsumerKey);
            Assert.Equal("requestkey", token.Token);
            Assert.Equal("requestsecret", token.TokenSecret);
        }
        public void RequestTokenWithHmacSha1WithInvalidSignatureThrows()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.HmacSha1);
            IOAuthContext context = session.BuildRequestTokenContext("GET").Context;

            context.Signature = "wrong";
            var ex = Assert.Throws <OAuthException>(() => (provider.GrantRequestToken(context)));

            Assert.Equal("Failed to validate signature", ex.Message);
        }
Beispiel #22
0
        public void RequestTokenWithoutCallbackWillThrowException()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.PlainText);
            IOAuthContext context = session.BuildRequestTokenContext("GET").Context;

            context.CallbackUrl = null;             // clear parameter, as it will default to "oob"
            var ex = Assert.Throws <OAuthException>(() => provider.GrantRequestToken(context));

            Assert.Equal("Missing required parameter : oauth_callback", ex.Message);
        }
Beispiel #23
0
        public void ExchangeTokensWhenVerifierIsMatchDoesNotThrowException()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);
            IOAuthContext context = session.BuildExchangeRequestTokenForAccessTokenContext(
                new TokenBase {
                ConsumerKey = "key", Token = "requestkey"
            }, "GET", "GzvVb5WjWfHKa/0JuFupaMyn").Context;

            provider.ExchangeRequestTokenForAccessToken(context);
        }
        public void RequestTokenWithInvalidConsumerKeyThrowsException()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.PlainText);

            session.ConsumerContext.ConsumerKey = "invalid";
            IOAuthContext context = session.BuildRequestTokenContext("GET").Context;
            var           ex      = Assert.Throws <OAuthException>(() => provider.GrantRequestToken(context));

            Assert.Equal("Unknown Consumer (Realm: , Key: invalid)", ex.Message);
        }
Beispiel #25
0
        public void ExchangeTokensWhenVerifierIsWrongThrowsException()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);
            IOAuthContext context = session.BuildExchangeRequestTokenForAccessTokenContext(
                new TokenBase {
                ConsumerKey = "key", Token = "requestkey"
            }, "GET", "wrong").Context;
            var ex = Assert.Throws <OAuthException>(() => provider.ExchangeRequestTokenForAccessToken(context));

            Assert.Equal("The parameter \"oauth_verifier\" was rejected", ex.Message);
        }
        public void setup()
        {
            _headers = new NameValueCollection();
            _oAuthSession = MockRepository.GenerateMock<IOAuthSession>();
            _oAuthContext = MockRepository.GenerateMock<IOAuthContext>();

            _oAuthContext.Expect(x => x.Headers).Return(_headers);

            _consumerRequest = new ConsumerRequest(_oAuthSession, _oAuthContext, null, null);

        }
        public void AccessTokenWithHmacSha1()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.HmacSha1);
            IOAuthContext context = session.BuildAccessTokenContext("GET", "client_auth", "username", "password").Context;

            context.TokenSecret = null;
            IToken accessToken = provider.CreateAccessToken(context);

            Assert.Equal("accesskey", accessToken.Token);
            Assert.Equal("accesssecret", accessToken.TokenSecret);
        }
        public void AccessProtectedResourceWithPlainText()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.PlainText);

            session.AccessToken = new TokenBase {
                ConsumerKey = "key", Token = "accesskey", TokenSecret = "accesssecret"
            };
            IOAuthContext context = session.Request().Get().ForUrl("http://localhost/protected.rails").SignWithToken().Context;

            context.TokenSecret = null;
            provider.AccessProtectedResourceRequest(context);
        }
        public void RequestTokenForRsaSha1WithAddtionalQueryParameters()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);

            IToken token = session
                           .WithQueryParameters(new { scope = "http://term.ie/apps/subscriptions" })
                           .GetRequestToken();

            Assert.Equal("key", token.ConsumerKey);
            Assert.Equal("requestkey", token.Token);
            Assert.Equal("requestsecret", token.TokenSecret);
        }
Beispiel #30
0
        /// <summary>
        /// Get Access token.
        /// </summary>
        private void getAccessToken()
        {
            IOAuthSession clientSession = CreateSession();
            IToken        accessToken   = clientSession.ExchangeRequestTokenForAccessToken((IToken)HttpContext.Current.Session["requestToken"], HttpContext.Current.Session["oauthVerifyer"].ToString());

            HttpContext.Current.Session["accessToken"]       = accessToken.Token;
            HttpContext.Current.Session["accessTokenSecret"] = accessToken.TokenSecret;

            String realmId = HttpContext.Current.Session["accessTokenSecret"].ToString();
            OAuthRequestValidator oauthValidator = new OAuthRequestValidator(accessToken.Token, accessToken.TokenSecret, consumerKey, consumerSecret);
            ServiceContext        serviceContext = new ServiceContext(realmId, IntuitServicesType.QBO, oauthValidator);
        }
        /// <summary>
        /// Starts the authentication process.
        /// </summary>
        private void FireAuth()
        {
            IOAuthSession session      = CreateSession();
            IToken        requestToken = session.GetRequestToken();

            HttpContext.Current.Session["requestToken"] = requestToken;
            var authUrl = string.Format("{0}?oauth_token={1}&oauth_callback={2}", authorizeUrl, requestToken.Token, UriUtility.UrlEncode(oauthCallbackUrl));

            HttpContext.Current.Session["oauthLink"] = authUrl;

            HttpContext.Current.Response.Redirect(authUrl);
        }
Beispiel #32
0
        public void ExchangeTokensWhenVerifierIsMissingThrowsException()
        {
            string verifier = null;

            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);
            IOAuthContext context = session.BuildExchangeRequestTokenForAccessTokenContext(
                new TokenBase {
                ConsumerKey = "key", Token = "requestkey"
            }, "GET", verifier).Context;
            var ex = Assert.Throws <OAuthException>(() => provider.ExchangeRequestTokenForAccessToken(context));

            Assert.Equal("Missing required parameter : oauth_verifier", ex.Message);
        }
        public void MakeAuthenticatedCallForTokenRsaSha1WithPost()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);

            session.AccessToken = new TokenBase {
                ConsumerKey = "key", Token = "accesskey", TokenSecret = "accesssecret"
            };

            string contents = session.Request().Post().ForUrl("http://term.ie/oauth/example/echo_api.php")
                              .WithFormParameters(new { success = "true" })
                              .ToString();

            Assert.Equal("success=true", contents);
        }
        public void ExchangeRequestTokenForAccessTokenRsaSha1()
        {
            IOAuthSession session = CreateConsumer(SignatureMethod.RsaSha1);

            IToken requestToken = session.GetRequestToken();

            // now exchange the token

            IToken accessToken = session.ExchangeRequestTokenForAccessToken(requestToken);

            Assert.Equal("key", accessToken.ConsumerKey);
            Assert.Equal("accesskey", accessToken.Token);
            Assert.Equal("accesssecret", accessToken.TokenSecret);
        }
        public void RequestTokenForRsaSha1()
        {
            using (With.NoCertificateValidation())
            {
                // simple test, just requests a token using RSHA1...

                IOAuthSession session = CreateGoogleContactsSession();

                IToken token = session.GetRequestToken();
                Assert.AreEqual("weitu.googlepages.com", token.ConsumerKey);
                Assert.IsTrue(token.Token.Length > 0);
                Assert.IsNotNull(token.TokenSecret); // interesting - secret used to be null, now it's a randomly generated value... hmmm
            }
        }
Beispiel #36
0
        public override object Authenticate(IServiceBase service, OAuth request, IOAuthSession session, IOAuthTokens tokens, OAuthAuthorizer oAuth)
        {
            var code = service.RequestContext.Get<IHttpRequest>().QueryString["code"];
            var isPreAuthCallback = !code.IsNullOrEmpty();
            if (!isPreAuthCallback)
            {
                var preAuthUrl = PreAuthUrl + "?client_id={0}&redirect_uri={1}&scope={2}"
                    .Fmt(AppId, this.CallbackUrl.UrlEncode(), string.Join(",", Permissions));
                return service.Redirect(preAuthUrl);
            }

            var accessTokenUrl = this.AccessTokenUrl + "?client_id={0}&redirect_uri={1}&client_secret={2}&code={3}"
                .Fmt(AppId, this.CallbackUrl.UrlEncode(), AppSecret, code);

            try
            {
                var contents = accessTokenUrl.DownloadUrl();
                var authInfo = HttpUtility.ParseQueryString(contents);
                tokens.AccessTokenSecret = authInfo["access_token"];
                service.SaveSession(session);
                session.OnAuthenticated(service, tokens, authInfo.ToDictionary());

                //Haz access!
                return service.Redirect(session.ReferrerUrl.AddQueryParam("s", "1"));
            }
            catch (WebException we)
            {
                var statusCode = ((HttpWebResponse)we.Response).StatusCode;
                if (statusCode == HttpStatusCode.BadRequest)
                {
                    return service.Redirect(session.ReferrerUrl.AddQueryParam("f", "AccessTokenFailed"));
                }
            }

            //Shouldn't get here
            return service.Redirect(session.ReferrerUrl.AddQueryParam("f", "Unknown"));
        }
        public UserAuth GetUserAuth(IOAuthSession authSession, IOAuthTokens tokens)
        {
            if (!authSession.UserAuthId.IsNullOrEmpty())
            {
                var userAuth = GetUserAuth(authSession.UserAuthId);
                if (userAuth != null) return userAuth;
            }
            if (!authSession.UserName.IsNullOrEmpty())
            {
                var userAuth = GetUserAuthByUserName(authSession.UserName);
                if (userAuth != null) return userAuth;
            }

            if (tokens == null || tokens.Provider.IsNullOrEmpty() || tokens.UserId.IsNullOrEmpty())
                return null;

            return dbFactory.Exec(dbCmd => {
                var oAuthProvider = dbCmd.FirstOrDefault<UserOAuthProvider>(
                    "Provider = {0} AND UserId = {1}", tokens.Provider, tokens.UserId);

                if (oAuthProvider != null)
                {
                    var userAuth = dbCmd.GetByIdOrDefault<UserAuth>(oAuthProvider.UserAuthId);
                    return userAuth;
                }
                return null;
            });
        }
        private UserAuth GetUserAuth(IRedisClientFacade redis, IOAuthSession authSession, IOAuthTokens tokens)
        {
            if (!authSession.UserAuthId.IsNullOrEmpty())
            {
                var userAuth = GetUserAuth(redis, authSession.UserAuthId);
                if (userAuth != null) return userAuth;
            }
            if (!authSession.UserName.IsNullOrEmpty())
            {
                var userAuth = GetUserAuthByUserName(authSession.UserName);
                if (userAuth != null) return userAuth;
            }

            if (tokens == null || tokens.Provider.IsNullOrEmpty() || tokens.UserId.IsNullOrEmpty()) return null;

            var oAuthProviderId = GetAuthProviderByUserId(redis, tokens.Provider, tokens.UserId);
            if (!oAuthProviderId.IsNullOrEmpty())
            {
                var oauthProvider = redis.As<UserOAuthProvider>().GetById(oAuthProviderId);
                if (oauthProvider != null)
                    return redis.As<UserAuth>().GetById(oauthProvider.UserAuthId);
            }
            return null;
        }
 public static void SaveSession(this IServiceBase service, IOAuthSession session)
 {
     using (var cache = service.GetCacheClient())
     {
         var sessionKey = AuthService.GetSessionKey(service.GetSessionId());
         cache.Set(sessionKey, session);
     }
 }
 public OAuthService(string consumerKey, string consumerSecret, string baseUrl, string callbackUrl)
 {
     credentials = new OAuthCredentials(consumerKey, consumerSecret);
     session = CreateSession(credentials, baseUrl, callbackUrl);
 }
        private void LoadUserAuth(IOAuthSession session, UserAuth userAuth)
        {
            if (userAuth == null) return;

            session.UserAuthId = userAuth.Id.ToString();
            session.DisplayName = userAuth.DisplayName;
            session.FirstName = userAuth.FirstName;
            session.LastName = userAuth.LastName;
            session.Email = userAuth.Email;
        }
        public void SaveUserAuth(IOAuthSession oAuthSession)
        {
            dbFactory.Exec(dbCmd => {

                var userAuth = !oAuthSession.UserAuthId.IsNullOrEmpty()
                    ? dbCmd.GetByIdOrDefault<UserAuth>(oAuthSession.UserAuthId)
                    : oAuthSession.TranslateTo<UserAuth>();

                if (userAuth.Id == default(int) && !oAuthSession.UserAuthId.IsNullOrEmpty())
                    userAuth.Id = int.Parse(oAuthSession.UserAuthId);

                dbCmd.Save(userAuth);
            });
        }
        private static IConsumerResponse CallApi(IOAuthSession oauthSession, string method, string body, Uri baseUrl, string endpointName, string itemId, /*string whereClause, string orderBy,*/ DateTime? lastModifiedDate, NameValueCollection additionalQueryParams, string acceptMimeType)
        {
            method = string.IsNullOrEmpty(method) ? "GET" : method.ToUpper();

            Uri uri = ConstructUri(baseUrl, endpointName, itemId, /*whereClause, orderBy,*/ additionalQueryParams);

            IConsumerRequest oauthRequest = oauthSession.Request()
                .ForMethod(method)
                .ForUri(uri)
                .WithAcceptHeader(acceptMimeType ?? "text/xml")
                .SignWithToken();

            if ((method == "PUT" || method == "POST"))
            {
                oauthRequest = oauthRequest.WithBody(body);
            }

            if (lastModifiedDate.HasValue)
            {
                oauthRequest.Context.Headers.Add("If-Modified-Since", lastModifiedDate.Value.ToString("yyyy-MM-dd HH:mm:ss"));
            }

            var consumerResponse = oauthRequest.ToConsumerResponse();

            // Check for <ApiException> response message
            if (consumerResponse.Content.StartsWith("<ApiException"))
            {
                ApiExceptionDetails details = ModelSerializer.DeserializeTo<ApiExceptionDetails>(consumerResponse.Content);
                throw new ApiException(details);
            }

            return consumerResponse;
        }
 public UserAuth GetUserAuth(IOAuthSession authSession, IOAuthTokens tokens)
 {
     using (var redis = factory.GetClient())
         return GetUserAuth(redis, authSession, tokens);
 }
 public IConsumerRequest CreateConsumerRequest(IOAuthSession session, IOAuthContext context, IOAuthConsumerContext consumerContext)
 {
     return new ConsumerRequest(session, context, consumerContext, CertificateFactory);
 }
Beispiel #46
0
 public OauthMessageInspector(IOAuthSession authSession)
 {
     _authSession = authSession;
 }
Beispiel #47
0
 public OAuthBehavior(IOAuthSession authSession)
 {
     _authSession = authSession;
 }
 /// <summary>
 /// Gets the current OAuthSession (used for getting request tokens, access tokens, etc.)
 /// </summary>
 /// <returns></returns>
 public static IOAuthSession GetCurrentSession()
 {
     return _oauthSession ?? (_oauthSession = CreateOAuthSession());
 }
 public XeroConnection(IOAuthSession session, IToken token)
 {
     _session = session;
     _token = token;
 }
        public void LoadUserAuth(IOAuthSession session, IOAuthTokens tokens)
        {
            session.ThrowIfNull("session");

            var userAuth = GetUserAuth(session, tokens);
            LoadUserAuth(session, userAuth);
        }
        public void SaveUserAuth(IOAuthSession oAuthSession)
        {
            using (var redis = factory.GetClient())
            {
                var userAuth = !oAuthSession.UserAuthId.IsNullOrEmpty()
                    ? GetUserAuth(redis, oAuthSession.UserAuthId)
                    : oAuthSession.TranslateTo<UserAuth>();

                if (userAuth.Id == default(int) && !oAuthSession.UserAuthId.IsNullOrEmpty())
                    userAuth.Id = int.Parse(oAuthSession.UserAuthId);

                redis.Store(userAuth);
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="IntegrationProxy"/> class.
 /// </summary>
 /// <param name="oauthSession">The oauth session.</param>
 public IntegrationProxy (IOAuthSession oauthSession)
 {
     _oauthSession = oauthSession;
 }
Beispiel #53
0
        public virtual object Authenticate(IServiceBase service, OAuth request, IOAuthSession session,
            IOAuthTokens tokens, OAuthAuthorizer oAuth)
        {
            //Default oAuth logic based on Twitter's oAuth workflow
            if (!tokens.RequestToken.IsNullOrEmpty() && !request.oauth_token.IsNullOrEmpty())
            {
                oAuth.RequestToken = tokens.RequestToken;
                oAuth.RequestTokenSecret = tokens.RequestTokenSecret;
                oAuth.AuthorizationToken = request.oauth_token;
                oAuth.AuthorizationVerifier = request.oauth_verifier;

                if (oAuth.AcquireAccessToken())
                {
                    tokens.AccessToken = oAuth.AccessToken;
                    tokens.AccessTokenSecret = oAuth.AccessTokenSecret;
                    session.OnAuthenticated(service, tokens, oAuth.AuthInfo);
                    service.SaveSession(session);

                    //Haz access!
                    return service.Redirect(session.ReferrerUrl.AddQueryParam("s", "1"));
                }

                //No Joy :(
                return service.Redirect(session.ReferrerUrl.AddQueryParam("f", "AccessTokenFailed"));
            }
            if (oAuth.AcquireRequestToken())
            {
                tokens.RequestToken = oAuth.RequestToken;
                tokens.RequestTokenSecret = oAuth.RequestTokenSecret;
                service.SaveSession(session);

                //Redirect to OAuth provider to approve access
                return service.Redirect(this.AuthorizeUrl
                    .AddQueryParam("oauth_token", tokens.RequestToken)
                    .AddQueryParam("oauth_callback", session.ReferrerUrl));
            }

            return service.Redirect(session.ReferrerUrl.AddQueryParam("f", "RequestTokenFailed"));
        }