blob: 5ae07a0c98bdcbf9197353b8933fb7426370646b (
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
|
/- sur=nostrill, nsur=nostr, comms=nostrill-comms, feed=trill-feed
/+ js=json-nostr, sr=sortug, nlib=nostr, constants, gatelib=trill-gate, feedlib=trill-feed, jsonlib=json-nostrill
|_ [=state:sur =bowl:gall]
++ cast-poke
|= raw=* ^- poke:comms
;; poke:comms raw
:: Req
++ handle-req |= =req:comms
?- -.req
%feed handle-feed
%thread (handle-thread +.req)
==
++ handle-feed
=/ can (can-access:gatelib src.bowl lock.feed-perms.state bowl)
?. can
:: TODO keep track of the requests at the feed-perms struct
=/ crd (res-poke [%ng 'not allowed'])
:_ state :~(crd)
::
=/ lp latest-page:feedlib
=/ lp2 lp(count backlog.feed-perms.state)
=/ =fc:feed (lp2 feed.state)
=/ prof (~(get by profiles.state) [%urbit our.bowl])
=/ crd (res-poke [%ok %feed fc prof])
:_ state :~(crd)
++ give-feed
|= pat=path
~& give-feed=src.bowl
=/ can (can-access:gatelib src.bowl lock.feed-perms.state bowl)
?. can
:: TODO keep track of the requests at the feed-perms struct
(res-fact [%ng 'not allowed'] pat)
::
=/ lp latest-page:feedlib
=/ lp2 lp(count backlog.feed-perms.state)
=/ =fc:feed (lp2 feed.state)
=/ prof (~(get by profiles.state) [%urbit our.bowl])
(res-fact [%ok %feed fc prof] pat)
++ give-ted |= [id=@ pat=path]
=/ ted (get:orm:feed feed.state id)
?~ ted
(res-fact [%ng 'no such thread'] pat)
=/ can (can-access:gatelib src.bowl read.u.ted bowl)
?. can
(res-fact [%ng 'not allowed'] pat)
::
=/ fn (node-to-full:feedlib u.ted feed.state)
(res-fact [%ok %thread fn] pat)
::
++ handle-thread |= id=@da
=/ ted (get:orm:feed feed.state id)
?~ ted
=/ crd (res-poke [%ng 'no such thread'])
:_ state :~(crd)
=/ can (can-access:gatelib src.bowl read.u.ted bowl)
?. can
=/ crd (res-poke [%ng 'not allowed'])
:_ state :~(crd)
::
=/ fn (node-to-full:feedlib u.ted feed.state)
=/ crd (res-poke [%ok %thread fn])
:_ state :~(crd)
:: res
++ handle-res |= =res:comms
`state
::
++ res-poke |= =res:comms ^- card:agent:gall
=/ =poke:comms [%res res]
=/ cage [%noun !>(poke)]
[%pass /poke %agent [src.bowl dap.bowl] %poke cage]
++ res-fact |= [=res:comms pat=path] ^- (list card:agent:gall)
=/ beg ?=([%beg *] pat)
=/ paths ~[pat]
~& > giving-res-fact=pat
?: beg :: for the thread that goes directly to the frontend
=/ jon (beg-res:en:jsonlib res)
=/ cage [%json !>(jon)]
=/ c1 [%give %fact paths cage]
=/ c2 [%give %kick paths ~]
:~(c1 c2)
:: for the follow flow
=/ cage [%noun !>([%init res])]
=/ c1 [%give %fact paths cage]
:~(c1)
--
|