Пример #1
0
        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}"));
        }