(ns blog.handlers (:require [cljs.core.async :refer [go, take!, put!, !, chan]] [cljs.core.async.interop :refer-macros [
{:articles articles :authorized (some? session) :url "/"} (clj->js)))) (catch js/Error err (res/status 500) (res/send (ex-message err)))))))) (defn login-page-handler-factory [] (fn [req res] (let [session (.-user (.-session req))] (.render res "login" (-> {:authorized (some? session)} (clj->js)))))) (defn login-page-auth-handler-factory [] (fn [req res] (let [session (.-user (.-session req)) login (.-login (.-body req)) password (.-password (.-body req))] (cond (some? session) (.redirect res "/") (and (= login "admin") (= password "admin")) (do ; req.session.user = "admin"; (set! (.-user (.-session req)) "admin") (.redirect res "/admin")) :else (.redirect res "/") )))) (defn logout-page-handler-factory [] (fn [req res] (let [session (.-user (.-session req))] (cond (some? session) (do (.destroy (.-session req)) (.redirect res "/")) :else (.redirect res "/") )))) (defn is-user-authorized "Middleware to check if user is authorized." [req res next] (if (some? (.-user (.-session req))) (next) (next (new js/Error "User not authorized!!!")))) (defn user-not-authorized-factory "Middleware to redirect authorized users to a url." ([url] (fn [err req res next] (.redirect res "/login"))) ([] (user-not-authorized-factory "/login"))) (defn admin-panel-handler-factory [client] (fn [req res] (let [channel (chan) session (.-user (.-session req)) search (.-search (.-query req))] (go (try (let [articles (if (nil? search) ( {:articles articles :authorized (some? session) :url "/admin"} (clj->js)))) (catch js/Error err (res/status 500) (res/send (ex-message err)))))))) (defn htmx-get-article-handler-factory [client] (fn [req res] (let [channel (chan) id (.-id (.-params req))] (go (try (let [article ( {:article article :layout false} (clj->js)))))) (catch js/Error err (res/status 500) (res/send (ex-message err)))))))) (defn htmx-get-article-row-handler-factory [client] (fn [req res] (let [channel (chan) id (.-id (.-params req))] (go (try (let [article ( {:article article :layout false } (clj->js)))))) (catch js/Error err (res/status 500) (res/send (ex-message err)))))))) (defn htmx-get-article-preview-content-handler-factory [client] (fn [req res] (let [channel (chan) id (.-id (.-params req))] (go (try (let [article ( {:article article :layout false } (clj->js)))))) (catch js/Error err (res/status 500) (res/send (ex-message err)))))))) (defn htmx-get-article-edit-content-handler-factory [client] (fn [req res] (let [channel (chan) id (.-id (.-params req))] (go (try (let [article ( {:article article :layout false } (clj->js)))))) (catch js/Error err (res/status 500) (res/send (ex-message err)))))))) (defn htmx-update-article-handler-factory [client] (fn [req res] (let [channel (chan) article {:id (.-id (.-params req)) :title (.-title (.-body req)) :content (.-content (.-body req))}] (go (try (let [id ( {:articles articles :layout false} (clj->js)))) (catch js/Error err (res/status 500) (res/send (ex-message err)))))))) (defn htmx-admin-search-articles-handler-factory [client] (fn [req res] (let [channel (chan) search (.-search (.-body req))] (go (try (let [articles ( {:articles articles :layout false} (clj->js)))) (catch js/Error err (res/status 500) (res/send (ex-message err)))))))) (defn htmx-create-article-handler-factory [client] (fn [req res] (let [channel (chan) title (.-title (.-body req)) content (.-content (.-body req))] (go (try (let [id (