diff --git a/app/controllers/Application.scala b/app/controllers/Application.scala index 2414c4e..76a079b 100644 --- a/app/controllers/Application.scala +++ b/app/controllers/Application.scala @@ -6,6 +6,7 @@ import com.github.nscala_time.time.Imports._ import com.google.inject.Inject import com.google.inject.name.Named import models._ +import modules.TemplateCustomization import play.api.Logger import play.api.data.Forms._ import play.api.data._ @@ -55,7 +56,8 @@ class Application @Inject() ( libraryTagAssignmentsService: LibraryTagAssignmentsService, protected val dbConfigProvider: DatabaseConfigProvider, val messagesApi: MessagesApi, - val env: AuthEnv + val env: AuthEnv, + val templateCustomization: TemplateCustomization ) extends AuthenticatedController with HasDatabaseConfigProvider[models.profile.type]{ import ApplicationFormats._ diff --git a/app/controllers/AuthController.scala b/app/controllers/AuthController.scala index 6480363..29cc59a 100644 --- a/app/controllers/AuthController.scala +++ b/app/controllers/AuthController.scala @@ -7,6 +7,7 @@ import com.mohiva.play.silhouette.api._ import com.mohiva.play.silhouette.api.util.Clock import com.mohiva.play.silhouette.impl.authenticators.CookieAuthenticator import models.User +import modules.TemplateCustomization import play.api.data.Form import play.api.data.Forms.{email => _, _} import play.api.i18n.{Messages, MessagesApi} @@ -20,6 +21,7 @@ final case class LoginRequest(username: String, password: String, rememberMe: Bo class AuthController @Inject() ( val messagesApi: MessagesApi, val env: Environment[User, CookieAuthenticator], + val templateCustomization: TemplateCustomization, clock: Clock, credentialsVerificationService: CredentialsVerificationService, userService: UserService diff --git a/app/controllers/AuthenticatedController.scala b/app/controllers/AuthenticatedController.scala index b109406..5aa5523 100644 --- a/app/controllers/AuthenticatedController.scala +++ b/app/controllers/AuthenticatedController.scala @@ -2,8 +2,10 @@ package controllers import com.mohiva.play.silhouette.api.Silhouette import com.mohiva.play.silhouette.impl.authenticators.CookieAuthenticator +import com.typesafe.config.Config import models.User -import play.api.mvc.{Result, RequestHeader, Results} +import modules.TemplateCustomization +import play.api.mvc.{RequestHeader, Result, Results} import views.html.DefaultRequest import scala.concurrent.Future @@ -19,6 +21,7 @@ trait AuthenticatedControllerLowPriorityImplicits[T, C]{ abstract class AuthenticatedController extends Silhouette[User, CookieAuthenticator] with AuthenticatedControllerLowPriorityImplicits[User, CookieAuthenticator]{ + protected implicit def templateCustomization: TemplateCustomization override protected def onNotAuthenticated(request: RequestHeader): Option[Future[Result]] = Some(Future.successful(Redirect( routes.AuthController.signIn(request.path+"?"+request.rawQueryString) @@ -30,4 +33,6 @@ abstract class AuthenticatedController extends Silhouette[User, CookieAuthentica def AdminAction: SecuredActionBuilder = ??? + protected implicit def mainTemplateData: MainTemplateData = MainTemplateData.createMainTemplateData + } \ No newline at end of file diff --git a/app/controllers/DependencyCheckReportsProcessor.scala b/app/controllers/DependencyCheckReportsProcessor.scala index 6799607..aa68b27 100644 --- a/app/controllers/DependencyCheckReportsProcessor.scala +++ b/app/controllers/DependencyCheckReportsProcessor.scala @@ -6,7 +6,7 @@ import com.google.inject.name.Named import com.ysoft.odc.Checks._ import com.ysoft.odc._ import com.ysoft.odc.statistics.FailedProjects -import modules.{LogSmell, LogSmellChecks} +import modules.{LogSmell, LogSmellChecks, TemplateCustomization} import org.joda.time.DateTimeConstants import play.api.Logger import play.api.i18n.{I18nSupport, MessagesApi} @@ -25,8 +25,10 @@ final class DependencyCheckReportsProcessor @Inject() ( dependencyCheckReportsParser: DependencyCheckReportsParser, @Named("missing-GAV-exclusions") missingGAVExclusions: MissingGavExclusions, @Named("log-smells") logSmells: LogSmellChecks, - val messagesApi: MessagesApi + val messagesApi: MessagesApi, + templateCustomization: TemplateCustomization ) extends I18nSupport { + private implicit def mainTemplateData: MainTemplateData = MainTemplateData.createMainTemplateData(templateCustomization) private def parseDateTime(dt: String): DateTime = { if(dt.forall(_.isDigit)){ diff --git a/app/controllers/MainTemplateData.scala b/app/controllers/MainTemplateData.scala new file mode 100644 index 0000000..b0f7f3e --- /dev/null +++ b/app/controllers/MainTemplateData.scala @@ -0,0 +1,9 @@ +package controllers + +import modules.TemplateCustomization + +object MainTemplateData{ + implicit def createMainTemplateData(implicit templateCustomization: TemplateCustomization): MainTemplateData = MainTemplateData(templateCustomization) +} + +case class MainTemplateData(templateCustomization: TemplateCustomization) \ No newline at end of file diff --git a/app/controllers/Notifications.scala b/app/controllers/Notifications.scala index eaf7a0d..cf614da 100644 --- a/app/controllers/Notifications.scala +++ b/app/controllers/Notifications.scala @@ -7,6 +7,7 @@ import com.ysoft.concurrent.FutureLock._ import com.ysoft.odc.statistics.{FailedProjects, LibDepStatistics} import com.ysoft.odc.{Absolutizer, ArtifactFile, ArtifactItem, SetDiff} import models.{EmailMessageId, ExportedVulnerability} +import modules.TemplateCustomization import play.api.i18n.MessagesApi import play.api.libs.Crypto import play.api.mvc.Action @@ -27,7 +28,8 @@ class Notifications @Inject()( emailExportServiceOption: Option[EmailExportService], odcService: OdcService, absolutizer: Absolutizer, - val env: AuthEnv + val env: AuthEnv, + val templateCustomization: TemplateCustomization )(implicit val messagesApi: MessagesApi, executionContext: ExecutionContext) extends AuthenticatedController { private val versions = Map[String, Int]() diff --git a/app/controllers/Statistics.scala b/app/controllers/Statistics.scala index 33891c3..6a9058c 100644 --- a/app/controllers/Statistics.scala +++ b/app/controllers/Statistics.scala @@ -9,6 +9,7 @@ import com.ysoft.odc._ import controllers.DependencyCheckReportsParser.ResultWithSelection import controllers.api.{ApiConfig, ApiController} import models.LibraryTag +import modules.TemplateCustomization import org.joda.time.DateTime import play.api.i18n.MessagesApi import play.api.libs.json._ @@ -73,7 +74,8 @@ class Statistics @Inject()( vulnerabilityNotificationService: VulnerabilityNotificationService, issueTrackerServiceOption: Option[IssueTrackerService], protected val apiConfig: ApiConfig, - val env: AuthEnv + val env: AuthEnv, + val templateCustomization: TemplateCustomization )(implicit val messagesApi: MessagesApi, executionContext: ExecutionContext) extends AuthenticatedController with ApiController { private val versions = Map[String, Int]() diff --git a/app/modules/ConfigModule.scala b/app/modules/ConfigModule.scala index 0567485..181355a 100644 --- a/app/modules/ConfigModule.scala +++ b/app/modules/ConfigModule.scala @@ -86,6 +86,7 @@ class FileCacheApi(path: Path) extends CacheApi{ } +case class TemplateCustomization(brandHtml: Option[String]) class ConfigModule extends Module { @@ -156,7 +157,8 @@ class ConfigModule extends Module { bind[ExecutionContext].qualifiedWith("email-sending").toInstance(ExecutionContext.fromExecutor(Executors.newSingleThreadExecutor())), bind[LogSmellChecks].qualifiedWith("log-smells").toInstance(LogSmellChecks(configuration.underlying.getAs[Map[String, LogSmell]]("yssdc.logSmells").getOrElse(Map()))), bind[Projects].to(parseProjects(configuration)), - bind[ApiConfig].to(parseApiConfig(configuration)) + bind[ApiConfig].to(parseApiConfig(configuration)), + bind[TemplateCustomization].to(TemplateCustomization(configuration.underlying.getAs[String]("app.brand"))) ) ++ configuration.underlying.getAs[Absolutizer]("app").map(a => bind[Absolutizer].toInstance(a)) ++ configuration.getString("play.cache.path").map(cachePath => bind[CacheApi].toInstance(new FileCacheApi(Paths.get(cachePath)))) ++ diff --git a/app/views/auth/signIn.scala.html b/app/views/auth/signIn.scala.html index e8db588..b3aa5e4 100644 --- a/app/views/auth/signIn.scala.html +++ b/app/views/auth/signIn.scala.html @@ -1,5 +1,5 @@ @import helper._ -@(loginForm: Form[LoginRequest], callback: String/*, socialProviderRegistry: SocialProviderRegistry*/)(implicit requestHeader: DefaultRequest, messages: Messages) +@(loginForm: Form[LoginRequest], callback: String/*, socialProviderRegistry: SocialProviderRegistry*/)(implicit requestHeader: DefaultRequest, messages: Messages, mainTemplateData: MainTemplateData) @main("Log in"){ @form(routes.AuthController.authenticate(callback)){ diff --git a/app/views/conditionalList.scala.html b/app/views/conditionalList.scala.html index 9516dbe..0a7fc53 100644 --- a/app/views/conditionalList.scala.html +++ b/app/views/conditionalList.scala.html @@ -1,4 +1,4 @@ -@(list: Traversable[_], name: String, id: String, collapse: Boolean = false, allowSnoozes: Boolean = true, versions: Map[String, Int])(content: => Html)(implicit rh: DefaultRequest, snoozes: SnoozesInfo, messages: Messages) +@(list: Traversable[_], name: String, id: String, collapse: Boolean = false, allowSnoozes: Boolean = true, versions: Map[String, Int])(content: => Html)(implicit rh: DefaultRequest, snoozes: SnoozesInfo, messages: Messages, mainTemplateData: MainTemplateData) @if(list.nonEmpty){ @defining(snoozes(id)){ case si => @if(allowSnoozes) { diff --git a/app/views/dependencies.scala.html b/app/views/dependencies.scala.html index 35a10f4..b17cb06 100644 --- a/app/views/dependencies.scala.html +++ b/app/views/dependencies.scala.html @@ -8,7 +8,7 @@ tagsLink: Set[Int] => Call, classificationLink: Option[Boolean] => Call, noTagLink: Boolean => Call -)(implicit header: DefaultRequest) +)(implicit header: DefaultRequest, mainTemplateData: MainTemplateData) @main(s"${requiredClassification match{case Some(true) => "Classified" case Some(false) => "Unclassified" case None => "All"}} dependencies (${selectedDependencies.size})") {
diff --git a/app/views/groupedDependencyList.scala.html b/app/views/groupedDependencyList.scala.html index 646ad9e..202d712 100644 --- a/app/views/groupedDependencyList.scala.html +++ b/app/views/groupedDependencyList.scala.html @@ -1,4 +1,4 @@ -@(name: String, id: String, collapse: Boolean = false, allowSnoozes: Boolean = true, versions: Map[String, Int])(list: Seq[GroupedDependency])(implicit rh: DefaultRequest, snoozes: SnoozesInfo, messages: Messages) +@(name: String, id: String, collapse: Boolean = false, allowSnoozes: Boolean = true, versions: Map[String, Int])(list: Seq[GroupedDependency])(implicit rh: DefaultRequest, snoozes: SnoozesInfo, messages: Messages, mainTemplateData: MainTemplateData) @conditionalList(list, name, id, collapse = collapse, allowSnoozes = allowSnoozes, versions = versions){ @for(dep <- list){ diff --git a/app/views/index.scala.html b/app/views/index.scala.html index b3bde53..ff1a540 100644 --- a/app/views/index.scala.html +++ b/app/views/index.scala.html @@ -9,7 +9,7 @@ //librariesForTagsWithWarning: SortedMap[(Int, LibraryTag), Seq[(Int, Library)]], lastRefreshTime: DateTime, versions: Map[String, Int] -)(implicit req: DefaultRequest, snoozes: SnoozesInfo , messages: Messages) +)(implicit req: DefaultRequest, snoozes: SnoozesInfo, messages: Messages, mainTemplateData: MainTemplateData) @import com.ysoft.odc.Confidence @import helper._ diff --git a/app/views/library.scala.html b/app/views/library.scala.html index 0c93947..ae9e55e 100644 --- a/app/views/library.scala.html +++ b/app/views/library.scala.html @@ -1,4 +1,4 @@ -@(dep: GroupedDependency, selectorOption: Option[String])(implicit req: DefaultRequest, messages: Messages) +@(dep: GroupedDependency, selectorOption: Option[String])(implicit req: DefaultRequest, messages: Messages, mainTemplateData: MainTemplateData) @main("Library details"){ @libraryIdentificationList(dep, None, addLink = false, addButtons = false) @dependencyDetailsInner(depPrefix = "library-single-", dep = dep, selectorOption = selectorOption) diff --git a/app/views/main.scala.html b/app/views/main.scala.html index aa4ce6e..c95dca2 100644 --- a/app/views/main.scala.html +++ b/app/views/main.scala.html @@ -1,5 +1,5 @@ @import helper._ -@(title: String, headExtension: Html = Html(""), projectsOption: Option[(ProjectsWithSelection, Option[String] => Call)] = None)(content: Html)(implicit header: DefaultRequest) +@(title: String, headExtension: Html = Html(""), projectsOption: Option[(ProjectsWithSelection, Option[String] => Call)] = None)(content: Html)(implicit header: DefaultRequest, mainTemplateData: MainTemplateData) @@ -40,7 +40,7 @@ - @* YSSDC *@ + @for(brand <- mainTemplateData.templateCustomization.brandHtml){@Html(brand)}