in src/main/kotlin/org/jetbrains/slackUnfurls/slackUnfurlsInSpace/SlackOAuthFlow.kt [22:52]
suspend fun startUserAuthFlowInSlack(call: ApplicationCall, params: Routes.SlackOAuth, callbackUrl: String) {
withSpaceLogContext(params.spaceOrgId, params.spaceUser, params.slackTeamId) {
val flowId = generateNonce()
val slackDomain = db.slackTeams.getById(params.slackTeamId, params.spaceOrgId)?.domain
if (slackDomain == null) {
log.warn("Slack workspace is not connected to Space org")
return@withSpaceLogContext
}
db.slackUserTokens.delete(
spaceOrgId = params.spaceOrgId,
spaceUserId = params.spaceUser,
slackTeamId = params.slackTeamId
)
val permissionScopes = slackPermissionScopes.joinToString(",")
db.slackOAuthSessions.create(flowId, params, permissionScopes)
log.info("Started user OAuth flow in Slack. Flow id is $flowId")
val authUrl = with(URLBuilder("https://$slackDomain.slack.com/oauth/v2/authorize")) {
parameters.apply {
append("client_id", SlackCredentials.clientId)
append("user_scope", permissionScopes)
append("state", "user-$flowId")
append("redirect_uri", callbackUrl)
}
build()
}
call.respondRedirect(authUrl.toString())
}
}