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