main.swift 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import PerfectHTTP
  2. import PerfectHTTPServer
  3. import PerfectLib
  4. import Foundation
  5. func plaintextHandler(request: HTTPRequest, response: HTTPResponse) {
  6. response.appendBody(string: "Hello, World!")
  7. setHeaders(response: response, contentType: "text/plain")
  8. response.completed()
  9. }
  10. func jsonHandler(request: HTTPRequest, response: HTTPResponse) {
  11. var helloDictionary: [String: String] = [:]
  12. helloDictionary["message"] = "Hello, World!"
  13. let errorPayload: [String: Any] = [
  14. "error": "Could not set body!"
  15. ]
  16. var responseString: String = ""
  17. var errorString: String = ""
  18. do {
  19. errorString = try errorPayload.jsonEncodedString()
  20. } catch {
  21. // Nothing to do here - we already have an empty value
  22. }
  23. do {
  24. responseString = try helloDictionary.jsonEncodedString()
  25. response.appendBody(string: responseString)
  26. } catch {
  27. response.status = HTTPResponseStatus.internalServerError
  28. response.appendBody(string: errorString)
  29. }
  30. setHeaders(response: response, contentType: "application/json")
  31. response.completed()
  32. }
  33. // Helpers
  34. func setHeaders(response: HTTPResponse, contentType: String) {
  35. response.setHeader(.contentType, value: contentType)
  36. response.setHeader(.custom(name: "Server"), value: "Perfect")
  37. let currDate: String = getCurrDate()
  38. response.setHeader(.custom(name: "Date"), value: currDate)
  39. }
  40. func getCurrDate() -> String {
  41. let now = getNow()
  42. do {
  43. let formatted = try formatDate(now, format: "%a, %d %b %Y %H:%M:%S %Z", timezone: nil, locale: nil)
  44. return formatted
  45. } catch {
  46. return "error formatting date string"
  47. }
  48. }
  49. var routes = Routes()
  50. routes.add(method: .get, uri: "/json", handler: jsonHandler)
  51. routes.add(method: .get, uri: "/plaintext", handler: plaintextHandler)
  52. routes.add(method: .get, uri: "/**",
  53. handler: StaticFileHandler(documentRoot: "./webroot", allowResponseFilters: true).handleRequest)
  54. try HTTPServer.launch(name: "localhost",
  55. port: 8080,
  56. routes: routes,
  57. responseFilters: [
  58. (PerfectHTTPServer.HTTPFilter.contentCompression(data: [:]), HTTPFilterPriority.high)])