public HttpRequest(string requestURL, HttpMethod method, TContent content, NameValueCollection queryString, OAuthTokenEntity token) { RequestURL = requestURL ?? throw new ArgumentNullException(nameof(requestURL)); Method = method; Content = content; QueryString = queryString == null ? new NameValueCollection() : queryString; AccessToken = token; }
private async Task <OAuthTokenEntity> EnsureUserAsync(string access_token) { var token = await DBContext.OAuthTokens.SingleOrDefaultAsync(t => t.Value == access_token && (t.Expiry == null || t.Expiry.Value > DateTime.Now)); // User exists, short circuit out if (!string.IsNullOrEmpty(token?.UserId)) { return(token); } var profileUri = UriPath.Combine(Config.PathOfExileApi.Route, "/profile"); var profileQuery = QueryHelpers.AddQueryString(profileUri, nameof(access_token), access_token); using var client = new HttpClient(); using var response = await client.GetAsync(profileQuery); if (!response.IsSuccessStatusCode) { throw new AuthenticationException(response.ReasonPhrase); } var contentRaw = await response.Content.ReadAsStringAsync(); var profile = JsonConvert.DeserializeObject <ProfileResponse>(contentRaw); if (string.IsNullOrEmpty(profile?.Name)) { throw new AuthenticationException(); } var user = await UserManager.FindByNameAsync(profile.Name); if (user == null) { user = new UserEntity { UserName = profile.Name, Name = profile.Name, Realm = profile.Realm, UUID = profile.UUID }; var result = await UserManager.CreateAsync(user); if (!result.Succeeded) { throw new AuthenticationException(result.Errors.First().Description); } } token = new OAuthTokenEntity { Value = access_token, UserId = user.Id }; return(token); }
private RedirectResult BackToHome(OAuthTokenEntity token = null) { if (token == null) { return(Redirect(Config.Origin)); } var cookieOptions = new CookieOptions { Path = "/", IsEssential = true, Expires = token.Expiry, }; Response.Cookies.Append("access_token", token.Value, cookieOptions); return(Redirect(Config.Origin)); }
public virtual string GetToken(string clientId, string userId, string returnUrl) { Identity = clientId; TokenContext.TargetUrl = returnUrl; _logger.Debug(string.Format("clientid: {0},returnUrl: {1}", clientId, returnUrl)); if (_clientRules.Select(clientRule => clientRule.Verfy(TokenContext)).Any(r => r.Status != (int)OAuthTokenStatus.Ok)) { return(string.Empty); } var entity = new OAuthTokenEntity { ClientId = clientId, CreatedDateUtc = DateTime.UtcNow, UserId = userId, Token = Guid.NewGuid().ToString().Replace("-", ""), ExpiredDateUtc = DateTime.UtcNow.AddSeconds(MaxExpireDate) }; try { using (var tran = new TransactionScope()) { //clear timeout token for current user to reduce data set size OauthTokenDataService.Repository.Entities.Where(x => x.ClientId == clientId && x.UserId == userId).Delete(); OauthTokenDataService.Repository.Insert(entity); tran.Complete(); } } catch (Exception e) { _logger.Error <string>(e, e.InnerException.Message); } return(entity.Id > 0 ? entity.Token : string.Empty); }
public Tuple <OAuthErrorType, OAuthTokenEntity> GetToken(string clientID, string code) { OAuthCodeEntity codeEntity = AccessCodeDataProvider.Instance.Get(code, clientID); if (codeEntity == null) { return(Tuple.Create(OAuthErrorType.UnAuthorizedClient, new OAuthTokenEntity())); } ClientEntity clientEntity = ClientInformationDataProvider.Instance.GetClientMetadata(clientID); OAuthTokenEntity accessToken = new OAuthTokenEntity() { AccessToken = RandomGenerator.GeneratorRandomNQCode(32), TokenType = "authorization_code", ExpiresIn = clientEntity.ExpiresIn, RefreshToken = RandomGenerator.GeneratorRandomNQCode(32), Scopes = codeEntity.Scopes, StartTime = ConvertTimespan.Get(DateTime.Now) }; TokenDataProvider.Instance.Insert(accessToken); return(Tuple.Create(OAuthErrorType.NoError, accessToken)); }
internal void Insert(OAuthTokenEntity entity) { this.GetCollection <OAuthTokenEntity>().InsertOne(entity); }
public static async Task Authenticate() { string redirect_URL = ConfigurationManager.AppSettings.Get("OAUTH_REDIRECT"); string gitkraken_authorize_URL = ConfigurationManager.AppSettings.Get("GITKRAKEN_AUTHORIZE"); string gitkraken_accessToken_URL = ConfigurationManager.AppSettings.Get("GITKRAKEN_ACCESSTOKEN"); string clientID = ConfigurationManager.AppSettings.Get("OAUTH_CLIENTID"); string clientSecret = ConfigurationManager.AppSettings.Get("OAUTH_SECRET"); int loginTimeout = int.Parse(ConfigurationManager.AppSettings.Get("APP_LOGIN_TIMEOUT")); string state = randomB64(32); _listener = new HttpListener(); _listener.Prefixes.Add(redirect_URL); _listener.Start(); string request_URL = string.Format("{0}?response_type=code&scope=board:write user:read&state={1}&client_id={2}", new object[] { gitkraken_authorize_URL, state, clientID }); System.Diagnostics.Process.Start(request_URL); Timer timeoutTimer = new Timer { Enabled = true, AutoReset = false, Interval = loginTimeout }; timeoutTimer.Elapsed += new ElapsedEventHandler(StopListening); HttpListenerContext requestContext = null; try { requestContext = await _listener.GetContextAsync(); } catch (HttpListenerException) { SendPage("UI\\HTML\\OAuthErrorPage.html", requestContext.Response); requestContext.Response.StatusCode = 500;; LastErrorMessage = "You took too long to login. Try again."; return; } OAuthCodeEntity oAuthResponse = OAuthCodeEntity.CreateEntity(requestContext.Request); if (!state.Equals(oAuthResponse.State)) { SendPage("UI\\HTML\\OAuthErrorPage.html", requestContext.Response); requestContext.Response.StatusCode = 500; throw new OAuthException("Error Validation Token. Please Try Again."); } else { SendPage("UI\\HTML\\OAuthSuccessPage.html", requestContext.Response); requestContext.Response.StatusCode = 200; } requestContext.Response.Close(); _listener.Stop(); AccessTokenSegment tokenRequestBody = new AccessTokenSegment("authorization_code", clientID, clientSecret, oAuthResponse.Code); HttpRequest <AccessTokenSegment> tokenRequest = new HttpRequest <AccessTokenSegment>(gitkraken_accessToken_URL, HttpMethod.Post, tokenRequestBody, null, AccessToken); AccessToken = await Requesting.MakeRequest <OAuthTokenEntity>(tokenRequest); }