in app/controllers/Auth.scala [339:383]
protected def stageTwo(code:String, redirectUri:String,request: Request[Any]) = {
var postdata = Map(""->"")
if (config.get[String]("oAuth.type") != "Azure") {
postdata = Map(
"grant_type"->"authorization_code",
"client_id"->config.get[String]("oAuth.clientId"),
"redirect_uri"->redirectUri,
"code"->code
)
} else {
postdata = Map(
"grant_type"->"authorization_code",
"client_id"->config.get[String]("oAuth.clientId"),
"redirect_uri"->redirectUri,
"code"->code,
"code_verifier"->request.session.get("code_verifier").getOrElse("none")
)
}
val contentBody = HttpEntity(ContentType(MediaTypes.`application/x-www-form-urlencoded`) ,assembleFromMap(postdata))
val headers = List(
Accept(MediaRange(MediaTypes.`application/json`)),
Origin(config.get[String]("oAuth.origin"))
)
logger.debug(s"oauth step2 exchange server url is ${config.get[String]("oAuth.tokenUrl")} and unformatted request content is $postdata")
val rq = HttpRequest(HttpMethods.POST, uri=config.get[String]("oAuth.tokenUrl"), headers=headers, entity=contentBody)
( for {
response <- http.singleRequest(rq)
bodyContent <- consumeBody[OAuthResponse](response.entity)
} yield (response, bodyContent)
).map({
case (response, Right(oAuthResponse))=>
if(response.status==StatusCodes.OK) {
Right(oAuthResponse)
} else {
Left(s"Server responded with an error ${response.status} ${oAuthResponse.toString}")
}
case (_, Left(decodingError))=>
Left(s"Could not decode response from oauth server: $decodingError")
})
}