2021-03-10 21:46:40 +01:00

51 lines
1.8 KiB
Clojure

(ns chicken-master.handler
(:require [chicken-master.db :as db]
[chicken-master.api :as endpoints]
[clojure.edn :as edn]
[config.core :refer [env]]
[compojure.core :refer [GET defroutes routes context]]
[compojure.route :refer [resources not-found]]
[compojure.handler :refer [api]]
[ring.util.response :refer [resource-response]]
[ring.middleware.basic-authentication :refer [wrap-basic-authentication]]
[ring.middleware.cors :refer [wrap-cors]]))
(defn- handle-edn [response]
(if (= (get-in response [:headers "Content-Type"]) "application/edn")
(update response :body pr-str)
response))
(defn wrap-edn-response [handler]
(fn
([request]
(-> request handler handle-edn))
([request respond raise]
(-> request handler handle-edn respond))))
(defn wrap-edn-request [handler]
(fn
([request]
(handler
(if (= (:content-type request) "application/edn")
(update request :body (comp edn/read-string slurp))
request)))))
(defn authenticated? [name pass]
(db/valid-user? name pass))
(defroutes base-routes
(GET "/" [] (resource-response "index.html" {:root "public"}))
(resources "/")
(not-found "not found"))
(def handler (routes
(context "/api" []
(-> endpoints/all-routes
(wrap-basic-authentication authenticated?)
(wrap-cors :access-control-allow-origin (map re-pattern (env :allow-origin))
:access-control-allow-methods [:get :put :post :delete :options])
api
wrap-edn-request
wrap-edn-response))
base-routes))