raboof commented on code in PR #684: URL: https://github.com/apache/pekko-http/pull/684#discussion_r2115915132
########## http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/headers/headers.scala: ########## @@ -1226,3 +1225,70 @@ final case class `X-Real-Ip`(address: RemoteAddress) extends jm.headers.XRealIp def renderValue[R <: Rendering](r: R): r.type = r ~~ address protected def companion = `X-Real-Ip` } + +object Trailer extends ModeledCompanion[Trailer] { + private implicit val trailersRenderer: Renderer[immutable.Iterable[String]] = + Renderer.defaultSeqRenderer[String] + + def apply(values: immutable.Seq[String]): Trailer = { + val clean = values.map(_.trim).filter(_.nonEmpty) + val (forbidden, allowed) = clean.partition(name => isForbidden(name.toRootLowerCase)) + if (clean.isEmpty) + throw new IllegalArgumentException(s"Trailer values must not be empty: No valid header names specified") + else if (forbidden.nonEmpty) { + val forbiddenInput = forbidden.mkString("[", ", ", "]") + throw new IllegalArgumentException( + s"Trailer values must not contain forbidden header names: Trailer contained $forbiddenInput") + } else new Trailer(allowed) Review Comment: I'm not entirely sure this validation belongs here, but OK I guess. Could we use an exception type from the `ExceptionWithErrorInfo` hierarchy, that allows splitting the error message 'itself' from the possibly-unsafe 'details'? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@pekko.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@pekko.apache.org For additional commands, e-mail: notifications-h...@pekko.apache.org