diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-03-02 06:57:09 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-03-02 06:57:09 -0800 |
commit | 92241abe22d0976d115fbd4caacbf5121d5d5c04 (patch) | |
tree | 6336e561ea34d297a25413594a29f1a4359581be /session.txr | |
parent | 84ffdada07f03facc90cb7cfc6adacd19025d2c9 (diff) | |
download | tamarind-92241abe22d0976d115fbd4caacbf5121d5d5c04.tar.gz tamarind-92241abe22d0976d115fbd4caacbf5121d5d5c04.tar.bz2 tamarind-92241abe22d0976d115fbd4caacbf5121d5d5c04.zip |
Tamarind.
Diffstat (limited to 'session.txr')
-rw-r--r-- | session.txr | 29 |
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) |