diff options
-rw-r--r-- | seed.lisp | 13 | ||||
-rw-r--r-- | site/home.lisp | 5 | ||||
-rw-r--r-- | site/login.lisp | 20 | ||||
-rw-r--r-- | site/session.lisp | 32 | ||||
-rw-r--r-- | vampire.asd | 1 |
5 files changed, 52 insertions, 19 deletions
diff --git a/seed.lisp b/seed.lisp new file mode 100644 index 0000000..40fc653 --- /dev/null +++ b/seed.lisp @@ -0,0 +1,13 @@ +(in-package :vampire) + +(db:with-transaction () + (let ((alucard (make-instance 'user :name "alucard"))) + (setf (user-pwhash alucard) (hash-string "password" (user-pwsalt alucard))) + (make-instance 'invite :maker alucard) + (mapcar + (lambda (s) + (make-instance + 'playlist + :title s :user alucard :editors (list alucard) + :cover-image "https://cicadas.surf/~shoshin/casiopeia/basement%20days/cover.png")) + '("One" "Two" "Three")))) 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))) + + diff --git a/vampire.asd b/vampire.asd index 4ac6d11..a3d5799 100644 --- a/vampire.asd +++ b/vampire.asd @@ -32,6 +32,7 @@ (:file "css") (:file "html") (:file "user-known") + (:file "session") (:file "login") (:file "invites") (:file "home") |