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