in src/main/kotlin/org/jetbrains/slackUnfurls/spaceUnfurlsInSlack/SpaceOAuthFlow.kt [24:50]
suspend fun startUserAuthFlowInSpace(call: ApplicationCall, params: Routes.SpaceOAuth, callbackUrl: String) {
withSlackLogContext(params.slackTeamId, params.slackUserId, params.spaceOrgId) {
val spaceOrg = db.spaceOrgs.getById(params.spaceOrgId, params.slackTeamId)
?: run {
call.respondError(HttpStatusCode.BadRequest, log, "Space organization is not connected to Slack workspace")
return@withSlackLogContext
}
val flowId = generateNonce()
db.spaceUserTokens.delete(params.slackTeamId, params.slackUserId, params.spaceOrgId)
val permissionScopes = spaceUserPermissionScopes.joinToString(" ")
db.spaceOAuthSessions.create(flowId, params, permissionScopes)
log.info("Started user OAuth flow in Space. Flow id is $flowId")
val authUrl = Space.authCodeSpaceUrl(
spaceOrg.toSpaceAppInstance(),
scope = permissionScopes,
state = flowId,
redirectUri = callbackUrl,
requestCredentials = OAuthRequestCredentials.DEFAULT,
accessType = OAuthAccessType.OFFLINE
)
call.respondRedirect(authUrl)
}
}