public async Task ExecuteAsync(CancellationToken cancellationToken) { if (_userAccessTokenStore.UserAccessToken == null) { return; } RefreshableUserAccessTokenModel model = await _twitchApiClient.RefreshUserAccessToken(_userAccessTokenStore.UserAccessToken.RefreshToken); RefreshableUserAccessToken refreshableUserAccessToken = new RefreshableUserAccessToken() { AccessToken = model.AccessToken, RefreshToken = model.RefreshToken }; Interlocked.Exchange(ref _userAccessTokenStore.UserAccessToken, refreshableUserAccessToken); }
public async Task <IActionResult> Index(string code, string state) { if (state == null || !_userAccessStateStore.CurrentStates.ContainsKey(state)) { return(BadRequest("You're a naughty poo poo boy aren't ya, you little f**k?")); } _userAccessStateStore.CurrentStates.TryRemove(state, out string removedState); HttpClient client = new HttpClient(); string url = "https://id.twitch.tv/oauth2/token"; url = QueryHelpers.AddQueryString(url, "client_id", _clientId); url = QueryHelpers.AddQueryString(url, "client_secret", _clientSecret); url = QueryHelpers.AddQueryString(url, "code", code); url = QueryHelpers.AddQueryString(url, "grant_type", "authorization_code"); url = QueryHelpers.AddQueryString(url, "redirect_uri", $"http://{HttpContext.Request.Host.Host.ToLower()}/useraccesstoken"); HttpResponseMessage response = await client.PostAsync(url, null); string jsonString = await response.Content.ReadAsStringAsync(); UserAccessTokenModel data = JsonConvert.DeserializeObject <UserAccessTokenModel>(jsonString); if (data?.AccessToken == null) { return(BadRequest("Failed to authorize.")); } var refreshableToken = new RefreshableUserAccessToken() { AccessToken = data.AccessToken, RefreshToken = data.RefreshToken }; Interlocked.Exchange(ref _userAccessTokenStore.UserAccessToken, refreshableToken); return(Ok($"Auth Successful! {data.AccessToken}")); }