From 11ad43675ff067cc808f79148eff4db286a9a913 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Mon, 22 May 2023 10:11:16 -0400 Subject: unify not found response --- src/bitgloo_web/content.clj | 16 +++++----------- src/bitgloo_web/core.clj | 30 +++++++++++++++++++----------- 2 files changed, 24 insertions(+), 22 deletions(-) (limited to 'src/bitgloo_web') diff --git a/src/bitgloo_web/content.clj b/src/bitgloo_web/content.clj index 4aaa2c0..00a8e2a 100644 --- a/src/bitgloo_web/content.clj +++ b/src/bitgloo_web/content.clj @@ -13,8 +13,6 @@ (def page-footer [:div#footer [:span "© Clyne Sullivan 2023"]]) -(def page-not-found [:div "Page not found"]) - (defn md-file? [path] (str/ends-with? path ".md")) (defn get-file-list [path] (->> path io/file .listFiles sort)) @@ -23,14 +21,10 @@ (defn render-md-files [file-list] (for [f file-list] [:div.block (parse-md-file f)])) -(defn load-page-contents [path] - (let [file-list (filter md-file? (get-file-list path))] - (if (empty? file-list) - page-not-found - [:div#posts (render-md-files file-list)]))) - (defn load-page [path] - (page/html5 - [:head [:title "bitgloo"] (page/include-css "/main.css")] - [:body [:div#container page-header (load-page-contents path) page-footer]])) + (let [file-list (filter md-file? (get-file-list path))] + (when-not (empty? file-list) + (page/html5 + [:head [:title "bitgloo"] (page/include-css "/main.css")] + [:body page-header [:div#posts (render-md-files file-list)] page-footer])))) 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"))) -- cgit v1.2.3