import Foundation import Vapor enum HeaderKey: String { case name case password case email case token case visibility case action } extension Request { /** Get a header for a key, or abort with a `badRequest`. */ func header(_ key: HeaderKey) throws -> String { guard let value = headers.first(name: key.rawValue) else { throw Abort(.badRequest) } return value } func optionalHeader(_ key: HeaderKey) -> String? { headers.first(name: key.rawValue) } /** Get the password from the request header and hash it. Possible error responses: - `400`: No password header found - `424`: Failed to hash the password */ func hashedPassword() throws -> String { let password = try header(.password) guard let hash = try? self.password.hash(password) else { throw Abort(.failedDependency) // 424 } return hash } }