public async Task <IActionResult> SpotifyAuthorized(string code, string state) { if (state.Contains("-sync")) { var option = new CookieOptions(); option.Expires = DateTime.Now.AddDays(1); Request.Cookies.TryGetValue("jwtToken", out string jwtToken); jwtToken = await _tokenService .AddClaimToToken( jwtToken, "spotifyAuth", (await new UserAccountsService(new HttpClient(), _config).RequestAccessRefreshToken(code)).AccessToken); Response.Cookies.Append("jwtToken", jwtToken, option); var roomId = state.TrimEnd("-sync".ToCharArray()); return(RedirectToAction("Index", "Room", routeValues: new { Id = roomId })); } var refreshToken = (await new UserAccountsService(new HttpClient(), _config).RequestAccessRefreshToken(code)).AccessToken; var room = await _roomDataStore.GetItemAsync(state); room.SpotifyAuthCode = refreshToken; var request = HttpContext.Request; var roomUrl = $"{request.Scheme}://{request.Host}/Room/Index/{room.Id}"; var spotify = new SpotifyService(refreshToken); var spotifyUserId = await spotify.GetUserIdAsync(); var updateRoomTask = _roomDataStore.UpdateItemAsync(room); var createSpotifyRoomTask = spotify.CreatePlaylist(room.Name, spotifyUserId, roomUrl); await Task.WhenAll(updateRoomTask, createSpotifyRoomTask); var playlist = (SpotifyPlaylist)createSpotifyRoomTask.Result; playlist.Room = room; await _spotifyPlaylistsStore.AddItemAsync(playlist); return(RedirectToAction("Index", "Room", routeValues: new { Id = state })); }