// // DemoServer.swift // Swifter // Copyright (c) 2015 Damian KoĊ‚akowski. All rights reserved. // import Foundation public func demoServer(publicDir: String?) -> HttpServer { let server = HttpServer() if let publicDir = publicDir { server["/resources/(.+)"] = HttpHandlers.directory(publicDir) } server["/files(.+)"] = HttpHandlers.directoryBrowser("~/") server["/magic"] = { .OK(.Html("You asked for " + $0.url)) } server["/test"] = { request in var headersInfo = "" for (name, value) in request.headers { headersInfo += "\(name) : \(value)
" } var queryParamsInfo = "" for (name, value) in request.urlParams { queryParamsInfo += "\(name) : \(value)
" } return .OK(.Html("

Address: \(request.address)

Url:

\(request.url)

Method: \(request.method)

Headers:

\(headersInfo)

Query:

\(queryParamsInfo)")) } server["/params/(.+)/(.+)"] = { request in var capturedGroups = "" for (index, group) in request.capturedUrlGroups.enumerate() { capturedGroups += "Expression group \(index) : \(group)
" } return .OK(.Html("Url: \(request.url)
Method: \(request.method)
\(capturedGroups)")) } server["/json"] = { request in return .OK(.Json(["posts" : [[ "id" : 1, "message" : "hello world"],[ "id" : 2, "message" : "sample message"]], "new_updates" : false])) } server["/redirect"] = { request in return .MovedPermanently("http://www.google.com") } server["/long"] = { request in var longResponse = "" for k in 0..<1000 { longResponse += "(\(k)),->" } return .OK(.Html(longResponse)) } server["/demo"] = { request in return .OK(.Html("

Hello Swift

" + "
" + "
")) } server["/login"] = { request in switch request.method.uppercaseString { case "GET": if let rootDir = publicDir { if let html = NSData(contentsOfFile:"\(rootDir)/login.html") { var array = [UInt8](count: html.length, repeatedValue: 0) html.getBytes(&array, length: html.length) return HttpResponse.RAW(200, "OK", nil, array) } else { return .NotFound } } case "POST": let formFields = request.parseForm() return HttpResponse.OK(.Html(formFields.map({ "\($0.0) = \($0.1)" }).joinWithSeparator("
"))) default: return .NotFound } return .NotFound } server["/raw"] = { request in return HttpResponse.RAW(200, "OK", ["XXX-Custom-Header": "value"], [UInt8]("Sample Response".utf8)) } server["/"] = { request in var listPage = "Available services: