diff options
Diffstat (limited to 'desk/lib/nostrill/comms.hoon')
-rw-r--r-- | desk/lib/nostrill/comms.hoon | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/desk/lib/nostrill/comms.hoon b/desk/lib/nostrill/comms.hoon new file mode 100644 index 0000000..833c07d --- /dev/null +++ b/desk/lib/nostrill/comms.hoon @@ -0,0 +1,99 @@ +/- 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) + %prof handle-prof + == +++ 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) + =/ crd (res-poke [%ok %feed fc]) + :_ state :~(crd) + +++ give-feed + ~& 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']) + :: + =/ lp latest-page:feedlib + =/ lp2 lp(count backlog.feed-perms.state) + =/ =fc:feed (lp2 feed.state) + (res-fact [%ok %feed fc]) + +++ give-ted |= id=@ + =/ ted (get:orm:feed feed.state id) + ?~ ted + (res-fact [%ng 'no such thread']) + =/ can (can-access:gatelib src.bowl read.u.ted bowl) + ?. can + (res-fact [%ng 'not allowed']) + :: + =/ fn (node-to-full:feedlib u.ted feed.state) + (res-fact [%ok %thread fn]) +:: +++ handle-prof + =/ 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) + :: + :: TODO @p or keys... wat do + :: =/ up (~(get by profiles.state) our.bowl) + =/ up (~(get by profiles.state) pub.i.keys.state) + ?~ up + =/ crd (res-poke [%ng 'dont have one']) + :_ state :~(crd) + + =/ crd (res-poke [%ok %prof u.up]) + :_ state :~(crd) + +++ 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 ^- (list card:agent:gall) + =/ paths ~[/beg/feed] + =/ =poke:comms [%res res] + ~& > giving-res-fact=res + =/ jon (beg-res:en:jsonlib res) + =/ cage [%json !>(jon)] + :~ + [%give %fact paths cage] + [%give %kick paths ~] + == + +-- |