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); }
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); }