app/com/gu/viewer/controllers/Application.scala (40 lines of code) (raw):

package com.gu.viewer.controllers import com.gu.pandomainauth.PanDomainAuthSettingsRefresher import com.gu.viewer.config.AppConfig import com.gu.viewer.logging.Loggable import com.gu.viewer.views.html import play.api.libs.ws.WSClient import play.api.mvc._ import play.filters.csrf.CSRF class Application( val controllerComponents: ControllerComponents, val wsClient: WSClient, val config: AppConfig, val panDomainSettings: PanDomainAuthSettingsRefresher ) extends BaseController with Loggable with PanDomainAuthActions { def oauthCallback: Action[AnyContent] = Action.async { implicit request => processOAuthCallback() } def index = AuthAction { Redirect("/live/uk") } def previewViewer = (path: String) => { viewer("preview", path, "preview") } def liveViewer = (path: String) => { viewer("live", path, "live") } def viewer(target: String, path: String, previewEnv: String) = AuthAction { implicit request => val protocol = if (request.secure) "https" else "http" val viewerHost = target match { case "preview" => config.previewHost case _ => config.liveHost } val actualUrl = s"$protocol://$viewerHost/$path" // TODO rename viewerUrl to iframeSrc and ideally eliminate the proxy all together for preview (following https://github.com/guardian/frontend/pull/27012) val viewerUrl = routes.Proxy.proxy(target, path).path() val proxyBase = routes.Proxy.proxy(target, "").absoluteURL() val composerUrl = config.composerReturn + "/" + path Ok(html.viewer(viewerUrl, actualUrl, previewEnv, composerUrl, proxyBase, path, config.googleTrackingId, CSRF.getToken)) } }