From a6c251123bbe9c174294287d494c4be99e40287a Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 18 Feb 2023 09:18:10 -0800 Subject: Saturday Pair Session --- endpoints.lisp | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) (limited to 'endpoints.lisp') diff --git a/endpoints.lisp b/endpoints.lisp index 87fc51e..c9a8612 100644 --- a/endpoints.lisp +++ b/endpoints.lisp @@ -25,38 +25,54 @@ NIL if there is no session for the current request. I.e. It should be called within the scope of a request handler." (session-with-id (lzb:request-cookie +session-cookie-name+ ))) -(defmacro with-hero-session ((hero &key session (redirect "/tavern-door")) &body body) +(defmacro with-session ((player &key session (redirect "/game-room")) &body body) (let ((session (or session (gensym "SESSION")))) `(a:if-let (,session (current-session)) - (let ((,hero (session-hero ,session))) + (let ((,player (session-player ,session))) ,@body) (redirect-to ,redirect)))) ;;; OPEN ENDPOINTS + (defendpoint* :get "/" () () (redirect-to "/tavern-door")) (defendpoint* :get "/tavern-door" () () - (a:if-let (name (flashed-value :tavern-door)) - (doorkeeper :message (format nil "M'fraid I've n'er 'eard o' ~a." name)) + (a:if-let (name (flashed-value :game-room)) + (doorkeeper :message (format nil "Ne'er 'erd of ye ~a" name)) (doorkeeper))) (defendpoint* :post "/tavern-door" () () - (with-plist ((name :name)) (lzb:request-body) - (a:if-let ((hero (hero-known-as name))) - (a:when-let ((sesh (new-sesh hero))) + (with-plist ((nick :nick)) (lzb:request-body) + (a:if-let ((player (player-with-nick (string-trim " " nick)))) + (a:when-let ((sesh (new-sesh player))) (lzb:set-response-cookie +session-cookie-name+ (session-id sesh) :path "/" :domain "localhost") ; TODO: generalize domain (redirect-to "/tavern")) (progn - (flash :tavern-door name) - (redirect-to (format nil "/tavern-door")))))) + (flash :game-room nick) + (redirect-to "/tavern-door")))) ) + +(defendpoint* :get "/register" () () + (register)) + +(defun check-valid-nick (name) + "Errors with 400 if the name is not a valid hero name." + (unless (valid-nick-p name) + (lzb:http-err 400 (format nil "Player Nick Invalid")))) + +(defendpoint* :post "/register" () () + (with-plist ((nick :nick)) (lzb:request-body) + (check-valid-nick nick) + (register-player nick) + (redirect-to "/tavern-door"))) (defendpoint* :get "/godess-shrine" () () (godess-shrine)) + (defendpoint* :post "/godess-shrine" () () (with-plist ((name :name)) (lzb:request-body) (birth-from-the-goddess-loins name) @@ -65,5 +81,5 @@ I.e. It should be called within the scope of a request handler." ;;; SESSION ENDPOINTS (defendpoint* :get "/tavern" () () - (with-hero-session (hero) - (tavern hero))) + (with-session (player) + (tavern player))) -- cgit v1.2.3