summaryrefslogtreecommitdiff
path: root/desk/lib/nostrill/comms.hoon
blob: 87a63b2884f6314961fed1a6d95398035819ea01 (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
/-  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)
  =/  paths  ~[pat]
  =/  =poke:comms  [%res res]
  ~&  >  giving-res-fact=res
  =/  jon  (beg-res:en:jsonlib res)
  =/  cage  [%json !>(jon)]
  :~
    [%give %fact paths cage]
    [%give %kick paths ~]
  ==

--