override fun doHandle()

in azure-active-directory-server/src/main/kotlin/org/jetbrains/teamcity/aad/LoginViaAADController.kt [30:57]


    override fun doHandle(request: HttpServletRequest, response: HttpServletResponse): ModelAndView? {
        val nonce = accessTokenFactory.create()
        val endpoint = aadSchemeProperties.appOAuthEndpoint
        val clientId = aadSchemeProperties.clientId
        if (endpoint == null || clientId == null) return null

        val separator = if (endpoint.contains('?')) '&' else '?'
        val requestUrl = StringBuilder("$endpoint$separator")
                .append("response_type=id_token")
                .append("&client_id=$clientId")
                .append("&scope=openid profile")
                .append("&nonce=$nonce")
                .append("&response_mode=form_post")
                .apply {
                    aadSchemeProperties.authPrompt?.let {
                        if (it.isNotEmpty()) {
                            this.append("&prompt=${it.trim()}")
                        }
                    }
                    UriComponentsBuilder.fromUriString(rootUrlHolder.rootUrl)
                            .path(callbackPathProvider.path)
                            .toUriString().let {
                        this.append("&redirect_uri=$it")
                    }
                }

        return ModelAndView(RedirectView(requestUrl.toString()))
    }