app/controllers/App.scala (56 lines of code) (raw):

package controllers import com.gu.pandomainauth.PanDomainAuthSettingsRefresher import model.ClientConfig import play.api.libs.json.Json import play.api.mvc.{BaseController, ControllerComponents} import repositories.{TagRepository, TagSearchCriteria} import play.api.Logging import services.Config import com.gu.tagmanagement.TagType import permissions._ import play.api.libs.ws.WSClient import scala.collection.mutable.ListBuffer import scala.concurrent.{ExecutionContext, Future} class App( val wsClient: WSClient, override val controllerComponents: ControllerComponents, val panDomainSettings: PanDomainAuthSettingsRefresher )( implicit ec: ExecutionContext ) extends BaseController with PanDomainAuthActions with Logging { def index(id: String = "") = AuthAction.async { req => val jsFileName = "build/app.js" val jsLocation = sys.env.get("JS_ASSET_HOST") match { case Some(assetHost) => assetHost + jsFileName case None => routes.Assets.versioned(jsFileName).toString } val userPermissions = Permissions.getPermissionsForUser(req.user.email) val allTags = TagType.list.map(_.name) var permittedTags = ListBuffer[String]() for (tag <- allTags) { TagTypePermissionMap(tag) match { case Some(permissionDefinition) => if (userPermissions.get(permissionDefinition.name).contains(true)) { permittedTags += tag } case None => permittedTags += tag } } val clientConfig = ClientConfig( username = req.user.email, capiUrl = Config().capiUrl, capiPreviewUrl = "/support/previewCapi", capiKey = Config().capiKey, tagTypes = allTags, permittedTagTypes = permittedTags.toList, permissions = userPermissions, reauthUrl = "/reauth", tagSearchPageSize = Config().tagSearchPageSize ) val result = views.html.Application.app("Tag Manager", jsLocation, Json.toJson(clientConfig).toString()) Future.successful(Ok(result)) } }