app/AppComponents.scala (59 lines of code) (raw):
import com.gu.AppIdentity
import com.gu.atom.play.ReindexController
import com.gu.pandomainauth.{PanDomainAuthSettingsRefresher, S3BucketLoader}
import config.{AWS, Config}
import controllers.{AssetsComponents, ExplainerReindexController, PanDomainAuthActions}
import db.{AtomDataStores, AtomWorkshopDB, ExplainerDB}
import play.api.ApplicationLoader.Context
import play.api.{BuiltInComponentsFromContext, Configuration}
import play.api.libs.ws.WSClient
import play.api.libs.ws.ahc.AhcWSComponents
import play.api.mvc.{ControllerComponents, EssentialFilter}
import play.filters.HttpFiltersComponents
import router.Routes
import services.{AtomPublishers, Permissions}
class AppComponents(context: Context, identity: AppIdentity)
extends BuiltInComponentsFromContext(context) with AhcWSComponents with AssetsComponents with HttpFiltersComponents {
lazy val config = new Config(context.initialConfiguration, identity)
override lazy val router = new Routes(httpErrorHandler, appController, healthcheckController, loginController, assets, supportController, reindex, explainerReindex)
override lazy val httpFilters: Seq[EssentialFilter] = super.httpFilters.filterNot(_ == allowedHostsFilter)
lazy val appPermissions = new Permissions(config.effectiveStage)
private val pandaAuthActions = new PanDomainAuthActions {
override def authCallbackUrl: String = config.pandaAuthCallback
override def wsClient: WSClient = AppComponents.this.wsClient
override def controllerComponents: ControllerComponents = AppComponents.this.controllerComponents
override val panDomainSettings: PanDomainAuthSettingsRefresher = PanDomainAuthSettingsRefresher(
domain = config.pandaDomain,
system = config.pandaSystem,
S3BucketLoader.forAwsSdkV1(AWS.S3Client, "pan-domain-auth-settings")
)
override def permissions: Permissions = appPermissions
}
lazy val atomWorkshopDB = new AtomWorkshopDB()
lazy val explainerDB = new ExplainerDB()
lazy val atomDataStores = new AtomDataStores(config)
lazy val atomPublishers = new AtomPublishers(config)
lazy val appController = new controllers.App(controllerComponents, config, pandaAuthActions, atomWorkshopDB, atomDataStores, atomPublishers, appPermissions)
lazy val loginController = new controllers.Login(controllerComponents, wsClient, pandaAuthActions)
lazy val healthcheckController = new controllers.Healthcheck(controllerComponents)
lazy val supportController = new controllers.Support(controllerComponents, wsClient, config, pandaAuthActions)
lazy val reindex = new ReindexController(
atomDataStores.previewDataStore,
atomDataStores.publishedDataStore,
atomDataStores.reindexPreview,
atomDataStores.reindexPublished,
Configuration(config.config),
controllerComponents,
actorSystem
)
lazy val explainerReindex = new ExplainerReindexController(
wsClient,
explainerDB,
atomDataStores.explainerPreviewDataStore,
atomDataStores.explainerPublishedDataStore,
atomDataStores.reindexPreview,
atomDataStores.reindexPublished,
config,
controllerComponents
)(actorSystem.dispatcher)
}