2022-10-11 12:08:44 +02:00
|
|
|
import Foundation
|
|
|
|
import Vapor
|
|
|
|
|
|
|
|
enum HeaderKey: String {
|
|
|
|
case name
|
|
|
|
case password
|
|
|
|
case email
|
|
|
|
case token
|
2022-10-12 21:53:16 +02:00
|
|
|
case visibility
|
|
|
|
case action
|
2022-10-11 12:08:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|