ensure session
authorGerd Flaig <gefla@gefla-mac-zrh>
Sat, 20 Dec 2008 21:19:40 +0000 (22:19 +0100)
committerGerd Flaig <gefla@gefla-mac-zrh>
Sat, 20 Dec 2008 21:19:40 +0000 (22:19 +0100)
static/root.html [new file with mode: 0644]
static/test.html [deleted file]
web.lisp

diff --git a/static/root.html b/static/root.html
new file mode 100644 (file)
index 0000000..330cd79
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html> <head>
+<link rel="stylesheet" type="text/css" href="static/style.css">
+<title>Empire Web Client</title>
+
+<script type="text/javascript" src="static/dojo-release-1.1.1/dojo/dojo.js.uncompressed.js"
+  djConfig="parseOnLoad:true, isDebug:false"></script>
+<script type="text/javascript" src="static/eow.js"></script>
+<script type="text/javascript">
+var init = function(){
+  console.log("I run after the page is ready. See this in the console");
+  setup_client();
+  get_next_update();
+};
+dojo.addOnLoad(init);
+</script>
+
+</head>
+
+<body>
+<div id="output">
+<span class="less">EOW alpha0 Empire/Ajax</span>
+<br/>
+<br/>
+<span class="info">Welcome to the Empire over the Web client (EOW).</span>
+</div>
+<div id="input">
+<form id="cmdline" name='f' onsubmit='return false;' class='cmdline' action=''>
+<table class="inputtable"><tr><td><div id='prompt' class='less'>>
+</div></td><td class="inputtd"><input id='inputfield' name='q'
+  type='text' class='cmdline' autocomplete='off' value=""
+  onkeyup="inputfield_keyup(event);" /></td></tr></table>
+</form>
+</div>
+
+<hr>
+<address></address>
+<!-- hhmts start --> Last modified: Sat Dec 20 22:16:28 CET 2008 <!-- hhmts end -->
+</body> </html>
diff --git a/static/test.html b/static/test.html
deleted file mode 100644 (file)
index 28f676c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
-<html> <head>
-<link rel="stylesheet" type="text/css" href="style.css">
-<title>Empire Web Client</title>
-
-<script type="text/javascript" src="dojo-release-1.1.1/dojo/dojo.js.uncompressed.js"
-  djConfig="parseOnLoad:true, isDebug:false"></script>
-<script type="text/javascript" src="eow.js"></script>
-<script type="text/javascript">
-var init = function(){
-  console.log("I run after the page is ready. See this in the console");
-  setup_client();
-  get_next_update();
-};
-dojo.addOnLoad(init);
-</script>
-
-</head>
-
-<body>
-<div id="output">
-<span class="less">EOW alpha0 Empire/Ajax</span>
-<br/>
-<br/>
-<span class="info">Welcome to the Empire over the Web client (EOW).</span>
-</div>
-<div id="input">
-<form id="cmdline" name='f' onsubmit='return false;' class='cmdline' action=''>
-<table class="inputtable"><tr><td><div id='prompt' class='less'>>
-</div></td><td class="inputtd"><input id='inputfield' name='q'
-  type='text' class='cmdline' autocomplete='off' value=""
-  onkeyup="inputfield_keyup(event);" /></td></tr></table>
-</form>
-</div>
-
-<hr>
-<address></address>
-<!-- hhmts start --> Last modified: Sun Dec 14 23:04:50 CET 2008 <!-- hhmts end -->
-</body> </html>
index e648f319f150cd1804c91ffddac05b5431c6a17e..96aca61708bc8f95acd11d79255cc801ed9a980f 100644 (file)
--- a/web.lisp
+++ b/web.lisp
                                   :directory (pathname-directory *this-file*)))
 
 (defparameter +templates-root+ (namestring *this-dir*))
-(defparameter +root-url+ "/eow/static/test.html")
+(defparameter +root-url+ "/eow/")
 (defparameter +web-root-base+ "/eow")
 (defparameter +web-root+ (concatenate 'string +web-root-base+ "/"))
 (defparameter +static-web-root+ (concatenate 'string +web-root+ "static/"))
 (defparameter +static-files-root+ (concatenate 'string +templates-root+ "static/"))
 (defparameter +login-page+ (concatenate 'string +static-web-root+ "login.html"))
+(defparameter +root-page-file+ "root.html")
 
 (defun string-starts-with (string prefix)
   ;; (from Hunchentoot)
 (defgeneric prompt (session minutes btus))
 (defgeneric data (session message))
 
+(defvar *session*)
+
 (defun update ()
   "Send stream of updates to client"
-  (let ((s (session-value `session)))
-    (locked-queue:dequeue (update-queue s))))
+  (with-session
+    (locked-queue:dequeue (update-queue *session*))))
 
 (defmethod send ((s session) string)
   "Push a javascript update fragment to the client."
 (defmethod data ((s session) message)
   (send s (parenscript:ps* `(msg ,message))))
 
-(defun login ()
-  (let ((s (session-value 'session)))
-    (if s
-       (redirect +root-url+)
-       (redirect +login-page+))))
+(defmacro with-session (&body body)
+  `(let ((*session* (session-value 'session)))
+     (if *session*
+        (progn ,@body)
+        (redirect +login-page+))))
 
 ;; destination of login-form
 (defun login-action ()
       (format nil "Connection error: ~a~%" e))))
 
 (defun command-action ()
-  (let ((s (session-value 'session)))
-    (empire:send-message (connection s) (get-parameter "q"))))
+  (with-session
+      (empire:send-message (connection *session*) (get-parameter "q"))))
+
+(defun root-page ()
+  (with-session
+    (handle-static-file (concatenate 'string +static-files-root+ +root-page-file+))))
 
 (defun dispatch (request)
   (let ((script-name (script-name request)))
       ((string= script-name "/eow/login") 'login-action)
       ((string= script-name "/eow/command") 'command-action)
       ((or (string-equal script-name +web-root-base+)
-           (string-equal script-name +web-root+)) 'login) ; go to the start page
+           (string-equal script-name +web-root+)) 'root-page) ; go to the start page
       ((string-starts-with script-name +static-web-root+) 'serve-static)))) ; serve static file