override def invokeBlock[A]()

in app/controllers/LoginComponents.scala [89:122]


    override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]): Future[Result] = {

      def checkPassword(user: EmergencyUser, username: String, password: String): Future[Result] = {
        if (password.isBcryptedBounded(user.passwordHash)) {
          log.info(s"$username is authorised to change the Emergency switch.")
          block(request)
        } else {
          refuseSwitchChange(s"The password provided by $username is incorrect. User will be refused access to change emergency switch.")
        }
      }

      def refuseSwitchChange(logErrorMsg: String): Future[Result] = {
        log.warn(logErrorMsg)
        Future.successful {
          Unauthorized(
            views.html.switches.switchChange(
              "Authorisation checks failed, the Emergency switch will not be changed. Contact digitalcms.dev@theguardian.com for more help."
            ))
        }
      }

      try {
        val authHeaderUser = EmergencyActions.getBasicAuthDetails(request.headers)
        val userId = authHeaderUser.id
        val userOpt = deps.emergencyUserDBService.getUser(userId)
        userOpt.map {
          case Left(error) => refuseSwitchChange(s"Error with reading $userId from Dynamo: ${error.toString}. User will be refused access to change emergency switch.")
          case Right(user) => checkPassword(user, userId, authHeaderUser.password)
        }.getOrElse(refuseSwitchChange(s"User $userId not found. User will be refused access to change emergency switch."))
      } catch {
        case e: EmergencyActionsException =>
          refuseSwitchChange(e.getMessage)
      }
    }