From 5a586d369c823a040989283a3650444a2b0c0913 Mon Sep 17 00:00:00 2001 From: Grant Shangreaux Date: Wed, 19 Jun 2024 12:01:29 -0500 Subject: [87] Add: invite creation, listing, and deletion when used up --- site/home.lisp | 10 +++++++++- site/invites.lisp | 14 ++++++++++++++ site/login.lisp | 6 ++++-- vampire.asd | 1 + 4 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 site/invites.lisp diff --git a/site/home.lisp b/site/home.lisp index dcf929a..f84700e 100644 --- a/site/home.lisp +++ b/site/home.lisp @@ -5,4 +5,12 @@ :get :route "" :returns "text/html" :handle (page (:title "V A M P I R E") - (:p "hey " (user-name user)))) + (:p "hey " (user-name user)) + (:div + (:form :method "POST" :action "/invites" + (:p "Initiate an invitation...") + (:button :type "submit" "Bite Someone"))) + (:br) + (:h2 "Outstanding inBites:") + (:ul (dolist (i (invites-by-maker user)) + (:li (key i)))))) diff --git a/site/invites.lisp b/site/invites.lisp new file mode 100644 index 0000000..b463a4d --- /dev/null +++ b/site/invites.lisp @@ -0,0 +1,14 @@ +(in-package #:vampire) + +(wknd:defendpoint invites + :using user-known + :post :to "invites" + :handle + (progn + (db:with-transaction () + (make-instance 'invite :maker user :uses-remaining 1)) + (wknd:endpoint-redirect 'home.html))) + +(defun invite-validp (invite) + (let ((uses (uses-remaining invite))) + (or (< 0 uses) (null uses)))) diff --git a/site/login.lisp b/site/login.lisp index 0310fe8..ef4ba26 100644 --- a/site/login.lisp +++ b/site/login.lisp @@ -40,11 +40,13 @@ :authenticate (and (equal password password2) (setf invite (object-with-key invite-code))) - :authorize (or (null (uses-remaining invite)) (plusp (uses-remaining invite))) + :authorize (invite-validp invite) :handle (progn (db:with-transaction () (when (uses-remaining invite) - (decf (uses-remaining invite))) + (decf (uses-remaining invite)) + (when (zerop (uses-remaining invite)) + (db:delete-object invite))) (let ((user (make-instance 'user :name username))) (setf (user-pwhash user) (hash-string password (user-pwsalt user))))) (wknd:endpoint-redirect 'login.html))) diff --git a/vampire.asd b/vampire.asd index 0394b3a..4ac6d11 100644 --- a/vampire.asd +++ b/vampire.asd @@ -33,6 +33,7 @@ (:file "html") (:file "user-known") (:file "login") + (:file "invites") (:file "home") ;;(:file "navigation") ;;(:file "about") -- cgit v1.2.3