Пример #1
0
    public async Task RefreshUserAccessToken(TraktUser traktUser)
    {
        if (string.IsNullOrWhiteSpace(traktUser.RefreshToken))
        {
            _logger.LogError("Tried to reauthenticate with Trakt, but no refreshToken was available");
            return;
        }

        var data = new TraktUserRefreshTokenRequest
        {
            ClientId     = TraktUris.ClientId,
            ClientSecret = TraktUris.ClientSecret,
            RedirectUri  = "urn:ietf:wg:oauth:2.0:oob",
            RefreshToken = traktUser.RefreshToken,
            GrantType    = "refresh_token"
        };

        TraktUserAccessToken userAccessToken;

        try
        {
            using (var response = await PostToTrakt(TraktUris.AccessToken, data).ConfigureAwait(false))
            {
#pragma warning disable CA2007
                await using var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

#pragma warning restore CA2007
                userAccessToken = await JsonSerializer.DeserializeAsync <TraktUserAccessToken>(stream, _jsonOptions).ConfigureAwait(false);
            }
        }
        catch (HttpRequestException ex)
        {
            _logger.LogError(ex, "An error occurred during token refresh");
            return;
        }

        if (userAccessToken != null)
        {
            traktUser.AccessToken           = userAccessToken.AccessToken;
            traktUser.RefreshToken          = userAccessToken.RefreshToken;
            traktUser.AccessTokenExpiration = DateTime.Now.AddSeconds(userAccessToken.ExpirationWithBuffer);
            Plugin.Instance.SaveConfiguration();
            _logger.LogInformation("Successfully refreshed the access token for user {UserId}", traktUser.LinkedMbUserId);
        }
    }
Пример #2
0
        public async Task RefreshUserAccessToken(TraktUser traktUser)
        {
            if (string.IsNullOrWhiteSpace(traktUser.RefreshToken))
            {
                _logger.LogError("Tried to reauthenticate with Trakt, but no refreshToken was available");
                return;
            }

            var data = new TraktUserRefreshTokenRequest
            {
                client_id     = TraktUris.ClientId,
                client_secret = TraktUris.ClientSecret,
                redirect_uri  = "urn:ietf:wg:oauth:2.0:oob",
                refresh_token = traktUser.RefreshToken,
                grant_type    = "refresh_token"
            };

            TraktUserAccessToken userAccessToken;

            try
            {
                using (var response = await PostToTrakt(TraktUris.AccessToken, data).ConfigureAwait(false))
                {
                    userAccessToken = _jsonSerializer.DeserializeFromStream <TraktUserAccessToken>(response.Content);
                }
            }
            catch (HttpException ex)
            {
                _logger.LogError(ex, "An error occurred during token refresh");
                return;
            }

            if (userAccessToken != null)
            {
                traktUser.AccessToken           = userAccessToken.access_token;
                traktUser.RefreshToken          = userAccessToken.refresh_token;
                traktUser.AccessTokenExpiration = DateTime.Now.AddSeconds(userAccessToken.expirationWithBuffer);
                Plugin.Instance.SaveConfiguration();
                _logger.LogInformation("Successfully refreshed the access token for user {UserId}", traktUser.LinkedMbUserId);
            }
        }