(ns auto-ap.handler (:require [amazonica.core :refer [defcredential]] [auto-ap.client-routes :as client-routes] [auto-ap.routes.auth :as auth] [auto-ap.routes.exports :as exports] [auto-ap.routes.ezcater :as ezcater] [auto-ap.routes.graphql :as graphql] [auto-ap.routes.invoices :as invoices] [auto-ap.routes.queries :as queries] [auto-ap.routes.yodlee2 :as yodlee2] [auto-ap.ssr.admin :as ssr-admin] [bidi.bidi :as bidi] [buddy.auth.backends.session :refer [session-backend]] [buddy.auth.backends.token :refer [jws-backend]] [buddy.auth.middleware :refer [wrap-authentication wrap-authorization]] [clojure.string :as str] [clojure.tools.logging :as log] [compojure.core :refer [ANY context defroutes GET routes]] [compojure.route :as route] [config.core :refer [env]] [mount.core :as mount] [ring.middleware.edn :refer [wrap-edn-params]] [ring.middleware.multipart-params :as mp] [ring.middleware.params :refer [wrap-params]] [ring.middleware.reload :refer [wrap-reload]] [ring.middleware.session :refer [wrap-session]] [ring.util.response :as response] [unilog.context :as lc])) (when (:aws-access-key-id env) (defcredential (:aws-access-key-id env) (:aws-secret-access-key env) (:aws-region env))) (def running? (atom false)) #_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]} (mount/defstate manage-running? :start (reset! running? true) :stop (reset! running? false)) (defroutes static-routes (GET "/" [] (response/resource-response "index.html" {:root "public"})) (route/resources "/") (routes (ANY "*" {:keys [uri]} (if (bidi/match-route client-routes/routes uri) (response/resource-response "index.html" {:root "public"}) {:status 404 :body "Not found"})))) (defroutes health-check (GET "/health-check" [] (if @running? {:status 200 :body "Ok"} {:status 503 :body "Application shut down"}))) (defroutes api-routes (context "/api" [] exports/export-routes yodlee2/routes queries/query2-routes invoices/routes graphql/routes ezcater/routes auth/routes health-check)) (def auth-backend (jws-backend {:secret (:jwt-secret env) :options {:alg :hs512}})) (defn wrap-transaction [handler] (fn [request] (handler request))) (def app-routes (routes (wrap-transaction api-routes) ssr-admin/admin-routes static-routes)) (defn wrap-logging [handler] (fn [request] (lc/with-context {:uri (:uri request) :source "request" :user-role (:user/role (:identity request)) :user-name (:user/name (:identity request))} (when-not (str/includes? (:uri request) "health-check") (log/info "Beginning request" (:uri request))) (handler request)))) #_{:clj-kondo/ignore [:clojure-lsp/unused-public-var]} (def app (-> #'app-routes (wrap-logging) (wrap-authorization auth-backend ) (wrap-authentication auth-backend (session-backend)) (wrap-session) (wrap-reload) (wrap-params) (mp/wrap-multipart-params) (wrap-edn-params)))