diff options
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) |