コード例 #1
0
        public async Task <ActionResult> AuthorizeUserCallback(string code,
                                                               string error,
                                                               string state)
        {
            try
            {
                if (!string.IsNullOrEmpty(error))
                {
                    return(Result(StatusCodes.Status401Unauthorized, $"Error: {error}, State: {state ?? "NULL"}"));
                }

                if (string.IsNullOrWhiteSpace(code))
                {
                    return(Result(StatusCodes.Status400BadRequest, "Error: Empty or null code returned, " +
                                  $"State: {state ?? "NULL"}"));
                }

                var tokenRequest = new AuthorizationCodeTokenRequest
                {
                    ClientId     = UserAuth.ClientId,
                    ClientSecret = UserAuth.ClientSecret,
                    Code         = code,
                    Address      = Constants.UrlSpotifyToken,
                    RedirectUri  = UserAuth.BaseUrl + Constants.LocalUrlAuthCallback
                };
                var tokenRequestTime = DateTimeOffset.UtcNow;
                var tokenResponse    = await HttpClient.RequestAuthorizationCodeTokenAsync(tokenRequest);

                if (tokenResponse.IsError)
                {
                    throw new ApplicationException("Failed to get token authorization code token."
                                                   + Environment.NewLine
                                                   + $"{tokenResponse.ErrorType} Error:"
                                                   + $"{tokenResponse.Error} {tokenResponse.ErrorDescription}");
                }
                // ReSharper disable once InconsistentNaming
                var Expiry      = tokenRequestTime + TimeSpan.FromSeconds(tokenResponse.ExpiresIn);
                var keysToStore = new Dictionary <string, string>
                {
                    { nameof(tokenResponse.AccessToken), tokenResponse.AccessToken },
                    { nameof(tokenResponse.RefreshToken), tokenResponse.RefreshToken },
                    { nameof(Expiry), Expiry.ToString(CultureInfo.InvariantCulture) }
                };
                PersistenceHelper.StoreKeys(keysToStore);

                return(Success());
            }
            catch (Exception ex)
            {
                return(Result(ex));
            }
        }