1
0

DemoServer.swift 3.0 KB

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