mirror of
https://github.com/urbit/shrub.git
synced 2024-12-24 11:24:21 +03:00
100 lines
2.4 KiB
Plaintext
100 lines
2.4 KiB
Plaintext
/- store=contact-store, *resource
|
|
/+ group, grpl=group
|
|
|_ =bowl:gall
|
|
+* grp ~(. grpl bowl)
|
|
++ scry-for
|
|
|* [=mold =path]
|
|
.^ mold
|
|
%gx
|
|
(scot %p our.bowl)
|
|
%contact-store
|
|
(scot %da now.bowl)
|
|
(snoc `^path`path %noun)
|
|
==
|
|
::
|
|
++ resource-for-update
|
|
|= =vase
|
|
^- (list resource)
|
|
|^
|
|
=/ =update:store !<(update:store vase)
|
|
?- -.update
|
|
%initial ~
|
|
%add (rids-for-ship ship.update)
|
|
%remove (rids-for-ship ship.update)
|
|
%edit (rids-for-ship ship.update)
|
|
%allow ~
|
|
%disallow ~
|
|
%set-public ~
|
|
==
|
|
::
|
|
++ rids-for-ship
|
|
|= s=ship
|
|
^- (list resource)
|
|
:: if the ship is in any group that I am pushing updates for, push
|
|
:: it out to that resource.
|
|
::
|
|
=/ rids
|
|
%+ skim ~(tap in scry-sharing)
|
|
|= r=resource
|
|
(is-member:grp s r)
|
|
?. =(s our.bowl)
|
|
rids
|
|
(snoc rids [our.bowl %''])
|
|
--
|
|
++ scry-sharing
|
|
.^ (set resource)
|
|
%gx
|
|
(scot %p our.bowl)
|
|
%contact-push-hook
|
|
(scot %da now.bowl)
|
|
/sharing/noun
|
|
==
|
|
::
|
|
++ get-contact
|
|
|= =ship
|
|
^- (unit contact:store)
|
|
=/ =rolodex:store
|
|
(scry-for rolodex:store /all)
|
|
(~(get by rolodex) ship)
|
|
::
|
|
++ scry-is-public
|
|
.^ ?
|
|
%gx
|
|
(scot %p our.bowl)
|
|
%contact-store
|
|
(scot %da now.bowl)
|
|
/is-public/noun
|
|
==
|
|
::
|
|
++ is-allowed
|
|
|= [rid=resource =ship]
|
|
^- ?
|
|
=/ grp ~(. group bowl)
|
|
=/ allowed-groups (scry-for (set resource) /allowed-groups)
|
|
?| :: if they are requesting our personal profile, check if we are
|
|
:: either public, or if they are on the allowed-ships list.
|
|
:: this is used for direct messages and leap searches
|
|
::
|
|
?& =(rid [our.bowl %''])
|
|
?| :: if our profile is public, allow
|
|
::
|
|
scry-is-public
|
|
:: if the requester is an allowed-ship, allow
|
|
::
|
|
(scry-for ? /allowed-ship/(scot %p ship))
|
|
:: if the requester of our profile is the host of one of
|
|
:: our allowed-groups, allow
|
|
::
|
|
%+ lien ~(tap in allowed-groups)
|
|
|= res=resource
|
|
=(entity.res ship)
|
|
== ==
|
|
:: if they are requesting our contact data within a group,
|
|
:: we make sure that we are sharing that group,
|
|
:: and that they are a member of the group
|
|
::
|
|
?& (~(has in scry-sharing) rid)
|
|
(~(has in (members:grp rid)) ship)
|
|
== ==
|
|
--
|