server.clj 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. (ns cryogen.server
  2. (:require [compojure.core :refer [GET defroutes]]
  3. [compojure.route :as route]
  4. [ring.util.response :refer [redirect resource-response]]
  5. [ring.util.codec :refer [url-decode]]
  6. [cryogen-core.watcher :refer [start-watcher!]]
  7. [cryogen-core.plugins :refer [load-plugins]]
  8. [cryogen-core.compiler :refer [compile-assets-timed read-config]]
  9. [cryogen-core.io :refer [path]]))
  10. (defn init []
  11. (load-plugins)
  12. (compile-assets-timed)
  13. (let [ignored-files (-> (read-config) :ignored-files)]
  14. (start-watcher! "resources/templates" ignored-files compile-assets-timed)))
  15. (defn wrap-subdirectories
  16. [handler]
  17. (fn [request]
  18. (let [req-uri (.substring (url-decode (:uri request)) 1)
  19. res-path (path req-uri (when (:clean-urls? (read-config)) "index.html"))]
  20. (or (resource-response res-path {:root "public"})
  21. (handler request)))))
  22. (defroutes routes
  23. (GET "/" [] (redirect (let [config (read-config)]
  24. (path (:blog-prefix config) "/"
  25. (when-not (:clean-urls? config) "index.html")))))
  26. (route/resources "/")
  27. (route/not-found "Page not found"))
  28. (def handler (wrap-subdirectories routes))