summaryrefslogtreecommitdiffstats
path: root/session.txr
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-03-02 06:57:09 -0800
committerKaz Kylheku <kaz@kylheku.com>2016-03-02 06:57:09 -0800
commit92241abe22d0976d115fbd4caacbf5121d5d5c04 (patch)
tree6336e561ea34d297a25413594a29f1a4359581be /session.txr
parent84ffdada07f03facc90cb7cfc6adacd19025d2c9 (diff)
downloadtamarind-92241abe22d0976d115fbd4caacbf5121d5d5c04.tar.gz
tamarind-92241abe22d0976d115fbd4caacbf5121d5d5c04.tar.bz2
tamarind-92241abe22d0976d115fbd4caacbf5121d5d5c04.zip
Tamarind.
Diffstat (limited to 'session.txr')
-rw-r--r--session.txr29
1 files changed, 29 insertions, 0 deletions
diff --git a/session.txr b/session.txr
new file mode 100644
index 0000000..0a2b8a0
--- /dev/null
+++ b/session.txr
@@ -0,0 +1,29 @@
+@(define ensure-session (userid clientip))
+@ (do (ensure-dir ".sessions" #o700))
+@ (bind sessionid @(rand (expt 2 128)))
+@ (output `.sessions/@userid`)
+@userid @sessionid @clientip @(time)
+@ (end)
+@ (add-header "Set-Cookie" `tamarind-login=@userid:@sessionid`)
+@(end)
+@;
+@(define remove-session (userid))
+@ (do (ignerr (remove-path `.sessions/@userid`)))
+@ (add-header "Set-Cookie" `tamarind-login=;max-age=0`)
+@(end)
+@;
+@(define sess-cookie (userid sessionid))
+HTTP_COOKIE=@(skip)tamarind-login=@userid:@{sessionid /\d+/}@(skip)
+@(end)
+@;
+@(define check-session (valid-p userid sessid clientip))
+@ (cases)
+@ (require (and userid sessid))
+@ (next `.sessions/@{userid}` :nothrow)
+@{userid} @{sessid} @clientip @timestamp
+@ (require (< (- (time) (int-str timestamp)) (* 3600 169)))
+@ (bind valid-p t)
+@ (or)
+@ (bind valid-p nil)
+@ (end)
+@(end)