blob: 39ea4794bac3b01a2f0ce108c5091f3fa3ffd382 (
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
/- *coki
/+ server, sr=sortug
|_ [=sessions =bowl:gall]
+$ sess ^sessions
++ session-timeout
|%
++ host ~d30
++ guest ~d7
--
++ session-hash
(~(raw og (shas %coki eny.bowl)) 128)
++ session-cookie-string |= [session=@ proven=@p desk=@tas]
^- @t
=/ max-age=tape %- a-co:co
=/ its-a-me .=(src.bowl our.bowl)
=, session-timeout
(div (msec:milly ?:(its-a-me host guest)) 1.000)
%- crip
"urbcoki-{(trip desk)}-{(scow %p proven)}={(scow:parsing:sr %uv session)}; Path=/{(trip desk)}; HttpOnly; SameSite=Lax; Max-Age={max-age}"
:: "urbneo={(scow:parsing:sr %uv session)}; Path=/; Max-Age={max-age}"
++ validate-coki |= coki=@t ^- (unit @p)
=/ cookies (rush coki cock:de-purl:html)
~& cookies=cookies
?~ cookies ~
=/ cokis=(list [@t @t]) u.cookies
|-
?~ cokis ~
=/ hd i.cokis
:: ?: (contains:string:sr (trip hd) "urbneo")
=/ hash (slaw:parsing:sr %uv +.hd)
?~ hash $(cokis t.cokis)
=/ sess (~(get by users.sessions) u.hash)
?~ sess $(cokis t.cokis)
`u.sess
++ send-self-poke |= poke=self-poke
^- (list card:agent:gall)
:~ [%pass /gib %agent [our.bowl dap.bowl] %poke %coki !>(poke)]
==
:: handle-self-pokes
++ handle-self-poke |= poke=self-poke
?- -.poke
%meta :- ~ (handle-challenge +.poke)
%coki :- ~ (handle-coki +.poke)
%logout (handle-logout +.poke)
==
++ handle-challenge
|= new-challenge=@ ^- ^sessions
:: =? users.sessions
:: !(~(has by users.sessions) src.bowl)
:: (~(put by users.sessions) [src.bowl src.bowl])
:: =? challenges.sessions
:: =(src.bowl (~(got by users.sessions) src.bowl))
=. challenges.sessions
(~(put in challenges.sessions) new-challenge)
sessions
++ parse-coki |= coki=@t
=/ cookies (rush coki cock:de-purl:html)
?~ cookies users.sessions
=/ cokis=(list [@t @t]) u.cookies
|-
?~ cokis users.sessions
=/ hd i.cokis
:: ?: (contains:string:sr (trip hd) "urbneo")
=/ hash (slaw:parsing:sr %uv +.hd)
?~ hash $(cokis t.cokis)
=/ sess (~(get by users.sessions) u.hash)
?~ sess $(cokis t.cokis)
(~(del by users.sessions) u.hash)
++ logout |= [order-id=@t coki=@t redirect=@t]
(send-self-poke [%logout order-id coki redirect])
++ handle-logout |= [order-id=@t coki=@t redirect=@t]
~& handling-logout=coki
=/ new-users (parse-coki coki)
:_ sessions(users new-users)
%+ give-simple-payload:app:server
order-id
(redirect:gen:server redirect)
++ handle-coki
|= [who=@p coki=@ =challenge] ^- ^sessions
:: ~& > "%ustj: Successful authentication of {<src>} as {<who>}."
=. users.sessions (~(put by users.sessions) coki who)
=. challenges.sessions (~(del in challenges.sessions) challenge)
sessions
--
|