app/controllers/DefaultsController.scala (93 lines of code) (raw):
package controllers
import com.gu.facia.client.models.{Metadata, TargetedTerritory}
import model.editions.{EditionsAppTemplates, FeastAppTemplates}
import model.editions.templates.CuratedPlatformDefinition
import model.{Cached, UserDataForDefaults}
import permissions.Permissions
import play.api.libs.json.{JsValue, Json, OWrites}
import switchboard.SwitchManager
import util.{Acl, AclJson}
object Defaults {
implicit val jsonFormat: OWrites[Defaults] = Json.writes[Defaults]
}
case class Defaults(
dev: Boolean,
env: String,
editions: Seq[String],
email: String,
avatarUrl: Option[String],
firstName: String,
lastName: String,
sentryPublicDSN: String,
mediaBaseUrl: String,
apiBaseUrl: String,
switches: JsValue,
acl: AclJson,
collectionCap: Int,
navListCap: Int,
navListType: String,
collectionMetadata: Iterable[Metadata],
userData: Option[UserDataForDefaults],
capiLiveUrl: String = "",
capiPreviewUrl: String = "",
availableTerritories: Iterable[TargetedTerritory] = Nil,
availableTemplates: List[CuratedPlatformDefinition],
telemetryUrl: String
)
class DefaultsController(
val acl: Acl,
val isDev: Boolean,
val deps: BaseFaciaControllerComponents
) extends BaseFaciaController(deps) {
def configuration = AccessAPIAuthAction { implicit request =>
val hasBreakingNews = acl.testUser(
Permissions.BreakingNewsAlert,
"facia-tool-allow-breaking-news-for-all"
)(request.user.email)
val hasConfigureFronts = acl.testUser(
Permissions.ConfigureFronts,
"facia-tool-allow-config-for-all"
)(request.user.email)
val hasEditionsPermissions = acl.testUser(
Permissions.EditEditions,
"facia-tool-allow-edit-editorial-fronts-for-all"
)(request.user.email)
val acls = AclJson(
fronts = Map(config.faciatool.breakingNewsFront -> hasBreakingNews),
editions =
Map(config.faciatool.canEditEditions -> hasEditionsPermissions),
permissions = Map("configure-config" -> hasConfigureFronts)
)
Cached(60) {
Ok(
Json.toJson(
Defaults(
isDev,
config.environment.stage,
Seq("uk", "us", "au"),
request.user.email,
request.user.avatarUrl,
request.user.firstName,
request.user.lastName,
config.sentry.publicDSN,
config.media.baseUrl.get,
config.media.apiUrl,
SwitchManager.getSwitchesAsJson(),
acls,
config.facia.collectionCap,
config.facia.navListCap,
config.facia.navListType,
Metadata.tags.map { case (_, meta) =>
meta
},
None,
availableTerritories = TargetedTerritory.allTerritories,
availableTemplates =
EditionsAppTemplates.getAvailableTemplates ++ FeastAppTemplates.getAvailableTemplates,
telemetryUrl = telemetryUrl
)
)
)
}
}
}