/
server.clj
44 lines (40 loc) · 1.91 KB
/
server.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
(ns cryogen.server
(:require [compojure.core :refer [GET defroutes]]
[compojure.route :as route]
[ring.util.response :refer [redirect file-response]]
[ring.util.codec :refer [url-decode]]
[cryogen-core.watcher :refer [start-watcher!]]
[cryogen-core.plugins :refer [load-plugins]]
[cryogen-core.compiler :refer [compile-assets-timed]]
[cryogen-core.config :refer [resolve-config]]
[cryogen-core.io :refer [path]]))
(defn init []
(load-plugins)
(compile-assets-timed)
(let [ignored-files (-> (resolve-config) :ignored-files)]
(start-watcher! "content" ignored-files compile-assets-timed)
(start-watcher! "themes" ignored-files compile-assets-timed)))
(defn wrap-subdirectories
[handler]
(fn [request]
(let [{:keys [clean-urls blog-prefix public-dest]} (resolve-config)
req-uri (.substring (url-decode (:uri request)) 1)
res-path (condp = clean-urls
:trailing-slash (path req-uri "index.html")
:no-trailing-slash (if (or (= req-uri "")
(= req-uri "/")
(= req-uri
(.substring blog-prefix 1)))
(path req-uri "index.html")
(path (str req-uri ".html")))
:dirty (path (str req-uri ".html")))]
(or (file-response res-path {:root public-dest})
(handler request)))))
(defroutes routes
(GET "/" [] (redirect (let [config (resolve-config)]
(path (:blog-prefix config)
(when (= (:clean-urls config) :dirty)
"index.html")))))
(route/files "/")
(route/not-found "Page not found"))
(def handler (wrap-subdirectories routes))