Static file serving support for the Website service (#3)
This PR contains the work done to support the static files serving for the **Website** service, and also included the essential boilerplate assets from the **HTML5 boilerplate** project. To provide further details about the work done: * Serving: Added the `FileMiddleware` middlewqare to the router; `path`, `server name`, and `log level` now read from config with defaults. * Library: Added the `StaticFile` enumeration with a `contentType` property, plus typed config-key/value constants and the `Configuration` dependency on WebsiteCore. * Assets: Added the **HTML5 boilerplate** (HTML, CSS, JS, icons, manifest, robots) to the *Resources/Static* folder. * Docker: Stage the Resources directory as read-only. * Tests: Added a test plan, and a shared Xcode scheme. Reviewed-on: rock-n-code/loud-amsterdam#3 Co-authored-by: Javier Cicchelli <javier@rock-n-code.com> Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
import Configuration
|
||||
|
||||
extension AbsoluteConfigKey {
|
||||
/// A namespace for the HTTP server configuration keys, as absolute keys.
|
||||
public enum HTTP {
|
||||
/// The absolute configuration key for the host the server binds to.
|
||||
public static let host: AbsoluteConfigKey = .init(.HTTP.host)
|
||||
/// The absolute configuration key for the port the server listens on.
|
||||
public static let port: AbsoluteConfigKey = .init(.HTTP.port)
|
||||
/// The absolute configuration key for the server's name.
|
||||
public static let serverName: AbsoluteConfigKey = .init(.HTTP.serverName)
|
||||
}
|
||||
/// A namespace for the logging configuration keys, as absolute keys.
|
||||
public enum Log {
|
||||
/// The absolute configuration key for the minimum log level.
|
||||
public static let level: AbsoluteConfigKey = .init(.Log.level)
|
||||
}
|
||||
/// A namespace for the path configuration keys, as absolute keys.
|
||||
public enum Path {
|
||||
/// The absolute configuration key for the directory the static files are served from.
|
||||
public static let staticFiles: AbsoluteConfigKey = .init(.Path.staticFiles)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import Configuration
|
||||
|
||||
extension ConfigKey {
|
||||
/// A namespace for the HTTP server configuration keys.
|
||||
public enum HTTP {
|
||||
/// The configuration key for the host the server binds to.
|
||||
public static let host: ConfigKey = "http.host"
|
||||
/// The configuration key for the port the server listens on.
|
||||
public static let port: ConfigKey = "http.port"
|
||||
/// The configuration key for the server's name.
|
||||
public static let serverName: ConfigKey = "http.serverName"
|
||||
}
|
||||
/// A namespace for the logging configuration keys.
|
||||
public enum Log {
|
||||
/// The configuration key for the minimum log level.
|
||||
public static let level: ConfigKey = "log.level"
|
||||
}
|
||||
/// A namespace for the path configuration keys.
|
||||
public enum Path {
|
||||
/// The configuration key for the directory the static files are served from.
|
||||
public static let staticFiles: ConfigKey = "path.staticFiles"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
import Configuration
|
||||
|
||||
extension ConfigValue {
|
||||
/// A namespace for the HTTP server's default configuration values.
|
||||
public enum HTTP {
|
||||
/// The default host the server binds to.
|
||||
public static let host: ConfigValue = .init(stringLiteral: "127.0.0.1")
|
||||
/// The default port the server listens on.
|
||||
public static let port: ConfigValue = .init(stringLiteral: "0")
|
||||
/// The default server name.
|
||||
public static let serverName: ConfigValue = .init(stringLiteral: .Server.name)
|
||||
}
|
||||
/// A namespace for the logging default configuration values.
|
||||
enum Log {
|
||||
/// The default minimum log level.
|
||||
public static let level: ConfigValue = .init(stringLiteral: "trace")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
extension String {
|
||||
/// A namespace for well-known path string constants.
|
||||
public enum Path {
|
||||
/// The directory, relative to the working directory, that the website's static files are served from.
|
||||
public static let staticResources = "Resources/Static"
|
||||
}
|
||||
/// A namespace for the server string constants.
|
||||
public enum Server {
|
||||
/// The website server's name.
|
||||
public static let name = "LoudWebsite"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user