diff options
Diffstat (limited to 'site/session.lisp')
-rw-r--r-- | site/session.lisp | 32 |
1 files changed, 32 insertions, 0 deletions
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))) + + |