DemoServer.swift 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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["/test"] = { request in
  15. var headersInfo = ""
  16. for (name, value) in request.headers {
  17. headersInfo += "\(name) : \(value)<br>"
  18. }
  19. let response = "<html><body>Url: \(request.url)<br>Method: \(request.method)<br>\(headersInfo)</body></html>"
  20. return .OK(.RAW(response))
  21. }
  22. server["/params/(.+)/(.+)"] = { request in
  23. var capturedGroups = ""
  24. for (index, group) in enumerate(request.capturedUrlGroups) {
  25. capturedGroups += "Expression group \(index) : \(group)<br>"
  26. }
  27. let response = "<html><body>Url: \(request.url)<br>Method: \(request.method)<br>\(capturedGroups)</body></html>"
  28. return .OK(.RAW(response))
  29. }
  30. server["/json"] = { request in
  31. return .OK(.JSON(["posts" : [[ "id" : 1, "message" : "hello world"],[ "id" : 2, "message" : "sample message"]], "new_updates" : false]))
  32. }
  33. server["/redirect"] = { request in
  34. return .MovedPermanently("http://www.google.com")
  35. }
  36. server["/long"] = { request in
  37. var longResponse = ""
  38. for k in 0..<1000 { longResponse += "(\(k)),->" }
  39. return .OK(.RAW(longResponse))
  40. }
  41. server["/demo"] = { request in
  42. return .OK(.RAW("<html><body><center><h2>Hello Swift</h2>" +
  43. "<img src=\"https://devimages.apple.com.edgekey.net/swift/images/swift-hero_2x.png\"/><br>" +
  44. "</center></body></html>"))
  45. }
  46. server["/login"] = { request in
  47. println(">> request method:\(request.method.uppercaseString)")
  48. var method = request.method.uppercaseString
  49. if method == "GET" {
  50. if let rootDir = publicDir{
  51. if let html = String(contentsOfFile:"\(rootDir)/login.html", encoding: NSUTF8StringEncoding, error: nil){
  52. return .OK(.RAW(html))
  53. }else{
  54. return .NotFound
  55. }
  56. }
  57. }else if method == "POST"{
  58. println(">> post data: \(NSString(data:request.body!,encoding:NSUTF8StringEncoding))")
  59. var html = "<html><body>"
  60. let body = NSString(data: request.body!, encoding: NSUTF8StringEncoding)
  61. if let parameters = body?.componentsSeparatedByString("&"){
  62. if let email = parameters[0] as? String{
  63. html += "\(email)<br>"
  64. }
  65. if let password = parameters[1] as? String{
  66. html += "\(password)"
  67. }
  68. }
  69. html += "</body></html>"
  70. return .OK(.RAW(html))
  71. //return .MovedPermanently("http://github.com")
  72. }
  73. return .NotFound
  74. }
  75. server["/"] = { request in
  76. var listPage = "<html><body>Available services:<br><ul>"
  77. for item in server.routes() {
  78. listPage += "<li><a href=\"\(item)\">\(item)</a></li>"
  79. }
  80. listPage += "</ul></body></html>"
  81. return .OK(.RAW(listPage))
  82. }
  83. return server
  84. }