BasicAuthMiddleware provides basic authentication for server and client.
import BasicAuthMiddleware
import HTTPServer
import Router
let basicAuth = BasicAuthMiddleware { username, password in
if username == "admin" && password == "password" {
return .Authenticated
}
return .AccessDenied
}
let router = Router(middleware: basicAuth) { route in
route.get("/") { _ in
return Response(status: .OK, body: "Authenticated")
}
}
try Server(responder: router).start()
If you want to pass forward any custom data in the Request
storage, you can return a Payload
with a key and a value.
let basicAuth = BasicAuthMiddleware { username, password in
if let user = User.withUsername(username, password: password) {
return .Payload(key: "user", value: user)
}
return .AccessDenied
}
Then you can retrieve the value in the route.
let router = Router(middleware: basicAuth) { route in
route.get("/") { request in
let user = request.storage["user"]!
// Do what you want with the user
return Response(status: .OK, body: "Authenticated")
}
}
If you want the browser to show a login prompt after receiving Access Denied
, you can set an optional Basic realm
for the WWW-Authenticate
header.
let basicAuth = BasicAuthMiddleware(realm: "Password Protected Realm") { username, password in
if username == "admin" && password == "password" {
return .Authenticated
}
return .AccessDenied
}
import BasicAuthMiddleware
import HTTPClient
let basicAuth = BasicAuthMiddleware(
username: "API_KEY",
password: "API_SECRET"
)
let client = try Client(host: "your.api.com", port: 80)
let response = try client.get("/", middleware: basicAuth)
- Add
BasicAuthMiddleware
to yourPackage.swift
import PackageDescription
let package = Package(
dependencies: [
.Package(url: "https://github.com/Zewo/BasicAuthMiddleware.git", majorVersion: 0, minor: 5)
]
)
If you need any help you can join our Slack and go to the #help channel. Or you can create a Github issue in our main repository. When stating your issue be sure to add enough details, specify what module is causing the problem and reproduction steps.
The entire Zewo code base is licensed under MIT. By contributing to Zewo you are contributing to an open and engaged community of brilliant Swift programmers. Join us on Slack to get to know us!
This project is released under the MIT license. See LICENSE for details.