// // 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/:file"] = HttpHandlers.directory(publicDir) } server["/files/:path"] = HttpHandlers.directoryBrowser("~/") server["/"] = { r in var listPage = "Available services:
" return .OK(.Html(listPage)) } server["/magic"] = { .OK(.Html("You asked for " + $0.path)) } server["/test/:param1/:param2"] = { r in var headersInfo = "" for (name, value) in r.headers { headersInfo += "\(name) : \(value)
" } var queryParamsInfo = "" for (name, value) in r.queryParams { queryParamsInfo += "\(name) : \(value)
" } var pathParamsInfo = "" for token in r.params { pathParamsInfo += "\(token.0) : \(token.1)
" } return .OK(.Html("

Address: \(r.address)

Url:

\(r.path)

Method:

\(r.method)

Headers:

\(headersInfo)

Query:

\(queryParamsInfo)

Path params:

\(pathParamsInfo)")) } server.GET["/upload"] = { r in if let rootDir = publicDir, html = NSData(contentsOfFile:"\(rootDir)/file.html") { var array = [UInt8](count: html.length, repeatedValue: 0) html.getBytes(&array, length: html.length) return HttpResponse.RAW(200, "OK", nil, { $0.write(array) }) } return .NotFound } server.POST["/upload"] = { r in var response = "" for multipart in r.parseMultiPartFormData() { response += "Name: \(multipart.name) File name: \(multipart.fileName) Size: \(multipart.body.count)
" } return HttpResponse.OK(.Html(response)) } server.GET["/login"] = { r in if let rootDir = publicDir, 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, { $0.write(array) }) } return .NotFound } server.POST["/login"] = { r in let formFields = r.parseUrlencodedForm() return HttpResponse.OK(.Html(formFields.map({ "\($0.0) = \($0.1)" }).joinWithSeparator("
"))) } server["/demo"] = { r in return .OK(.Html("

Hello Swift


")) } server["/raw"] = { r in return HttpResponse.RAW(200, "OK", ["XXX-Custom-Header": "value"], { $0.write([UInt8]("test".utf8)) }) } server["/json"] = { r in let jsonObject: NSDictionary = [NSString(string: "foo"): NSNumber(int: 3), NSString(string: "bar"): NSString(string: "baz")] return .OK(.Json(jsonObject)) } server["/redirect"] = { r in return .MovedPermanently("http://www.google.com") } server["/long"] = { r in var longResponse = "" for k in 0..<1000 { longResponse += "(\(k)),->" } return .OK(.Html(longResponse)) } server["/wildcard/*/test/*/:param"] = { r in return .OK(.Html(r.path)) } server["/stream"] = { r in return HttpResponse.RAW(200, "OK", nil, { w in for i in 0...100 { w.write([UInt8]("[chunk \(i)]".utf8)); } }) } return server }