diff --git a/app/uk/gov/hmrc/helptosavetestadminfrontend/config/AllowlistFilter.scala b/app/uk/gov/hmrc/helptosavetestadminfrontend/config/AllowlistFilter.scala
index bcadd83..629b84f 100644
--- a/app/uk/gov/hmrc/helptosavetestadminfrontend/config/AllowlistFilter.scala
+++ b/app/uk/gov/hmrc/helptosavetestadminfrontend/config/AllowlistFilter.scala
@@ -23,16 +23,16 @@ import play.api.Configuration
import play.api.mvc.{Call, RequestHeader, Result, Results}
import uk.gov.hmrc.helptosavetestadminfrontend.controllers.routes
import uk.gov.hmrc.helptosavetestadminfrontend.util.Logging
-import uk.gov.hmrc.whitelist.{AkamaiWhitelistFilter => AkamaiAllowListFilter}
+import uk.gov.hmrc.allowlist.AkamaiAllowlistFilter
import scala.concurrent.Future
-class AllowListFilter @Inject()(configuration: Configuration, val mat: Materializer) extends AkamaiAllowListFilter with Logging {
+class AllowListFilter @Inject()(configuration: Configuration, val mat: Materializer) extends AkamaiAllowlistFilter with Logging {
- override def whitelist: Seq[String] =
+ override def allowlist: Seq[String] =
configuration.underlying.get[List[String]]("http-header-ip-whitelist").value
- override def excludedPaths: Seq[Call] = Seq(forbiddenCall, healthCheckCall)
+ override def excludedPaths: Seq[Call] = Seq(forbiddenCall)
// This is the `Call` used in the `Redirect` when an IP is present in the header
// of the HTTP request but is not in the allowList
@@ -44,13 +44,11 @@ class AllowListFilter @Inject()(configuration: Configuration, val mat: Materiali
Future.successful(Results.Redirect(forbiddenCall))
}
- val forbiddenCall: Call = Call("GET", routes.ForbiddenController.forbidden().url)
-
- val healthCheckCall: Call = Call("GET", uk.gov.hmrc.play.health.routes.HealthController.ping().url)
+ val forbiddenCall: Call = Call("GET", routes.ForbiddenController.forbidden.url)
override def apply(f: (RequestHeader) ⇒ Future[Result])(rh: RequestHeader): Future[Result] = {
rh.headers.get(trueClient).foreach{ ip ⇒
- if (!whitelist.contains(ip)) {
+ if (!allowlist.contains(ip)) {
logger.warn(s"SuspiciousActivity: Received request from non-allowListed ip $ip")
}
}
diff --git a/app/uk/gov/hmrc/helptosavetestadminfrontend/config/Filters.scala b/app/uk/gov/hmrc/helptosavetestadminfrontend/config/Filters.scala
index 6b93b3d..53adae6 100644
--- a/app/uk/gov/hmrc/helptosavetestadminfrontend/config/Filters.scala
+++ b/app/uk/gov/hmrc/helptosavetestadminfrontend/config/Filters.scala
@@ -21,23 +21,18 @@ import configs.syntax._
import play.api.Configuration
import play.api.http.HttpFilters
import play.api.mvc.EssentialFilter
-import uk.gov.hmrc.play.bootstrap.frontend.filters.FrontendFilters
@Singleton
class Filters @Inject()(
- configuration: Configuration,
- allowListFilter: AllowListFilter,
- frontendFilters: FrontendFilters
+ configuration: Configuration,
+ allowListFilter: AllowListFilter
) extends HttpFilters {
val allowListFilterEnabled: Boolean =
configuration.underlying.get[List[String]]("http-header-ip-whitelist").value.nonEmpty
override val filters: Seq[EssentialFilter] =
- if (allowListFilterEnabled) {
- frontendFilters.filters :+ allowListFilter
- } else {
- frontendFilters.filters
- }
+ if (allowListFilterEnabled) Seq(allowListFilter)
+ else Seq.empty
}
diff --git a/app/uk/gov/hmrc/helptosavetestadminfrontend/views/availableFunctions.scala.html b/app/uk/gov/hmrc/helptosavetestadminfrontend/views/availableFunctions.scala.html
index e78b63d..4e91a54 100644
--- a/app/uk/gov/hmrc/helptosavetestadminfrontend/views/availableFunctions.scala.html
+++ b/app/uk/gov/hmrc/helptosavetestadminfrontend/views/availableFunctions.scala.html
@@ -25,7 +25,7 @@
Available Functions
- - Delete Emails
+ - Delete Emails
- Check Eligibility
- Create Account
- Get Account
diff --git a/app/uk/gov/hmrc/helptosavetestadminfrontend/views/main_template.scala.html b/app/uk/gov/hmrc/helptosavetestadminfrontend/views/main_template.scala.html
index cc024bf..b9a4f22 100644
--- a/app/uk/gov/hmrc/helptosavetestadminfrontend/views/main_template.scala.html
+++ b/app/uk/gov/hmrc/helptosavetestadminfrontend/views/main_template.scala.html
@@ -14,7 +14,6 @@
* limitations under the License.
*@
-@import uk.gov.hmrc.helptosavetestadminfrontend.views.html.govuk_wrapper
@import uk.gov.hmrc.play.views.html.layouts.{Sidebar, MainContentHeader, Article}
@this(govukWrapper: govuk_wrapper,
diff --git a/app/uk/gov/hmrc/helptosavetestadminfrontend/views/specify_emails_to_delete.scala.html b/app/uk/gov/hmrc/helptosavetestadminfrontend/views/specify_emails_to_delete.scala.html
index f9e13f3..d029d0c 100644
--- a/app/uk/gov/hmrc/helptosavetestadminfrontend/views/specify_emails_to_delete.scala.html
+++ b/app/uk/gov/hmrc/helptosavetestadminfrontend/views/specify_emails_to_delete.scala.html
@@ -24,7 +24,7 @@
@main_template(title = "Hello from help-to-save-test-admin-frontend", bodyClasses = None) {
-@uiForm(uk.gov.hmrc.helptosavetestadminfrontend.controllers.routes.VerifiedEmailsController.deleteVerifiedEmails(), 'class -> "group subsection--wide") {
+@uiForm(uk.gov.hmrc.helptosavetestadminfrontend.controllers.routes.VerifiedEmailsController.deleteVerifiedEmails, 'class -> "group subsection--wide") {
@input_text(
id = "emails",
name = "emails",
diff --git a/build.sbt b/build.sbt
index 32a6424..615690f 100644
--- a/build.sbt
+++ b/build.sbt
@@ -6,49 +6,33 @@ val appName = "help-to-save-test-admin-frontend"
lazy val appDependencies: Seq[ModuleID] = dependencies ++ testDependencies()
-val akkaVersion = "2.5.23"
-
-val akkaHttpVersion = "10.0.15"
-
-
-dependencyOverrides += "com.typesafe.akka" %% "akka-stream" % akkaVersion
-
-dependencyOverrides += "com.typesafe.akka" %% "akka-protobuf" % akkaVersion
-
-dependencyOverrides += "com.typesafe.akka" %% "akka-slf4j" % akkaVersion
-
-dependencyOverrides += "com.typesafe.akka" %% "akka-actor" % akkaVersion
-
-dependencyOverrides += "com.typesafe.akka" %% "akka-http-core" % akkaHttpVersion
-
val dependencies = Seq(
ws,
- "uk.gov.hmrc" %% "bootstrap-frontend-play-26" % "5.2.0",
- "uk.gov.hmrc" %% "govuk-template" % "5.66.0-play-26",
- "uk.gov.hmrc" %% "play-ui" % "9.2.0-play-26",
- "uk.gov.hmrc" %% "play-health" % "3.16.0-play-26",
- "uk.gov.hmrc" %% "simple-reactivemongo" % "8.0.0-play-26",
- "uk.gov.hmrc" %% "play-whitelist-filter" % "3.4.0-play-26",
- "uk.gov.hmrc" %% "totp-generator" % "0.22.0",
- "com.github.kxbmap" %% "configs" % "0.6.1",
- "org.typelevel" %% "cats-core" % "2.2.0",
- "org.jsoup" % "jsoup" % "1.13.1",
- "org.mongodb.scala" %% "mongo-scala-driver" % "4.2.3",
- compilerPlugin("com.github.ghik" % "silencer-plugin" % "1.7.3" cross CrossVersion.full),
- "com.github.ghik" % "silencer-lib" % "1.7.3" % Provided cross CrossVersion.full
+ "uk.gov.hmrc" %% "bootstrap-frontend-play-28" % "5.12.0",
+ "uk.gov.hmrc" %% "govuk-template" % "5.72.0-play-28",
+ "uk.gov.hmrc" %% "play-ui" % "9.5.0-play-28",
+ "uk.gov.hmrc" %% "simple-reactivemongo" % "8.0.0-play-28",
+ "uk.gov.hmrc" %% "play-allowlist-filter" % "1.0.0-play-28",
+ "uk.gov.hmrc" %% "totp-generator" % "0.22.0",
+ "com.github.kxbmap" %% "configs" % "0.6.1",
+ "org.typelevel" %% "cats-core" % "2.2.0",
+ "org.jsoup" % "jsoup" % "1.13.1",
+ "org.mongodb.scala" %% "mongo-scala-driver" % "4.2.3",
+ compilerPlugin("com.github.ghik" % "silencer-plugin" % "1.7.5" cross CrossVersion.full),
+ "com.github.ghik" % "silencer-lib" % "1.7.5" % Provided cross CrossVersion.full
)
def testDependencies(scope: String = "test") = Seq(
- "uk.gov.hmrc" %% "bootstrap-test-play-26" % "5.2.0" % scope,
- "uk.gov.hmrc" %% "service-integration-test" % "1.1.0-play-26" % scope,
- "uk.gov.hmrc" %% "domain" % "5.11.0-play-26" % scope,
- "uk.gov.hmrc" %% "stub-data-generator" % "0.5.3" % scope,
- "uk.gov.hmrc" %% "reactivemongo-test" % "5.0.0-play-26" % scope,
- "org.scalatest" %% "scalatest" % "3.2.8" % scope,
- "org.scalatestplus" %% "scalatestplus-scalacheck" % "3.1.0.0-RC2" % scope,
- "com.vladsch.flexmark" % "flexmark-all" % "0.35.10" % scope,
- "com.typesafe.play" %% "play-test" % PlayVersion.current % scope,
- "org.scalamock" %% "scalamock-scalatest-support" % "3.6.0" % scope
+ "uk.gov.hmrc" %% "bootstrap-test-play-28" % "5.12.0" % scope,
+ "uk.gov.hmrc" %% "service-integration-test" % "1.1.0-play-28" % scope,
+ "uk.gov.hmrc" %% "domain" % "6.2.0-play-28" % scope,
+ "uk.gov.hmrc" %% "stub-data-generator" % "0.5.3" % scope,
+ "uk.gov.hmrc" %% "reactivemongo-test" % "5.0.0-play-28" % scope,
+ "org.scalatest" %% "scalatest" % "3.2.9" % scope,
+ "org.scalatestplus" %% "scalatestplus-scalacheck" % "3.1.0.0-RC2" % scope,
+ "com.vladsch.flexmark" % "flexmark-all" % "0.35.10" % scope,
+ "com.typesafe.play" %% "play-test" % PlayVersion.current % scope,
+ "org.scalamock" %% "scalamock-scalatest-support" % "3.6.0" % scope
)
lazy val plugins: Seq[Plugins] = Seq.empty
@@ -59,10 +43,10 @@ lazy val scoverageSettings = {
Seq(
// Semicolon-separated list of regexs matching classes to exclude
ScoverageKeys.coverageExcludedPackages := ";Reverse.*;.*(uk.gov.hmrc.helptosavetestadminfrontend.config|forms|util|views.*);.*(AuthService|BuildInfo|Routes).*",
- ScoverageKeys.coverageMinimum := 10,
+ ScoverageKeys.coverageMinimumStmtTotal := 10,
ScoverageKeys.coverageFailOnMinimum := false,
ScoverageKeys.coverageHighlighting := true,
- parallelExecution in Test := false
+ Test / parallelExecution := false
)
}
@@ -78,7 +62,7 @@ lazy val microservice = Project(appName, file("."))
.settings(PlayKeys.playDefaultPort := 7007)
.settings(
libraryDependencies ++= appDependencies,
- evictionWarningOptions in update := EvictionWarningOptions.default.withWarnScalaVersionEviction(false)
+ update / evictionWarningOptions := EvictionWarningOptions.default.withWarnScalaVersionEviction(false)
)
.settings(resolvers ++= Seq(
Resolver.jcenterRepo,
diff --git a/conf/application.conf b/conf/application.conf
index 8d909ad..2fa289f 100644
--- a/conf/application.conf
+++ b/conf/application.conf
@@ -18,7 +18,7 @@ appName="help-to-save-test-admin-frontend"
play.http.router=prod.Routes
# to learn why this was included: /display/TEC/2016/03/14/Setting+Security+Headers+in+frontend+services
-play.filters.headers.contentSecurityPolicy = "default-src 'self' 'unsafe-inline' localhost:9000 localhost:9032 localhost:9250 data:; img-src *"
+play.filters.csp.CSPFilter = "default-src 'self' 'unsafe-inline' localhost:9000 localhost:9032 localhost:9250 data:; img-src *"
# An ApplicationLoader that uses Guice to bootstrap the application.
play.application.loader = "uk.gov.hmrc.play.bootstrap.ApplicationLoader"
diff --git a/conf/prod.routes b/conf/prod.routes
index 14a0ca6..38c9dde 100644
--- a/conf/prod.routes
+++ b/conf/prod.routes
@@ -1,4 +1,5 @@
# Add all the application routes to the app.routes file
--> /help-to-save-test-admin-frontend app.Routes
--> / health.Routes
--> /template template.Routes
+-> /help-to-save-test-admin-frontend app.Routes
+-> / health.Routes
+-> /template template.Routes
+
diff --git a/project/build.properties b/project/build.properties
index dbae93b..19479ba 100644
--- a/project/build.properties
+++ b/project/build.properties
@@ -1 +1 @@
-sbt.version=1.4.9
+sbt.version=1.5.2
diff --git a/project/plugins.sbt b/project/plugins.sbt
index ae927f8..bfa2f15 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -4,14 +4,9 @@ resolvers += "HMRC Releases" at "https://artefacts.tax.service.gov.uk/artifactor
resolvers += "HMRC-open-artefacts-maven" at "https://open.artefacts.tax.service.gov.uk/maven2"
resolvers += Resolver.url("HMRC-open-artefacts-ivy", url("https://open.artefacts.tax.service.gov.uk/ivy2"))(Resolver.ivyStylePatterns)
-addSbtPlugin("uk.gov.hmrc" % "sbt-auto-build" % "3.0.0")
-
-addSbtPlugin("uk.gov.hmrc" % "sbt-distributables" % "2.1.0")
-
-addSbtPlugin("uk.gov.hmrc" % "sbt-bobby" % "3.4.0")
-
-addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.23")
-
-addSbtPlugin("org.scoverage" %% "sbt-scoverage" % "1.8.0")
-
-addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")
\ No newline at end of file
+addSbtPlugin("uk.gov.hmrc" % "sbt-auto-build" % "3.5.0")
+addSbtPlugin("uk.gov.hmrc" % "sbt-distributables" % "2.1.0")
+addSbtPlugin("uk.gov.hmrc" % "sbt-bobby" % "3.4.0")
+addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.8" exclude ("org.slf4j", "slf4j-simple"))
+addSbtPlugin("org.scoverage" %% "sbt-scoverage" % "1.8.0")
+addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")
\ No newline at end of file
diff --git a/test/config/FiltersSpec.scala b/test/config/FiltersSpec.scala
index 6ae75a3..07a84c9 100644
--- a/test/config/FiltersSpec.scala
+++ b/test/config/FiltersSpec.scala
@@ -16,52 +16,19 @@
package config
-import akka.stream.Materializer
-import com.kenshoo.play.metrics.MetricsFilter
import controllers.TestSupport
import play.api.Configuration
-import play.api.mvc.EssentialFilter
-import play.filters.csrf.CSRFFilter
-import play.filters.headers.SecurityHeadersFilter
-import uk.gov.hmrc.helptosavetestadminfrontend.config.{Filters, AllowListFilter}
-import uk.gov.hmrc.play.bootstrap.frontend.filters.crypto.SessionCookieCryptoFilter
-import uk.gov.hmrc.play.bootstrap.frontend.filters.deviceid.DeviceIdFilter
-import uk.gov.hmrc.play.bootstrap.frontend.filters.{FrontendAuditFilter, FrontendFilters, HeadersFilter, SessionIdFilter, SessionTimeoutFilter}
+import uk.gov.hmrc.helptosavetestadminfrontend.config.{AllowListFilter, Filters}
+import uk.gov.hmrc.play.bootstrap.frontend.filters.SessionIdFilter
import uk.gov.hmrc.play.bootstrap.filters._
class FiltersSpec extends TestSupport {
- // can't use scalamock for CacheControlFilter since a logging statement during class
- // construction requires a parameter from the CacheControlConfig. Using scalamock
- // reuslts in a NullPointerException since no CacheControlConfig is there
- val mockCacheControllerFilter = new CacheControlFilter(CacheControlConfig(), mock[Materializer])
-
val mockMDCFilter = new MDCFilter(fakeApplication.materializer, fakeApplication.configuration, "")
val mockAllowlistFilter = mock[uk.gov.hmrc.play.bootstrap.frontend.filters.AllowlistFilter]
val mockSessionIdFilter =mock[SessionIdFilter]
- class TestableFrontendFilters extends FrontendFilters(
- stub[Configuration],
- stub[LoggingFilter],
- stub[HeadersFilter],
- stub[SecurityHeadersFilter],
- stub[FrontendAuditFilter],
- stub[MetricsFilter],
- stub[DeviceIdFilter],
- stub[CSRFFilter],
- stub[SessionCookieCryptoFilter],
- stub[SessionTimeoutFilter],
- mockCacheControllerFilter,
- mockMDCFilter,
- mockAllowlistFilter,
- mockSessionIdFilter
- ) {
- lazy val enableSecurityHeaderFilter: Boolean = false
- override val filters: Seq[EssentialFilter] = Seq()
- }
-
- val frontendFilters = new TestableFrontendFilters
val allowListFilter = mock[AllowListFilter]
"Filters" must {
@@ -69,14 +36,14 @@ class FiltersSpec extends TestSupport {
"include the allowList filter if the allowList from config is non empty" in {
val config = Configuration("http-header-ip-whitelist" → List("1.2.3"))
- val filters = new Filters(config, allowListFilter, frontendFilters)
+ val filters = new Filters(config, allowListFilter)
filters.filters shouldBe Seq(allowListFilter)
}
"not include the allowList filter if the allowList from config is empty" in {
val config = Configuration("http-header-ip-whitelist" → List())
- val filters = new Filters(config, allowListFilter, frontendFilters)
+ val filters = new Filters(config, allowListFilter)
filters.filters shouldBe Seq()
}
}
diff --git a/test/controllers/TestSupport.scala b/test/controllers/TestSupport.scala
index 08c92ae..6d59e15 100644
--- a/test/controllers/TestSupport.scala
+++ b/test/controllers/TestSupport.scala
@@ -47,7 +47,8 @@ trait TestSupport extends UnitSpec with MockFactory with BeforeAndAfterAll with
|
|
""".stripMargin)
- ) ++ additionalConfig)
+ ).withFallback(additionalConfig)
+ )
.build()
}