DemoServer.swift 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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["/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>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 enumerate(request.capturedUrlGroups) {
  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 .RAW(200, html)
  55. } else {
  56. return .NotFound
  57. }
  58. }
  59. break;
  60. case "POST":
  61. if let body = request.body {
  62. return .OK(.HTML(body))
  63. } else {
  64. return .OK(.HTML("No POST params."))
  65. }
  66. default:
  67. return .NotFound
  68. }
  69. return .NotFound
  70. }
  71. server["/"] = { request in
  72. var listPage = "Available services:<br><ul>"
  73. enumerate(server.routes())
  74. for item in server.routes() {
  75. listPage += "<li><a href=\"\(item)\">\(item)</a></li>"
  76. }
  77. listPage += "</ul>"
  78. return .OK(.HTML(listPage))
  79. }
  80. return server
  81. }