diff options
author | Clyne Sullivan <clyne@bitgloo.com> | 2023-05-22 10:11:16 -0400 |
---|---|---|
committer | Clyne Sullivan <clyne@bitgloo.com> | 2023-05-22 10:11:16 -0400 |
commit | 11ad43675ff067cc808f79148eff4db286a9a913 (patch) | |
tree | 0973af76d9eb4da2914c59396525694932adacc9 /src/bitgloo_web/core.clj | |
parent | dbd5c38bc75b59537b9f36f1dec743cef8aed217 (diff) |
unify not found response
Diffstat (limited to 'src/bitgloo_web/core.clj')
-rw-r--r-- | src/bitgloo_web/core.clj | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/bitgloo_web/core.clj b/src/bitgloo_web/core.clj index b8823fb..ba34e71 100644 --- a/src/bitgloo_web/core.clj +++ b/src/bitgloo_web/core.clj @@ -1,6 +1,7 @@ (ns bitgloo-web.core (:gen-class) (:require [bitgloo-web.content :as content]) + (:require [clojure.java.io :as io]) (:require [clojure.string :as str]) (:require [ring.adapter.jetty :refer [run-jetty]]) (:require [ring.middleware.resource :refer [wrap-resource]]) @@ -8,6 +9,8 @@ (:require [ring.middleware.not-modified :refer [wrap-not-modified]]) (:require [ring.util.response :as resp])) +(def not-found (resp/not-found "Not found")) + (def image-extensions [".jpg" ".bmp"]) (defn image? [path] (some (partial str/ends-with? path) image-extensions)) @@ -15,22 +18,23 @@ (defn home-redirect [uri] (if (= "/" uri) "/home" uri)) (defn request-handler [content-path request] - (when (= :get (:request-method request)) - (-> (:uri request) - (home-redirect) - ((partial str content-path)) - (content/load-page) - (resp/response) - (resp/content-type "text/html") - (resp/charset "utf8")))) + (let [path (str content-path (home-redirect (:uri request)))] + (when-let [content (content/load-page path)] + (-> (resp/response content) + (resp/content-type "text/html") + (resp/charset "utf8"))))) (defn wrap-content-images [handler content-path] (fn [request] - (let [uri (:uri request)] - (if (and (= :get (:request-method request)) (image? uri)) - (resp/file-response (str content-path uri)) + (let [uri (:uri request) path (str content-path uri)] + (if (image? uri) + (when (.exists (io/file path)) (resp/file-response path)) (handler request))))) +(defn wrap-only-gets [handler] + (fn [request] + (when (= :get (:request-method request)) (handler request)))) + (defn wrap-log-request [handler] (fn [request] (-> request @@ -41,6 +45,8 @@ ((partial apply println))) (handler request))) +(defn wrap-not-found [handler] (fn [request] (or (handler request) not-found))) + (defn -main [& args] (if (= 2 (count args)) (let [port (-> args first Integer/parseInt) @@ -50,6 +56,8 @@ (wrap-resource "public") (wrap-content-type) (wrap-not-modified) + (wrap-only-gets) + (wrap-not-found) (wrap-log-request) (run-jetty {:port port}))) (println "usage: bitgloo port content-path"))) |