X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sessions.lisp;h=6c63e0433bd82499164e6655b6dac95db9d4736c;hb=cf7030dd6955c663f1f1422ff61c3aac41e4b8fa;hp=39e2fe579efde1b469f7656f70de28ecbc96e667;hpb=0c0d797b5e6c5afa9050b8021ea4729f4ab68aca;p=wol.git diff --git a/sessions.lisp b/sessions.lisp index 39e2fe5..6c63e04 100644 --- a/sessions.lisp +++ b/sessions.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: July 2003 ;;;; -;;;; $Id: sessions.lisp,v 1.4 2003/08/08 23:40:13 kevin Exp $ +;;;; $Id$ ;;;; ;;;; This file and Wol are Copyright (c) 2003 by Kevin M. Rosenberg ;;;; ************************************************************************* @@ -15,61 +15,52 @@ (in-package #:wol) -#|| -(awhen (and session-id (find-websession session-id ent)) - (setf (websession-from-req req) it) - (setf (websession-method it) :url)) -||# - (defun find-websession (key ent) (let ((sessions (sessions (session-master (entity-project ent))))) (maphash (lambda (k v) (declare (ignore k)) (when (equal key (websession-key v)) - (setf (websession-lastref v) (get-universal-time)) - (return-from find-websession v))) + (setf (websession-lastref v) (get-universal-time)) + (return-from find-websession v))) sessions) nil)) (defun is-session-enabled (ent) (not (null (sessions (session-master (entity-project ent)))))) - + (defun make-websession (req ent) (let* ((key (random-string :length +length-session-id+ - :set :lower-alphanumeric)) - (sess (make-instance 'websession - :key key - :lastref (get-universal-time) - :lifetime (lifetime (session-master (entity-project ent))) - :method :try-cookie)) - (hash (sessions (session-master (entity-project ent))))) + :set :lower-alphanumeric)) + (sess (make-instance 'websession + :key key + :lastref (get-universal-time) + :lifetime (lifetime (session-master (entity-project ent))) + :method :try-cookie)) + (hash (sessions (session-master (entity-project ent))))) (when hash (setf (gethash key hash) sess) (setf (websession-from-req req) sess) sess))) -(defun compute-session (req ent) +(defun compute-session (req ent url-session-id) (when (is-session-enabled ent) - (let ((key (cookie-session-key ent (request-cookies req))) - (has-cookie-key nil) - (has-url-key nil)) - (if key - (setq has-cookie-key t) - (when (setq key (url-session-key (request-raw-uri req))) - (setq has-url-key t))) - (let* ((found-session (when key (find-websession key ent))) - (session (aif found-session it (make-websession req ent)))) - (setf (websession-from-req req) session) - (when found-session - (if has-cookie-key - (setf (websession-method session) :cookies) - (when has-url-key - (setf (websession-method session) :url)))) - session)))) - + (let* ((cookie-session-id (cookie-session-key ent (request-cookies req))) + (session-id (or url-session-id cookie-session-id)) + (found-session (when session-id + (find-websession session-id ent))) + (session (aif found-session + it + (make-websession req ent)))) + (cond + (cookie-session-id + (setf (websession-method session) :cookies)) + (url-session-id + (setf (websession-method session) :url))) + (setf (websession-from-req req) session)))) + ;;; Reap expired sessions @@ -85,33 +76,33 @@ (defun find-expired-sessions () (loop for s in (all-sessions) - when (is-session-expired (car s)) - collect s)) + when (is-session-expired (car s)) + collect s)) (defun all-sessions (&aux s) (maphash (lambda (name proj) (declare (ignore name)) (let* ((sm (session-master proj)) - (sessions (when sm (sessions sm)))) + (sessions (when sm (sessions sm)))) (when sessions - (maphash - (lambda (k v) - (declare (ignore k)) - (push (cons v proj) s)) - sessions)))) + (maphash + (lambda (k v) + (declare (ignore k)) + (push (cons v proj) s)) + sessions)))) *active-projects*) s) (defmethod flush-expired (s) (let ((sessions (sessions (session-master (cdr s))))) (remhash (car s) sessions) - (add-log-entry (cdr s) "flush expired session: key=~A" - (websession-key (car s))))) + (add-log-entry (cdr s) "flush expired session: key=~A" + (websession-key (car s))))) (defun is-session-expired (ws) (> (get-universal-time) (+ (websession-lastref ws) - (websession-lifetime ws)))) + (websession-lifetime ws)))) (defun is-raw-session-id (str) (and (stringp str)