From f1f636e318fa34df3f5a91bae768e3880fdb4fea Mon Sep 17 00:00:00 2001 From: Saulius Grigaitis Date: Sun, 13 Mar 2016 21:39:42 +0200 Subject: [PATCH] Added Cookies Middleware #22 --- Sources/Swifton/CookiesMiddleware.swift | 19 +++++++++++++++++++ Sources/Swifton/Router.swift | 6 ++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 Sources/Swifton/CookiesMiddleware.swift diff --git a/Sources/Swifton/CookiesMiddleware.swift b/Sources/Swifton/CookiesMiddleware.swift new file mode 100644 index 0000000..6fa216d --- /dev/null +++ b/Sources/Swifton/CookiesMiddleware.swift @@ -0,0 +1,19 @@ +import Inquiline + +public class CookiesMiddleware: Middleware { + public func call(request: Request, _ closure: Request -> Response) -> Response { + var newRequest = request + if let rawCookie = newRequest["Cookie"] { + let cookiePairs = rawCookie.characters.split(";").flatMap(String.init) + for cookie in cookiePairs { + let keyValue = cookie.characters.split("=").flatMap(String.init) + newRequest.cookies[keyValue[0]] = keyValue[1] + } + } + + var response = closure(newRequest) + + response["Set-Cookie"] = response.cookies.map { $0 + "=" + $1 }.joinWithSeparator(";") + return response + } +} diff --git a/Sources/Swifton/Router.swift b/Sources/Swifton/Router.swift index 26c06c3..d3550c6 100644 --- a/Sources/Swifton/Router.swift +++ b/Sources/Swifton/Router.swift @@ -74,8 +74,10 @@ public class Router { } public func respond(requestType: RequestType) -> ResponseType { - let request = requestType as? Request ?? Request(method: requestType.method, path: requestType.path, headers: requestType.headers, body: requestType.body) - return ParametersMiddleware().call(request, resolveRoute) + let request = requestType as? Request ?? Request(method: requestType.method, path: requestType.path, headers: requestType.headers, body: requestType.body) + return ParametersMiddleware().call(request) { + CookiesMiddleware().call($0, self.resolveRoute) + } } public func resolveRoute(request: Request) -> Response {