diff --git a/src/main/blog/handlers.cljs b/src/main/blog/handlers.cljs index 9408a6c..37fc7a0 100644 --- a/src/main/blog/handlers.cljs +++ b/src/main/blog/handlers.cljs @@ -22,6 +22,46 @@ (res/status 500) (res/send (ex-message err)))))))) +(defn login-page-handler-factory + [] + (fn [req res] + (.render res "login"))) + +(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 admin-panel-handler-factory [client] (fn [req res] diff --git a/src/main/blog/server.cljs b/src/main/blog/server.cljs index 9728c8d..36e43d5 100644 --- a/src/main/blog/server.cljs +++ b/src/main/blog/server.cljs @@ -65,7 +65,16 @@ (. app get "/" (handlers/index-page-handler-factory client)) - (fn [req res] + + (. app get "/login" + (handlers/login-page-handler-factory)) + + (. app post "/login" + (handlers/login-page-auth-handler-factory)) + + (. app get "/logout" + (handlers/logout-page-handler-factory)) + (. app get "/admin" (handlers/admin-panel-handler-factory client)) diff --git a/views/login.hbs b/views/login.hbs new file mode 100644 index 0000000..1b6639a --- /dev/null +++ b/views/login.hbs @@ -0,0 +1,25 @@ +
+
+
+
+
+

+ Sign in to your account +

+
+
+ + +
+
+ + +
+ +
+
+
+
+
+
+