protected def stageTwo()

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")
    })

  }