DemoServer.swift 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. //
  2. // DemoServer.swift
  3. // Swifter
  4. // Copyright (c) 2015 Damian Kołakowski. All rights reserved.
  5. //
  6. import Foundation
  7. import SwifteriOS
  8. public func demoServer(publicDir: String?) -> HttpServer {
  9. let server = HttpServer()
  10. if let publicDir = publicDir {
  11. server["/resources/(.+)"] = HttpHandlers.directory(publicDir)
  12. }
  13. server["/files(.+)"] = HttpHandlers.directoryBrowser("~/")
  14. server["/magic"] = { .OK(.Html("You asked for " + $0.url)) }
  15. server["/test"] = { request in
  16. var headersInfo = ""
  17. for (name, value) in request.headers {
  18. headersInfo += "\(name) : \(value)<br>"
  19. }
  20. var queryParamsInfo = ""
  21. for (name, value) in request.urlParams {
  22. queryParamsInfo += "\(name) : \(value)<br>"
  23. }
  24. return .OK(.Html("<h3>Address: \(request.address)</h3><h3>Url:</h3> \(request.url)<h3>Method: \(request.method)</h3><h3>Headers:</h3>\(headersInfo)<h3>Query:</h3>\(queryParamsInfo)"))
  25. }
  26. server["/params/(.+)/(.+)"] = { request in
  27. var capturedGroups = ""
  28. for (index, group) in request.capturedUrlGroups.enumerate() {
  29. capturedGroups += "Expression group \(index) : \(group)<br>"
  30. }
  31. return .OK(.Html("Url: \(request.url)<br>Method: \(request.method)<br>\(capturedGroups)"))
  32. }
  33. server["/json"] = { request in
  34. return .OK(.Json(["posts" : [[ "id" : 1, "message" : "hello world"],[ "id" : 2, "message" : "sample message"]], "new_updates" : false]))
  35. }
  36. server["/redirect"] = { request in
  37. return .MovedPermanently("http://www.google.com")
  38. }
  39. server["/long"] = { request in
  40. var longResponse = ""
  41. for k in 0..<1000 { longResponse += "(\(k)),->" }
  42. return .OK(.Html(longResponse))
  43. }
  44. server["/demo"] = { request in
  45. return .OK(.Html("<center><h2>Hello Swift</h2>" +
  46. "<img src=\"https://devimages.apple.com.edgekey.net/swift/images/swift-hero_2x.png\"/><br>" +
  47. "</center>"))
  48. }
  49. server["/login"] = { request in
  50. switch request.method.uppercaseString {
  51. case "GET":
  52. if let rootDir = publicDir {
  53. if let html = NSData(contentsOfFile:"\(rootDir)/login.html") {
  54. return HttpResponse.RAW(200, "OK", nil, html)
  55. } else {
  56. return .NotFound
  57. }
  58. }
  59. case "POST":
  60. let formFields = request.parseForm()
  61. return HttpResponse.OK(.Html(formFields.map({ "\($0.0) = \($0.1)" }).joinWithSeparator("<br>")))
  62. default:
  63. return .NotFound
  64. }
  65. return .NotFound
  66. }
  67. server["/raw"] = { request in
  68. return HttpResponse.RAW(200, "OK", ["XXX-Custom-Header": "value"], "Sample Response".dataUsingEncoding(NSUTF8StringEncoding)!)
  69. }
  70. server["/"] = { request in
  71. var listPage = "Available services:<br><ul>"
  72. listPage += server.routes.map({ "<li><a href=\"\($0)\">\($0)</a></li>"}).joinWithSeparator("")
  73. return .OK(.Html(listPage))
  74. }
  75. return server
  76. }