;;;; session.lisp (in-package :vampire) ;;; SESSION CLASS (defclass/bknr session (keyed) ((user :std (error "Sessions must be associated with users.")))) (defun make-session (user) (with-transaction () (make-instance 'session :user user))) ;;; SESSION PARAMETER KEYS (defparameter +session-key+ "vampire-session-key" "Stored in the browser's local storage") ;;; SESSION ACCESSORS (defun session-key (window) (jonathan:parse (storage-element window :local +session-key+))) (defun (setf session-key) (val window) (setf (storage-element window :local +session-key+) (jonathan:to-json val))) (defun session-user (clog-obj) (when-let (obj (object-with-key (session-key (window (connection-body clog-obj))))) (when (typep obj 'session) (user obj))))