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)}
diff --git a/app/views/notifications/index.scala.html b/app/views/notifications/index.scala.html
index 03c447c..590e112 100644
--- a/app/views/notifications/index.scala.html
+++ b/app/views/notifications/index.scala.html
@@ -1,5 +1,5 @@
@import helper._
-@(projects: Seq[ReportInfo], watchedProjects: Set[String], failedReports: Set[String], filter: Option[String])(implicit req: DefaultRequest)
+@(projects: Seq[ReportInfo], watchedProjects: Set[String], failedReports: Set[String], filter: Option[String])(implicit req: DefaultRequest, mainTemplateData: MainTemplateData)
@button(action: Call)(label: String) = {
@form(action, 'style -> "display: inline-block"){
@CSRF.formField
diff --git a/app/views/snoozeForm.scala.html b/app/views/snoozeForm.scala.html
index 688df4a..8e1330f 100644
--- a/app/views/snoozeForm.scala.html
+++ b/app/views/snoozeForm.scala.html
@@ -1,4 +1,4 @@
-@(id: String, si: SnoozeInfo, versions: Map[String, Int])(implicit rh: RequestHeader, snoozes: SnoozesInfo, messages: Messages)
+@(id: String, si: SnoozeInfo, versions: Map[String, Int])(implicit rh: RequestHeader, snoozes: SnoozesInfo, messages: Messages, mainTemplateData: MainTemplateData)
@import helper._
@form((routes.Application.snooze(id, versions): Call).withFragment(id), 'id -> s"$id-snoozing", 'class -> s"snoozing collapse${if(si.shouldExpandForm) "in" else ""}") {
diff --git a/app/views/snoozesList.scala.html b/app/views/snoozesList.scala.html
index 1ba3743..6849ded 100644
--- a/app/views/snoozesList.scala.html
+++ b/app/views/snoozesList.scala.html
@@ -1,4 +1,4 @@
-@(unused_id: String, si: SnoozeInfo, versions: Map[String, Int])(implicit requestHeader: RequestHeader)
+@(unused_id: String, si: SnoozeInfo, versions: Map[String, Int])(implicit requestHeader: RequestHeader, mainTemplateData: MainTemplateData)
@import helper._
@if(si.isSnoozed){
Snooze details
diff --git a/app/views/statistics/allLibraries.scala.html b/app/views/statistics/allLibraries.scala.html
index 7b8ccae..49c87d6 100644
--- a/app/views/statistics/allLibraries.scala.html
+++ b/app/views/statistics/allLibraries.scala.html
@@ -3,7 +3,7 @@
projectsWithSelection: ProjectsWithSelection,
allDependencies: Seq[GroupedDependency],
failedProjects: FailedProjects
-)(implicit header: DefaultRequest)
+)(implicit header: DefaultRequest, mainTemplateData: MainTemplateData)
@main(
title = s"All libraries for ${projectsWithSelection.projectNameText}",
diff --git a/app/views/statistics/basic.scala.html b/app/views/statistics/basic.scala.html
index 0d59ed3..b38b335 100644
--- a/app/views/statistics/basic.scala.html
+++ b/app/views/statistics/basic.scala.html
@@ -4,7 +4,7 @@
lds: LibDepStatistics,
tagStatistics: Seq[TagStatistics],
parsedReports: DependencyCheckReportsParser.Result
-)(implicit messagesApi: MessagesApi, requestHeader: DefaultRequest)
+)(implicit messagesApi: MessagesApi, requestHeader: DefaultRequest, mainTemplateData: MainTemplateData)
@import com.ysoft.odc.CWE
@import play.api.libs.json.{JsNull, JsString}
@import scala.language.implicitConversions
diff --git a/app/views/statistics/vulnerabilities.scala.html b/app/views/statistics/vulnerabilities.scala.html
index 0262d88..5023dc7 100644
--- a/app/views/statistics/vulnerabilities.scala.html
+++ b/app/views/statistics/vulnerabilities.scala.html
@@ -2,7 +2,7 @@
projectsWithSelection: ProjectsWithSelection,
tagOption: Option[(Int, LibraryTag)],
statistics: LibDepStatistics
-)(implicit messagesApi: MessagesApi, requestHeader: DefaultRequest)
+)(implicit messagesApi: MessagesApi, requestHeader: DefaultRequest, mainTemplateData: MainTemplateData)
@main(
title = s"details for ${projectsWithSelection.projectNameText}${tagOption.map(_._2.name).fold("")(" and tag "+_)}",
diff --git a/app/views/statistics/vulnerabilitiesForLibrary.scala.html b/app/views/statistics/vulnerabilitiesForLibrary.scala.html
index 983e446..5c0ae8e 100644
--- a/app/views/statistics/vulnerabilitiesForLibrary.scala.html
+++ b/app/views/statistics/vulnerabilitiesForLibrary.scala.html
@@ -2,7 +2,7 @@
vulnsAndVersionOption: Option[(Traversable[Vulnerability], String)],
cpes: Seq[String],
isDbOld: Boolean
-)(implicit header: DefaultRequest)
+)(implicit header: DefaultRequest, mainTemplateData: MainTemplateData)
@import helper._
@main(
title = "Vulnerabilities for a library"
diff --git a/app/views/statistics/vulnerability.scala.html b/app/views/statistics/vulnerability.scala.html
index 5c1e402..0af97e0 100644
--- a/app/views/statistics/vulnerability.scala.html
+++ b/app/views/statistics/vulnerability.scala.html
@@ -7,7 +7,7 @@
affectedLibraries: Set[PlainLibraryIdentifier],
issueOption: Option[(ExportedVulnerability[String], String)],
failedProjects: FailedProjects
-)(implicit header: DefaultRequest)
+)(implicit header: DefaultRequest, mainTemplateData: MainTemplateData)
@section = @{views.html.genericSection("vuln")("h2") _}
@main(
title = s"vulnerability ${vulnerability.name} for ${projectsWithSelection.projectNameText}",
diff --git a/app/views/statistics/vulnerabilityNotFound.scala.html b/app/views/statistics/vulnerabilityNotFound.scala.html
index b33061d..47e751c 100644
--- a/app/views/statistics/vulnerabilityNotFound.scala.html
+++ b/app/views/statistics/vulnerabilityNotFound.scala.html
@@ -4,7 +4,7 @@
name: String,
failedProjects: FailedProjects,
issueOption: Option[(ExportedVulnerability[String], String)]
-)(implicit header: DefaultRequest)
+)(implicit header: DefaultRequest, mainTemplateData: MainTemplateData)
@main(
title = s"Unknown vulnerability $name for ${projectsWithSelection.projectNameText}",
diff --git a/app/views/statistics/vulnerableLibraries.scala.html b/app/views/statistics/vulnerableLibraries.scala.html
index 1ac7865..7c7c31c 100644
--- a/app/views/statistics/vulnerableLibraries.scala.html
+++ b/app/views/statistics/vulnerableLibraries.scala.html
@@ -4,7 +4,7 @@
allDependenciesCount: Int,
dependenciesWithSuppressedVulnerabilitiesOnlyCount: Int,
reports: DependencyCheckReportsParser.Result
-)(implicit header: DefaultRequest)
+)(implicit header: DefaultRequest, mainTemplateData: MainTemplateData)
@main(
title = s"Vulnerable libraries for ${projectsWithSelection.projectNameText} (${vulnerableDependencies.size} deps, ${vulnerableDependencies.flatMap(_.cpeIdentifiers.map(_.toCpeIdentifierOption.get)).toSet.size} CPEs)",
diff --git a/app/views/tagsImport.scala.html b/app/views/tagsImport.scala.html
index 0390815..c3889b1 100644
--- a/app/views/tagsImport.scala.html
+++ b/app/views/tagsImport.scala.html
@@ -1,4 +1,4 @@
-@(f: Form[String])(implicit requestHeader: DefaultRequest, messages: Messages)
+@(f: Form[String])(implicit requestHeader: DefaultRequest, messages: Messages, mainTemplateData: MainTemplateData)
@import helper._
@main("Data import"){
@form(action = controllers.routes.Application.tagsImportAction()){
diff --git a/app/views/warnings/groupedDependencies.scala.html b/app/views/warnings/groupedDependencies.scala.html
index 477a952..9002141 100644
--- a/app/views/warnings/groupedDependencies.scala.html
+++ b/app/views/warnings/groupedDependencies.scala.html
@@ -1,4 +1,4 @@
-@(items: IndexedSeq[GroupedDependency])(implicit rh: DefaultRequest, snoozes: SnoozesInfo, messages: Messages)
+@(items: IndexedSeq[GroupedDependency])(implicit rh: DefaultRequest, snoozes: SnoozesInfo, messages: Messages, mainTemplateData: MainTemplateData)
(ignore this item)
@groupedDependencyList(name = "", id = s"grouped-dependencies-warning-${java.util.UUID.randomUUID.toString}", collapse = false, allowSnoozes = false, versions = Map())(list = items)
@for(groupedDependency <- items){