Use redirects for index-files

This commit is contained in:
Tommi Reiman 2018-06-04 23:21:03 +03:00
parent fa078470c5
commit a99789216c

View file

@ -96,26 +96,30 @@
(fn (fn
([request] (handler request)) ([request] (handler request))
([request respond _] (respond (handler request))))) ([request respond _] (respond (handler request)))))
trim-path (fn [& paths] (str/replace (apply str paths) "//" "/")) join-paths (fn [& paths]
(str/replace (str/replace (str/join "/" paths) #"([/]+)" "/") #"/$" ""))
resource-response (fn [path] resource-response (fn [path]
(if-let [response (or (paths (trim-path "/" path)) (response/resource-response path options))] (if-let [response (or (paths (join-paths "/" path))
(response/resource-response path options))]
(response/content-type response (mime-type/ext-mime-type path)))) (response/content-type response (mime-type/ext-mime-type path))))
path-or-index-response (fn [path uri] path-or-index-response (fn [path uri]
(or (resource-response path) (or (resource-response path)
(loop [[file & files] index-files] (loop [[file & files] index-files]
(if file (if file
(let [path (trim-path path file)] (if (resource-response (join-paths path file))
(if (resource-response path) {:status 302 :headers {"Location" (join-paths uri file)}}
{:status 302 :headers {"Location" (trim-path uri "/" path)}} (recur files))))))
(recur files)))))))
handler (if path handler (if path
(fn [request] (fn [request]
(let [uri (:uri request)] (let [uri (:uri request)]
(if-let [path (if (>= (count uri) path-size) (subs uri path-size))] (if-let [path (if (>= (count uri) path-size) (subs uri path-size))]
(path-or-index-response path uri)))) (path-or-index-response path uri))))
(fn [request] (fn [request]
(let [path (-> request :path-params parameter)] (let [uri (:uri request)
(or (path-or-index-response path path) {:status 404}))))] path (-> request :path-params parameter)]
(or (path-or-index-response path uri)
;; TODO: use generic not-found handler
{:status 404}))))]
(create handler))))) (create handler)))))
(defn ring-handler (defn ring-handler