diff --git a/.travis.yml b/.travis.yml index e806e0f..b1ed834 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,8 @@ os: - linux - - osx language: generic sudo: required dist: trusty -osx_image: xcode8 script: - - eval "$(curl -sL https://swift.vapor.sh/ci)" + - eval "$(curl -sL https://gist.githubusercontent.com/BrettRToomey/1256d98cce5546c696cc68d9f61ad46f/raw/d5fb266a17f26c41b59fd00867a3a2474c3efee3/TravisSwift31)" - eval "$(curl -sL https://swift.vapor.sh/codecov)" diff --git a/Package.swift b/Package.swift index 7363513..a2f9395 100644 --- a/Package.swift +++ b/Package.swift @@ -3,6 +3,6 @@ import PackageDescription let package = Package( name: "Gatekeeper", dependencies: [ - .Package(url: "https://github.com/vapor/vapor.git", majorVersion: 1) + .Package(url: "https://github.com/vapor/vapor.git", majorVersion: 2) ] ) diff --git a/Sources/RateLimiter.swift b/Sources/RateLimiter.swift index 3eb32eb..79501ff 100644 --- a/Sources/RateLimiter.swift +++ b/Sources/RateLimiter.swift @@ -47,7 +47,11 @@ public struct RateLimiter: Middleware { public func respond(to request: Request, chainingTo next: Responder) throws -> Response { guard let peer = request.peerAddress?.address() else { - throw Abort.custom(status: .forbidden, message: "Unable to verify peer.") + throw Abort( + .forbidden, + metadata: nil, + reason: "Unable to verify peer." + ) } var entry = try cache.get(peer) @@ -73,7 +77,11 @@ public struct RateLimiter: Middleware { requestsLeft -= 1 guard requestsLeft >= 0 else { - throw Abort.custom(status: .tooManyRequests, message: "Slow down.") + throw Abort( + .tooManyRequests, + metadata: nil, + reason: "Slow down." + ) } let response = try next.respond(to: request) diff --git a/Sources/SSLEnforcer.swift b/Sources/SSLEnforcer.swift index 6217ee2..fa6a1ae 100644 --- a/Sources/SSLEnforcer.swift +++ b/Sources/SSLEnforcer.swift @@ -6,7 +6,7 @@ public struct SSLEnforcer: Middleware { private let error: AbortError public init(error: AbortError, drop: Droplet, environments: [Environment] = [.production]) { - shouldEnforce = environments.contains(drop.environment) + shouldEnforce = environments.contains(drop.config.environment) self.error = error } diff --git a/Tests/GatekeeperTests/GatekeeperTests.swift b/Tests/GatekeeperTests/GatekeeperTests.swift index d313a12..b8d895e 100644 --- a/Tests/GatekeeperTests/GatekeeperTests.swift +++ b/Tests/GatekeeperTests/GatekeeperTests.swift @@ -26,10 +26,15 @@ class GatekeeperTests: XCTestCase { do { _ = try middleware.respond(to: request, chainingTo: MockResponder()) XCTAssertTrue(i <= 10, "ran \(i) times.") - } catch Abort.custom(status: let status, message: _) { - XCTAssertEqual(status, .tooManyRequests) - XCTAssertEqual(i, 11, "Should've failed after the 11th attempt.") - break + } catch let error as Abort { + switch error.status { + case .tooManyRequests: + //success + XCTAssertEqual(i, 11, "Should've failed after the 11th attempt.") + break + default: + XCTFail("Expected too many request: \(error)") + } } catch { XCTFail("Caught wrong error: \(error)") } @@ -42,8 +47,14 @@ class GatekeeperTests: XCTestCase { do { _ = try middleware.respond(to: request, chainingTo: MockResponder()) - } catch Abort.custom(status: let status, message: _){ - XCTAssertEqual(status, .forbidden) + } catch let error as Abort { + switch error.status { + case .forbidden: + //success + break + default: + XCTFail("Expected forbidden") + } } catch { XCTFail("Rate limiter failed: \(error)") } @@ -94,8 +105,14 @@ class GatekeeperTests: XCTestCase { do { _ = try middleware.respond(to: request, chainingTo: MockResponder()) XCTFail("Should've been rejected") - } catch Abort.badRequest { - // success + } catch let error as Abort { + switch error.status { + case .badRequest: + // success + break + default: + XCTFail("Expected bad request") + } } catch { XCTFail("Request failed: \(error)") } @@ -129,11 +146,15 @@ class GatekeeperTests: XCTestCase { extension GatekeeperTests { var developmentDrop: Droplet { - return Droplet(environment: .development) + let config = try! Config() + config.environment = .development + return try! Droplet(config: config) } var productionDrop: Droplet { - return Droplet(environment: .production) + let config = try! Config() + config.environment = .production + return try! Droplet(config: config) } func getHTTPRequest() -> Request {