Features
-  
✅ Supports an array of keys -  
✅ Supports overriding thrown errors -  
✅ 100% Test Coverage 
Usage
Requests are expected to have the header api-key.
Simple
public func configure(_ app: Application) throws {
    app.middleware.use(APIKeyMiddleware(keys: ["123"]))
} 
See Vapor Docs if wanting to add to individual routes.
Override Errors
The following errors are used by default:
- Missing API key: 
Abort(.badRequest, reason: "Missing api-key.") - Unauthorized API Key: 
Abort(.unauthorized, reason: "Unauthorized api-key.") 
To override these errors, assign a delegate to the APIKeyMiddleware. Returning nil uses defaults.
class Delegate: APIKeyMiddlewareDelegate {
    static let shared = Delegate()
    init() {}
    func errorForMissingKey(in middleware: APIKeyMiddleware) -> Error? {
        Abort(.imATeapot, reason: "Missing api-key was found by teapot.")
    }
    func errorForUnauthorizedKey(in middleware: APIKeyMiddleware) -> Error? {
        Abort(.imATeapot, reason: "Unauthorized api-key was found by teapot.")
    }
}
public func configure(_ app: Application) throws {
    let middleware = APIKeyMiddleware(keys: ["123"], delegate: Delegate.shared)
    app.middleware.use(middleware)
} 
Installation
SPM
Add the following to your project:
https://github.com/ptrkstr/APIKeyMiddleware
 
Possible Future Features
Raise an issue if you need these
- Allow overriding API-Key header name