Added a configurable site origin to the ConfigReader+Properties extension in the Website library target.

This commit is contained in:
2026-08-25 16:24:03 +02:00
parent 5b2da4eb16
commit 988090a511
4 changed files with 27 additions and 7 deletions
@@ -240,6 +240,17 @@ package extension ConfigReader {
)
}
/// The public origin the site is served at (scheme and host, no trailing slash), read from the `site.origin` key.
///
/// The redirects and any absolute links derive from it, so a staging deployment can point it at itself or leave it unset without the
/// production origin leaking into its markup.
var siteOrigin: String {
string(
forKey: .Site.origin,
default: .Site.origin
)
}
/// The directory the static files are served from, read from the `path.staticFiles` key.
var staticFilesPath: String {
string(
@@ -98,4 +98,9 @@ extension ConfigKey {
/// The configuration key for the `Strict-Transport-Security` header value (omitted when unset).
public static let strictTransportSecurity: ConfigKey = "security.strictTransportSecurity"
}
/// A namespace for the site configuration keys.
public enum Site {
/// The configuration key for the public origin the site is served at (scheme and host, no trailing slash).
public static let origin: ConfigKey = "site.origin"
}
}
@@ -50,4 +50,12 @@ extension String {
/// The website server's name.
public static let name = "SiteWebsite"
}
/// A namespace for the site string constants.
public enum Site {
/// The default public origin the site is served at (scheme and host, no trailing slash): empty, which leaves the HTTPS redirect off.
///
/// A deployment that trusts the forwarded-protocol header without also setting `site.origin` would otherwise redirect at a host the
/// template guessed for it, and a `301` is cached for a long time.
public static let origin = ""
}
}