diff options
author | Grant Shangreaux <grant@unabridgedsoftware.com> | 2024-06-23 16:42:34 -0500 |
---|---|---|
committer | Grant Shangreaux <grant@unabridgedsoftware.com> | 2024-06-23 16:42:34 -0500 |
commit | 68d30b9c81c4e099e0111fe0bbb33715dd572e8c (patch) | |
tree | efb4c43690494fddb47298f253a05092b2564160 /site | |
parent | ce470567c4421da7d073685cf845fdc4448aadc0 (diff) |
[109] Add: logout action and some session endpoint refactor
Diffstat (limited to 'site')
-rw-r--r-- | site/home.lisp | 5 | ||||
-rw-r--r-- | site/login.lisp | 20 | ||||
-rw-r--r-- | site/session.lisp | 32 |
3 files changed, 38 insertions, 19 deletions
diff --git a/site/home.lisp b/site/home.lisp index 47d0f17..5267985 100644 --- a/site/home.lisp +++ b/site/home.lisp @@ -9,6 +9,11 @@ (: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...") (:button :type "submit" "Bite Someone"))) 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))) + + |