// // DemoServer.swift // Swifter // // Copyright (c) 2014-2016 Damian KoĊ‚akowski. All rights reserved. // #if os(Linux) import Glibc #else import Foundation #endif public func demoServer(_ publicDir: String) -> HttpServer { print(publicDir) let server = HttpServer() server["/shared/:path"] = shareFilesFromDirectory(publicDir) server["/files/:path"] = directoryBrowser("/") server["/"] = scopes { html { body { ul(server.routes) { service in li { a { href = service; inner = service } } } } } } server["/magic"] = { .ok(.html("You asked for " + $0.path)) } server["/test/:param1/:param2"] = { r in scopes { html { body { h3 { inner = "Address: \(r.address)" } h3 { inner = "Url: \(r.path)" } h3 { inner = "Method: \(r.method)" } h3 { inner = "Query:" } table(r.queryParams) { param in tr { td { inner = param.0 } td { inner = param.1 } } } h3 { inner = "Headers:" } table(r.headers) { header in tr { td { inner = header.0 } td { inner = header.1 } } } h3 { inner = "Route params:" } table(r.params) { param in tr { td { inner = param.0 } td { inner = param.1 } } } } } }(r) } server.GET["/upload"] = scopes { html { body { form { method = "POST" action = "/upload" enctype = "multipart/form-data" input { name = "my_file1"; type = "file" } input { name = "my_file2"; type = "file" } input { name = "my_file3"; type = "file" } button { type = "submit" inner = "Upload" } } } } } 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"] = scopes { html { head { script { src = "http://cdn.staticfile.org/jquery/2.1.4/jquery.min.js" } stylesheet { href = "http://cdn.staticfile.org/twitter-bootstrap/3.3.0/css/bootstrap.min.css" } } body { h3 { inner = "Sign In" } form { method = "POST" action = "/login" fieldset { input { placeholder = "E-mail"; name = "email"; type = "email"; autofocus = "" } input { placeholder = "Password"; name = "password"; type = "password"; autofocus = "" } a { href = "/login" button { type = "submit" inner = "Login" } } } } javascript { src = "http://cdn.staticfile.org/twitter-bootstrap/3.3.0/js/bootstrap.min.js" } } } } server.POST["/login"] = { r in let formFields = r.parseUrlencodedForm() return HttpResponse.ok(.html(formFields.map({ "\($0.0) = \($0.1)" }).joined(separator: "
"))) } server["/demo"] = scopes { html { body { center { h2 { inner = "Hello Swift" } img { src = "https://devimages.apple.com.edgekey.net/swift/images/swift-hero_2x.png" } } } } } server["/raw"] = { r in return HttpResponse.raw(200, "OK", ["XXX-Custom-Header": "value"], { try? $0.write([UInt8]("test".utf8)) }) } 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 { try? w.write([UInt8]("[chunk \(i)]".utf8)) } }) } server["/websocket-echo"] = websocket({ (session, text) in session.writeText(text) }, { (session, binary) in session.writeBinary(binary) }) server.notFoundHandler = { r in return .movedPermanently("https://github.com/404") } server.middleware.append { r in print("Middleware:\(r.method) \(r.path)") return nil } return server }