kahuna/app/lib/KahunaConfig.scala (73 lines of code) (raw):

package lib import com.gu.mediaservice.lib.auth.Permissions.Pinboard import com.gu.mediaservice.lib.auth.SimplePermission import com.gu.mediaservice.lib.config.{CommonConfig, GridConfigResources} import play.api.libs.json._ case class ScriptToLoad( host: String, path: String, async: Option[Boolean], permission: Option[SimplePermission], shouldLoadWhenIFramed: Option[Boolean] ) class KahunaConfig(resources: GridConfigResources) extends CommonConfig(resources) { val rootUri: String = services.kahunaBaseUri val mediaApiUri: String = services.apiBaseUri val authUri: String = services.authBaseUri val sentryDsn: Option[String] = stringOpt("sentry.dsn").filterNot(_.isEmpty) val thumbOrigin: String = string("origin.thumb") val fullOrigin: String = string("origin.full") val cropOrigin: String = string("origin.crops") val imageOrigin: String = string("origin.images") val costFilterLabel: Option[String] = stringOpt("costFilter.label") val costFilterChargeable: Option[Boolean] = booleanOpt("costFilter.chargeable") val additionalLinks: Seq[AdditionalLink] = configuration.getOptional[Seq[AdditionalLink]]("links.additional").getOrElse(Seq.empty) val feedbackFormLink: Option[String]= stringOpt("links.feedbackForm").filterNot(_.isEmpty) val usageRightsHelpLink: Option[String]= stringOpt("links.usageRightsHelp").filterNot(_.isEmpty) val invalidSessionHelpLink: Option[String]= stringOpt("links.invalidSessionHelp").filterNot(_.isEmpty) val supportEmail: Option[String]= stringOpt("links.supportEmail").filterNot(_.isEmpty) val telemetryUri: Option[String] = stringOpt("links.telemetryUri").filterNot(_.isEmpty) val homeLinkHtml: Option[String] = stringOpt("branding.homeLinkHtml").filterNot(_.isEmpty) val canDownloadCrop: Boolean = boolean("canDownloadCrop") val restrictDownload: Option[Boolean] = booleanOpt("restrictDownload") val useReaper: Option[Boolean] = booleanOpt("useReaper") // interim permissions filter configuration settings val usePermissionsFilter: Option[Boolean] = booleanOpt("usePermissionsFilter") val usageRightsSummary: Option[Boolean] = booleanOpt("usageRightsSummary") val permissionsDefault: Option[String] = stringOpt("permissionsDefault").filterNot(_.isEmpty) val interimFilterOptions: Seq[InterimFilterOption] = configuration.getOptional[Seq[InterimFilterOption]]("interimFilterOptions").getOrElse(Seq.empty) val showDenySyndicationWarning: Option[Boolean] = booleanOpt("showDenySyndicationWarning") val showSendToPhotoSales: Option[Boolean] = booleanOpt("showSendToPhotoSales") val frameAncestors: Set[String] = getStringSet("security.frameAncestors") val connectSources: Set[String] = getStringSet("security.connectSources") ++ maybeIngestBucket.map { ingestBucket => if (isDev) "https://localstack.media.local.dev-gutools.co.uk" else s"https://$ingestBucket.s3.$awsRegion.amazonaws.com" } val fontSources: Set[String] = getStringSet("security.fontSources") val imageSources: Set[String] = getStringSet("security.imageSources") val scriptsToLoad: List[ScriptToLoad] = getConfigList("scriptsToLoad").map(entry => ScriptToLoad( host = entry.getString("host"), path = entry.getString("path"), async = if (entry.hasPath("async")) Some(entry.getBoolean("async")) else None, // FIXME ideally the below would not hardcode reference to pinboard - hopefully future iterations of the pluggable authorisation will support evaluating permissions without a corresponding case object permission = if (entry.hasPath("permission") && entry.getString("permission") == "pinboard") Some(Pinboard) else None, shouldLoadWhenIFramed = if (entry.hasPath("shouldLoadWhenIFramed")) Some(entry.getBoolean("shouldLoadWhenIFramed")) else None, )) val metadataTemplates: Seq[MetadataTemplate] = configuration.get[Seq[MetadataTemplate]]("metadata.templates") val announcements: Seq[Announcement] = configuration.getOptional[Seq[Announcement]]("announcements").getOrElse(Seq.empty) val imageTypes: Seq[String] = configuration.getOptional[Seq[String]]("imageTypes").getOrElse(Seq.empty) //BBC custom warning text val warningTextHeader: String = configuration.getOptional[String]("warningText.header") .getOrElse("This image can be used, but has warnings:") val warningTextHeaderNoRights: String = configuration.getOptional[String]("warningText.headerNoRights") .getOrElse("This image can be used, but has warnings:") val unusableTextHeader: String = configuration.getOptional[String]("warningText.unusableHeader") .getOrElse("Unusable image") val denySyndicationTextHeader: String = configuration.getOptional[String]("warningText.denySyndicationHeader") .getOrElse("Syndication denied") val enableWarningFlags: Boolean = configuration.getOptional[Map[String, String]]("warningText.imagePreviewFlag").isDefined val imagePreviewFlagAlertCopy: String = configuration.getOptional[String]("warningText.imagePreviewFlag.alertCopy") .getOrElse("Not configured") val imagePreviewFlagWarningCopy: String = configuration.getOptional[String]("warningText.imagePreviewFlag.warningCopy") .getOrElse("Not configured") val imagePreviewFlagLeaseAttachedCopy: String = configuration.getOptional[String]("warningText.imagePreviewFlag.leaseAttachedCopy") .getOrElse("Not configured") val shouldUploadStraightToBucket: Boolean = maybeIngestBucket.isDefined }