From 68d30b9c81c4e099e0111fe0bbb33715dd572e8c Mon Sep 17 00:00:00 2001 From: Grant Shangreaux Date: Sun, 23 Jun 2024 16:42:34 -0500 Subject: [109] Add: logout action and some session endpoint refactor --- site/home.lisp | 5 +++++ site/login.lisp | 20 +------------------- site/session.lisp | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 19 deletions(-) create mode 100644 site/session.lisp (limited to 'site') diff --git a/site/home.lisp b/site/home.lisp index 47d0f17..5267985 100644 --- a/site/home.lisp +++ b/site/home.lisp @@ -8,6 +8,11 @@ (:div :id "main" (:h1 "hey " (user-name user)) (:br) + (:div + (:form :method "POST" :action (wknd:route-to 'session.destroy) + (:button :type "submit" "Logout"))) + (:br) + (:br) (:div (:form :method "POST" :action (wknd:route-to 'create.invite) (:p "Initiate an invitation...") diff --git a/site/login.lisp b/site/login.lisp index d859e0d..7d07bb2 100644 --- a/site/login.lisp +++ b/site/login.lisp @@ -5,28 +5,10 @@ :returns "text/html" :handle (login-page)) -(wknd:defendpoint login.user - :post :route "login" - :parameters - (name string) - (password string) - :properties - (user user) - :authenticate (authenticate-login-user name password) - :handle (wknd:endpoint-redirect 'home.html)) - -(defun authenticate-login-user (name password) - (do> - found-user :when= (user-with-name name) - :when (equal (user-pwhash found-user) - (hash-string password (user-pwsalt found-user))) - session := (db:with-transaction () (make-instance 'session :user found-user)) - (wknd:set-cookie +session-cookie+ :value (key session)))) - (defun login-page () (page (:title "V A M P I R E ~ LOGIN") (:div (:h1 "I vant to suck your blood") - (:form :method "POST" :action (wknd:route-to 'login.user) + (:form :method "POST" :action (wknd:route-to 'session.create) (:input :placeholder "Name" :name "name") (:br) (:input :placeholder "Password" :type "password" :name "password") diff --git a/site/session.lisp b/site/session.lisp new file mode 100644 index 0000000..342d6d0 --- /dev/null +++ b/site/session.lisp @@ -0,0 +1,32 @@ +(in-package #:vampire) + +(wknd:defendpoint session.create + :post :to "login" + :parameters + (name string) + (password string) + :properties + (user user) + :authenticate (authenticate-user-login name password) + :handle (wknd:endpoint-redirect 'home.html)) + +(defun authenticate-user-login (name password) + (do> + found-user :when= (user-with-name name) + (print found-user) + :when (equal (user-pwhash found-user) + (hash-string password (user-pwsalt found-user))) + session := (db:with-transaction () (make-instance 'session :user found-user)) + (print session) + (wknd:set-cookie +session-cookie+ :value (key session)))) + +(wknd:defendpoint session.destroy + :using user-known + :post :to "logout" + :handle (do> + session := (object-with-key (wknd:get-cookie +session-cookie+)) + (db:delete-object session) + (wknd:set-cookie +session-cookie+ :value nil) + (wknd:endpoint-redirect 'login.html))) + + -- cgit v1.2.3