diff --git a/akka-http-core/src/main/java/akka/http/javadsl/model/headers/StrictTransportSecurity.java b/akka-http-core/src/main/java/akka/http/javadsl/model/headers/StrictTransportSecurity.java index c0322d9c7d..d5f230d0fd 100644 --- a/akka-http-core/src/main/java/akka/http/javadsl/model/headers/StrictTransportSecurity.java +++ b/akka-http-core/src/main/java/akka/http/javadsl/model/headers/StrictTransportSecurity.java @@ -11,11 +11,12 @@ package akka.http.javadsl.model.headers; public abstract class StrictTransportSecurity extends akka.http.scaladsl.model.HttpHeader { public abstract long maxAge(); public abstract boolean includeSubDomains(); + public abstract boolean preload(); public static StrictTransportSecurity create(long maxAge) { - return new akka.http.scaladsl.model.headers.Strict$minusTransport$minusSecurity(maxAge, false); + return new akka.http.scaladsl.model.headers.Strict$minusTransport$minusSecurity(maxAge, false, false); } - public static StrictTransportSecurity create(long maxAge, boolean includeSubDomains) { - return new akka.http.scaladsl.model.headers.Strict$minusTransport$minusSecurity(maxAge, includeSubDomains); + public static StrictTransportSecurity create(long maxAge, boolean includeSubDomains, boolean preload) { + return new akka.http.scaladsl.model.headers.Strict$minusTransport$minusSecurity(maxAge, includeSubDomains, preload); } } diff --git a/akka-http-core/src/main/scala/akka/http/impl/model/parser/SimpleHeaders.scala b/akka-http-core/src/main/scala/akka/http/impl/model/parser/SimpleHeaders.scala index a269c701d1..12151ab0dd 100644 --- a/akka-http-core/src/main/scala/akka/http/impl/model/parser/SimpleHeaders.scala +++ b/akka-http-core/src/main/scala/akka/http/impl/model/parser/SimpleHeaders.scala @@ -187,7 +187,7 @@ private[parser] trait SimpleHeaders { this: Parser with CommonRules with CommonA def server = rule { products ~ EOI ~> (Server(_)) } def `strict-transport-security` = rule { - ignoreCase("max-age=") ~ `delta-seconds` ~ optional(ws(";") ~ ignoreCase("includesubdomains") ~ push(true)) ~ EOI ~> (`Strict-Transport-Security`(_, _)) + ignoreCase("max-age=") ~ `delta-seconds` ~ optional(ws(";") ~ ignoreCase("includesubdomains") ~ push(true)) ~ optional(ws(";") ~ ignoreCase("preload") ~ push(true)) ~ EOI ~> (`Strict-Transport-Security`(_, _, _)) } // http://tools.ietf.org/html/rfc7230#section-3.3.1 @@ -230,4 +230,4 @@ private[parser] trait SimpleHeaders { this: Parser with CommonRules with CommonA (`ip-v4-address` | `ip-v6-address`) ~ EOI ~> (b ⇒ `X-Real-Ip`(RemoteAddress(b))) } -} \ No newline at end of file +} diff --git a/akka-http-core/src/main/scala/akka/http/scaladsl/model/headers/headers.scala b/akka-http-core/src/main/scala/akka/http/scaladsl/model/headers/headers.scala index a5510aefce..5f37e9d7c7 100644 --- a/akka-http-core/src/main/scala/akka/http/scaladsl/model/headers/headers.scala +++ b/akka-http-core/src/main/scala/akka/http/scaladsl/model/headers/headers.scala @@ -794,12 +794,13 @@ final case class Server(products: immutable.Seq[ProductVersion]) extends jm.head // https://tools.ietf.org/html/rfc6797 object `Strict-Transport-Security` extends ModeledCompanion[`Strict-Transport-Security`] { - def apply(maxAge: Long, includeSubDomains: Option[Boolean]) = new `Strict-Transport-Security`(maxAge, includeSubDomains.getOrElse(false)) + def apply(maxAge: Long, includeSubDomains: Option[Boolean], preload: Option[Boolean]) = new `Strict-Transport-Security`(maxAge, includeSubDomains.getOrElse(false), preload.getOrElse(false)) } -final case class `Strict-Transport-Security`(maxAge: Long, includeSubDomains: Boolean = false) extends jm.headers.StrictTransportSecurity with ResponseHeader { +final case class `Strict-Transport-Security`(maxAge: Long, includeSubDomains: Boolean = false, preload: Boolean = false) extends jm.headers.StrictTransportSecurity with ResponseHeader { def renderValue[R <: Rendering](r: R): r.type = { r ~~ "max-age=" ~~ maxAge if (includeSubDomains) r ~~ "; includeSubDomains" + if (preload) r ~~ "; preload" r } protected def companion = `Strict-Transport-Security`