64 lines
2 KiB
Clojure
64 lines
2 KiB
Clojure
|
|
(ns com.biffweb.my-project.middleware
|
||
|
|
(:require [com.biffweb :as biff]
|
||
|
|
[muuntaja.middleware :as muuntaja]
|
||
|
|
[ring.middleware.anti-forgery :as csrf]
|
||
|
|
[ring.middleware.defaults :as rd]))
|
||
|
|
|
||
|
|
(defn wrap-redirect-signed-in [handler]
|
||
|
|
(fn [{:keys [session] :as ctx}]
|
||
|
|
(if (some? (:uid session))
|
||
|
|
{:status 303
|
||
|
|
:headers {"location" "/app"}}
|
||
|
|
(handler ctx))))
|
||
|
|
|
||
|
|
(defn wrap-signed-in [handler]
|
||
|
|
(fn [{:keys [session] :as ctx}]
|
||
|
|
(if (some? (:uid session))
|
||
|
|
(handler ctx)
|
||
|
|
{:status 303
|
||
|
|
:headers {"location" "/signin?error=not-signed-in"}})))
|
||
|
|
|
||
|
|
;; Stick this function somewhere in your middleware stack below if you want to
|
||
|
|
;; inspect what things look like before/after certain middleware fns run.
|
||
|
|
#_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]}
|
||
|
|
(defn wrap-debug [handler]
|
||
|
|
(fn [ctx]
|
||
|
|
(let [response (handler ctx)]
|
||
|
|
(println "REQUEST")
|
||
|
|
(biff/pprint ctx)
|
||
|
|
#_{:clj-kondo/ignore [:inline-def :clojure-lsp/unused-public-var]}
|
||
|
|
(def ctx* ctx)
|
||
|
|
(println "RESPONSE")
|
||
|
|
(biff/pprint response)
|
||
|
|
#_{:clj-kondo/ignore [:inline-def :clojure-lsp/unused-public-var]}
|
||
|
|
(def response* response)
|
||
|
|
response)))
|
||
|
|
|
||
|
|
(defn wrap-site-defaults [handler]
|
||
|
|
(-> handler
|
||
|
|
biff/wrap-render-rum
|
||
|
|
biff/wrap-anti-forgery-websockets
|
||
|
|
csrf/wrap-anti-forgery
|
||
|
|
biff/wrap-session
|
||
|
|
muuntaja/wrap-params
|
||
|
|
muuntaja/wrap-format
|
||
|
|
(rd/wrap-defaults (-> rd/site-defaults
|
||
|
|
(assoc-in [:security :anti-forgery] false)
|
||
|
|
(assoc-in [:responses :absolute-redirects] true)
|
||
|
|
(assoc :session false)
|
||
|
|
(assoc :static false)))))
|
||
|
|
|
||
|
|
(defn wrap-api-defaults [handler]
|
||
|
|
(-> handler
|
||
|
|
muuntaja/wrap-params
|
||
|
|
muuntaja/wrap-format
|
||
|
|
(rd/wrap-defaults rd/api-defaults)))
|
||
|
|
|
||
|
|
(defn wrap-base-defaults [handler]
|
||
|
|
(-> handler
|
||
|
|
biff/wrap-https-scheme
|
||
|
|
biff/wrap-resource
|
||
|
|
biff/wrap-internal-error
|
||
|
|
biff/wrap-ssl
|
||
|
|
biff/wrap-log-requests))
|