import Vapor private func authorize(_ request: Request) throws { let key = try request.query.get(String.self, at: "key") guard server.hasAuthorization(for: key) else { throw Abort(.forbidden) } } /// Register your application's routes here. /// /// [Learn More →](https://docs.vapor.codes/3.0/getting-started/structure/#routesswift) func routes(_ app: Application) throws { // Set the name of a cap app.postCatching("name", ":n") { request in try authorize(request) guard let cap = request.parameters.get("n", as: Int.self) else { log("Invalid parameter for cap") throw Abort(.badRequest) } guard let buffer = request.body.data, let name = String(data: Data(buffer: buffer), encoding: .utf8) else { log("Invalid body data") throw CapError.invalidBody } try server.set(name: name, for: cap) } // Upload an image app.postCatching("images", ":n") { request -> Data in try authorize(request) guard let cap = request.parameters.get("n", as: Int.self) else { log("Invalid parameter for cap") throw Abort(.badRequest) } guard let buffer = request.body.data else { log("Invalid body data") throw CapError.invalidBody } let data = Data(buffer: buffer) let newCount = try server.save(image: data, for: cap) return "\(newCount)".data(using: .utf8)! } // Set a different version as the main image app.getCatching("switch", ":n", ":v") { request in try authorize(request) guard let cap = request.parameters.get("n", as: Int.self), cap >= 0 else { log("Invalid parameter for cap") throw Abort(.badRequest) } guard let version = request.parameters.get("v", as: Int.self), version >= 0 else { log("Invalid parameter for cap version") throw Abort(.badRequest) } try server.switchMainImage(to: version, for: cap) } }