Skip to content
This repository has been archived by the owner on Sep 4, 2023. It is now read-only.
/ APIKeyMiddleware Public archive

Swift package for adding API Key requirement to vapor backends.

Notifications You must be signed in to change notification settings

ptrkstr/APIKeyMiddleware

Repository files navigation

APIKeyMiddleware



Minimum Supported Vapor Version is 4

Swift package for adding API Key requirement to vapor backends.

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

About

Swift package for adding API Key requirement to vapor backends.

Topics

Resources

Stars

Watchers

Forks

Languages