0001
0008 import Foundation
0009
0010 public func demoServer(publicDir: String) -> HttpServer {
0011
0012 print(publicDir)
0013
0014 let server = HttpServer()
0015
0016 server["/public/:path"] = HttpHandlers.shareFilesFromDirectory(publicDir)
0017
0018 server["/files/:path"] = HttpHandlers.directoryBrowser("/")
0019
0020 server["/"] = { r in
0021 var listPage = "Available services:<br><ul>"
0022 for services in server.routes {
0023 if services.isEmpty {
0024 listPage += "<li><a href=\"/\">/</a></li>"
0025 } else {
0026 listPage += "<li><a href=\"\(services)\">\(services)</a></li>"
0027 }
0028 }
0029 listPage += "</ul>"
0030 return .OK(.Html(listPage))
0031 }
0032
0033 server["/magic"] = { .OK(.Html("You asked for " + $0.path)) }
0034
0035 server["/test/:param1/:param2"] = { r in
0036 var headersInfo = ""
0037 for (name, value) in r.headers {
0038 headersInfo += "\(name) : \(value)<br>"
0039 }
0040 var queryParamsInfo = ""
0041 for (name, value) in r.queryParams {
0042 queryParamsInfo += "\(name) : \(value)<br>"
0043 }
0044 var pathParamsInfo = ""
0045 for token in r.params {
0046 pathParamsInfo += "\(token.0) : \(token.1)<br>"
0047 }
0048 return .OK(.Html("<h3>Address: \(r.address)</h3><h3>Url:</h3> \(r.path)<h3>Method:</h3>\(r.method)<h3>Headers:</h3>\(headersInfo)<h3>Query:</h3>\(queryParamsInfo)<h3>Path params:</h3>\(pathParamsInfo)"))
0049 }
0050
0051 server.GET["/upload"] = { r in
0052 if let html = NSData(contentsOfFile:"\(publicDir)/file.html") {
0053 var array = [UInt8](count: html.length, repeatedValue: 0)
0054 html.getBytes(&array, length: html.length)
0055 return HttpResponse.RAW(200, "OK", nil, { $0.write(array) })
0056 }
0057 return .NotFound
0058 }
0059
0060 server.POST["/upload"] = { r in
0061 var response = ""
0062 for multipart in r.parseMultiPartFormData() {
0063 response += "Name: \(multipart.name) File name: \(multipart.fileName) Size: \(multipart.body.count)<br>"
0064 }
0065 return HttpResponse.OK(.Html(response))
0066 }
0067
0068 server.GET["/login"] = { r in
0069 if let html = NSData(contentsOfFile:"\(publicDir)/login.html") {
0070 var array = [UInt8](count: html.length, repeatedValue: 0)
0071 html.getBytes(&array, length: html.length)
0072 return HttpResponse.RAW(200, "OK", nil, { $0.write(array) })
0073 }
0074 return .NotFound
0075 }
0076
0077 server.POST["/login"] = { r in
0078 let formFields = r.parseUrlencodedForm()
0079 return HttpResponse.OK(.Html(formFields.map({ "\($0.0) = \($0.1)" }).joinWithSeparator("<br>")))
0080 }
0081
0082 server["/demo"] = { r in
0083 return .OK(.Html("<center><h2>Hello Swift</h2><img src=\"https://devimages.apple.com.edgekey.net/swift/images/swift-hero_2x.png\"/><br></center>"))
0084 }
0085
0086 server["/raw"] = { r in
0087 return HttpResponse.RAW(200, "OK", ["XXX-Custom-Header": "value"], { $0.write([UInt8]("test".utf8)) })
0088 }
0089
0090 server["/json"] = { r in
0091 let jsonObject: NSDictionary = [NSString(string: "foo"): NSNumber(int: 3), NSString(string: "bar"): NSString(string: "baz")]
0092 return .OK(.Json(jsonObject))
0093 }
0094
0095 server["/redirect"] = { r in
0096 return .MovedPermanently("http://www.google.com")
0097 }
0098
0099 server["/long"] = { r in
0100 var longResponse = ""
0101 for k in 0..<1000 { longResponse += "(\(k)),->" }
0102 return .OK(.Html(longResponse))
0103 }
0104
0105 server["/wildcard/*/test/*/:param"] = { r in
0106 return .OK(.Html(r.path))
0107 }
0108
0109 server["/stream"] = { r in
0110 return HttpResponse.RAW(200, "OK", nil, { w in
0111 for i in 0...100 {
0112 w.write([UInt8]("[chunk \(i)]".utf8));
0113 }
0114 })
0115 }
0116
0117 server["/websocket-echo"] = HttpHandlers.websocket({ (session, text) in
0118 session.writeText(text)
0119 }, { (session, binary) in
0120 session.writeBinary(binary)
0121 })
0122
0123 return server
0124 }
0125