| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- //
- // HttpServer.swift
- // Swifter
- //
- // Copyright (c) 2014-2016 Damian Kołakowski. All rights reserved.
- //
- import Foundation
- open class HttpServer: HttpServerIO {
- public static let VERSION: String = {
- #if os(Linux)
- return "1.5.0"
- #else
- let bundle = Bundle(for: HttpServer.self)
- guard let version = bundle.infoDictionary?["CFBundleShortVersionString"] as? String else { return "Unspecified" }
- return version
- #endif
- }()
- private let router = HttpRouter()
- public override init() {
- self.DELETE = MethodRoute(method: "DELETE", router: router)
- self.PATCH = MethodRoute(method: "PATCH", router: router)
- self.HEAD = MethodRoute(method: "HEAD", router: router)
- self.POST = MethodRoute(method: "POST", router: router)
- self.GET = MethodRoute(method: "GET", router: router)
- self.PUT = MethodRoute(method: "PUT", router: router)
- self.delete = MethodRoute(method: "DELETE", router: router)
- self.patch = MethodRoute(method: "PATCH", router: router)
- self.head = MethodRoute(method: "HEAD", router: router)
- self.post = MethodRoute(method: "POST", router: router)
- self.get = MethodRoute(method: "GET", router: router)
- self.put = MethodRoute(method: "PUT", router: router)
- }
- public var DELETE, PATCH, HEAD, POST, GET, PUT: MethodRoute
- public var delete, patch, head, post, get, put: MethodRoute
- public subscript(path: String) -> ((HttpRequest) -> HttpResponse)? {
- set {
- router.register(nil, path: path, handler: newValue)
- }
- get { return nil }
- }
- public var routes: [String] {
- return router.routes()
- }
- public var notFoundHandler: ((HttpRequest) -> HttpResponse)?
- public var middleware = [(HttpRequest) -> HttpResponse?]()
- override open func dispatch(_ request: HttpRequest) -> ([String: String], (HttpRequest) -> HttpResponse) {
- for layer in middleware {
- if let response = layer(request) {
- return ([:], { _ in response })
- }
- }
- if let result = router.route(request.method, path: request.path) {
- return result
- }
- if let notFoundHandler = self.notFoundHandler {
- return ([:], notFoundHandler)
- }
- return super.dispatch(request)
- }
- public struct MethodRoute {
- public let method: String
- public let router: HttpRouter
- public subscript(path: String) -> ((HttpRequest) -> HttpResponse)? {
- set {
- router.register(method, path: path, handler: newValue)
- }
- get { return nil }
- }
- }
- }
|