Example #1
0
        private async Task <bool> ListenForCallbackAndGetResult(CancellationToken token)
        {
            var success = false;

            using var listener = new SpotifyCallbackListener(5000);
            await listener.ListenToSingleRequestAndRespondAsync(async uri =>
            {
                var query    = HttpUtility.ParseQueryString(HttpUtility.HtmlDecode(uri.Query));
                var response = await _httpClient.PostAsync("https://accounts.spotify.com/api/token",
                                                           new FormUrlEncodedContent(new Dictionary <string, string>
                {
                    { "code", query["code"] },
                    { "client_id", _appSettings.ClientId },
                    { "grant_type", "authorization_code" },
                    { "redirect_uri", "http://localhost:5000/" },
                    { "code_verifier", _codeVerifier }
                }), token);

                if (!response.IsSuccessStatusCode)
                {
                    return(string.Format(AppConstants.ErrorHtml, response.StatusCode, await response.Content.ReadAsStringAsync(token)));
                }
                _appSettings.SpotifyTokens = JsonSerializer.Deserialize <SpotifyAccessToken>(await response.Content.ReadAsStringAsync(token));

                _appSettings.SpotifyTokens !.ExpiresAt = DateTime.Now.AddSeconds(_appSettings.SpotifyTokens.ExpiresInSeconds);
                IsAuthenticated = true;
                success         = true;
                return(AppConstants.SuccessHtml);
            }, token);

            return(success);
        }
Example #2
0
        private async Task <bool> GetAuthToken()
        {
            using var listener = new SpotifyCallbackListener(5000);
            var cts    = new CancellationTokenSource();
            var result = await ListenForCallbackAndGetResult(cts.Token);

            cts.Cancel();
            return(result);
        }