private[config] def loadSupport()

in configTools/src/main/scala/com/gu/janus/config/Loader.scala [165:197]


  private[config] def loadSupport(
      config: Config,
      permissions: Set[Permission]
  ): Either[String, SupportACL] = {
    for {
      configuredSupport <- config
        .as[ConfiguredSupport]("janus.support")
        .left
        .map(err =>
          s"Failed to load support config from path `janus.support`: ${err.getMessage}"
        )
      supportAccess <- configuredSupport.supportAccess.traverse {
        configuredAclEntry =>
          permissions
            .find(p =>
              configuredAclEntry.account == p.account.authConfigKey && configuredAclEntry.label == p.label
            )
            .toRight(
              s"The support access definition includes a permission that doesn't appear to be defined.\nIt has label `${configuredAclEntry.label}` and refers to the account with key ${configuredAclEntry.account}"
            )
      }
      period = Duration.ofSeconds(configuredSupport.period.toLong)
      rota <- configuredSupport.rota.traverse {
        case ConfiguredRotaEntry(startTime, user1 :: user2 :: Nil) =>
          Right(startTime -> (user1, user2))
        case ConfiguredRotaEntry(startTime, users) =>
          Left(
            s"The support rota expects precisely 2 users, but for $startTime it has been defined with ${users
                .mkString("`", ", ", "`")}"
          )
      }
    } yield SupportACL.create(rota.toMap, supportAccess.toSet, period)
  }