public async Task <TokenResponse> Authorize(ITurnContext turnContext, CancellationToken cancellationToken) { var info = RingoBotHelper.NormalizedConversationInfo(turnContext); string userId = RingoBotHelper.ChannelUserId(turnContext); TokenResponse token = await GetAccessToken(userId); if (token != null) { return(token); } // User is not authorized by Spotify if (BotHelper.IsGroup(turnContext)) { // Don't start authorisation dance in Group chat await turnContext.SendActivityAsync( $"Before you play or join with Ringo you need to authorize Spotify. DM (direct message) the word `\"{RingoBotCommands.AuthCommand[0]}\"` to @{info.BotName} to continue.", cancellationToken : cancellationToken); return(null); } _logger.LogInformation($"Requesting Spotify Authorization for UserId {userId}"); await _userData.CreateUserIfNotExists(info); // create state token string state = $"{RingoBotStatePrefix}{Guid.NewGuid().ToString("N")}".ToLower(); // validate state token if (!RingoBotStateRegex.IsMatch(state)) { throw new InvalidOperationException("Generated state token does not match RingoBotStateRegex"); } // save state token await _userStateData.SaveStateToken(userId, state); await _userData.SaveStateToken(userId, state); // get URL string url = UserAccountsService.AuthorizeUrl( state, new[] { "user-read-playback-state", "user-modify-playback-state" }, _config["SpotifyApiClientId"], _config["SpotifyAuthRedirectUri"]); var message = MessageFactory.Attachment( new Attachment { ContentType = HeroCard.ContentType, Content = new HeroCard { Text = "Authorize Ringo bot to use your Spotify account", Buttons = new[] { new CardAction { Title = "Authorize", Text = "Click to Authorize. (Opens in your browser)", Value = url, Type = ActionTypes.OpenUrl, }, }, }, }, text: "To play music, Ringo needs to be authorized to use your Spotify Account."); await turnContext.SendActivityAsync(message, cancellationToken); return(null); }
public async Task <User> CreateUserIfNotExists(ConversationInfo info, string userId = null, string username = null) { return(await _userData.CreateUserIfNotExists(info, userId, username)); }