(ns com.biffweb.my-project.middleware (:require [camel-snake-kebab.core :as csk] [clojure.pprint :as pp] [clojure.string :as str] [com.biffweb :as biff] [muuntaja.middleware :as muuntaja] [ring.middleware.anti-forgery :as csrf] [ring.middleware.defaults :as rd])) (defn wrap-clean-up-param-vals [handler] (fn [req] (pp/pprint (req :params)) (let [unknown-params (-> req :params (dissoc :__anti-forgery-token :game-code :players) (update-vals csk/->kebab-case-keyword)) req (-> req (update-in [:path-params :code] #(when % (str/lower-case %))) (update :params merge unknown-params))] (handler req)))) ;; 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 ))