mirror of
https://github.com/mruwnik/chicken-master.git
synced 2025-06-08 21:34:43 +02:00
51 lines
1.8 KiB
Clojure
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))
|