//
// DemoServer.swift
// Swifter
//
// Copyright (c) 2014-2016 Damian KoĊakowski. All rights reserved.
//
import Foundation
public func demoServer(publicDir: String) -> HttpServer {
print(publicDir)
let server = HttpServer()
server["/public/:path"] = HttpHandlers.shareFilesFromDirectory(publicDir)
server["/public/"] = HttpHandlers.shareFilesFromDirectory(publicDir) // needed to serve index file at root level
server["/files/:path"] = HttpHandlers.directoryBrowser("/")
server["/"] = HttpHandlers.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
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 html = NSData(contentsOfFile:"\(publicDir)/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 html = NSData(contentsOfFile:"\(publicDir)/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"] = HttpHandlers.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"], { $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))
}
})
}
server["/websocket-echo"] = HttpHandlers.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
}