summaryrefslogtreecommitdiffstats
path: root/session.txr
blob: facc4862c5dca6df877245df1dd294fde86bf06c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@(define ensure-session (userid clientip))
@  (local sessionid)
@  (do (ensure-dir sessions-dir #o700))
@  (bind sessionid @(rand (expt 2 128)))
@  (output `@{sessions-dir}/@userid`)
@userid @sessionid @clientip @(time)
@  (end)
@  (add-header "Set-Cookie" `tamarind-login=@userid:@sessionid`)
@(end)
@;
@(define remove-session (userid))
@  (do (ignerr (remove-path `@{sessions-dir}/@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-dir}/@{userid}` :nothrow)
@{userid} @{sessid} @clientip @timestamp
@    (require (< (- (time) (int-str timestamp)) (* 3600 169)))
@    (bind valid-p t)
@  (or)
@    (bind valid-p nil)
@  (end)
@(end)