app/AppComponents.scala (61 lines of code) (raw):

import com.amazonaws.auth._ import com.amazonaws.auth.profile.ProfileCredentialsProvider import com.amazonaws.regions.Regions import com.amazonaws.services.ec2.{AmazonEC2, AmazonEC2ClientBuilder} import com.amazonaws.services.s3.{AmazonS3, AmazonS3ClientBuilder} import com.amazonaws.services.simpleemail.{AmazonSimpleEmailService, AmazonSimpleEmailServiceClientBuilder} import com.gu.pandomainauth.{PanDomainAuthSettingsRefresher, S3BucketLoader} import com.gu.viewer.aws.AwsInstanceTags import com.gu.viewer.config.AppConfig import com.gu.viewer.controllers.{Application, Email, Management, Proxy} import com.gu.viewer.logging.RequestLoggingFilter import com.gu.viewer.proxy.{LiveProxy, PreviewProxy, ProxyClient} import controllers.AssetsComponents import play.api.{BuiltInComponentsFromContext, Mode} import play.api.ApplicationLoader.Context import play.api.libs.ws.ahc.AhcWSComponents import play.api.mvc.EssentialFilter import play.api.routing.Router import play.filters.csrf.CSRFComponents import router.Routes class AppComponents(context: Context) extends BuiltInComponentsFromContext(context) with AssetsComponents with CSRFComponents with AhcWSComponents { def creds: AWSCredentialsProvider = new AWSCredentialsProviderChain( new EnvironmentVariableCredentialsProvider, new SystemPropertiesCredentialsProvider, new ProfileCredentialsProvider("composer"), InstanceProfileCredentialsProvider.getInstance() ) val region: Regions = Regions.EU_WEST_1 val ec2Client: AmazonEC2 = AmazonEC2ClientBuilder.standard().withRegion(region).withCredentials(creds).build() val s3Client: AmazonS3 = AmazonS3ClientBuilder.standard().withRegion(region).withCredentials(creds).build() val emailClient: AmazonSimpleEmailService = AmazonSimpleEmailServiceClientBuilder.standard().withRegion(region).withCredentials(creds).build() val tags = new AwsInstanceTags(ec2Client) val config = new AppConfig(tags, context.initialConfiguration) val panDomainSettings: PanDomainAuthSettingsRefresher = PanDomainAuthSettingsRefresher( domain = config.pandaDomain, system = "viewer", S3BucketLoader.forAwsSdkV1(s3Client, "pan-domain-auth-settings") ) val requestLoggingFilter = new RequestLoggingFilter(materializer, panDomainSettings) override def httpFilters: Seq[EssentialFilter] = Seq(requestLoggingFilter, csrfFilter) val proxyClient = new ProxyClient(wsClient, config) val liveProxy = new LiveProxy(proxyClient, config) val previewProxy = new PreviewProxy(proxyClient, config) val applicationController = new Application(controllerComponents, wsClient, config, panDomainSettings) val managementController = new Management(controllerComponents) val proxyController = new Proxy(controllerComponents, wsClient, previewProxy, liveProxy, config, panDomainSettings) val emailController = new Email(controllerComponents, wsClient, emailClient, config, panDomainSettings) override def router: Router = new Routes( httpErrorHandler, applicationController, managementController, proxyController, emailController, assets ) }