ocap meets activitypub objects/actors

This commit is contained in:
Christopher Lemmer Webber 2019-07-24 18:06:32 -04:00
parent c5b4ad2ec2
commit f71ad175b8
No known key found for this signature in database
GPG Key ID: 4BC025925FF8F4D3

View File

@ -1080,16 +1080,99 @@ for human viewing.
*** Ocaps meet ActivityPub objects/actors
Finally we can get to the point of understanding how to apply ocaps to
ActivityPub directly.
It's actually extremely trivial: we can just use traditional capability
URLs or bearcaps anywhere we would put a normal link.
Let's start with a simple capability URL example.
(We're intentionally pairing down this example; signatures are
not shown.)
#+BEGIN_SRC javascript
{"@type": "Create",
"actor": "https://chatty.example/ben/",
"to": ["https://chatty.example/ben/followers"],
"object": {
"@id": "https://chatty.example/obj/fQFWD9bZf1GKc3E09gt8W4MlChVxoiMAjgzhqxP9KhE",
"@type": "Note",
"attributedTo": "https://chatty.example/ben/",
"content": "Hello, fediverse! I'm new here. Who should I be chatting with?"}}
#+END_SRC
There is no way to retrieve this object unless you know its address,
but knowing its address allows you to see/refer to it, not unlike the
Google Docs example we referred to earlier.
Ben distributes this message to his local friend group of Alyssa and
Lem.
Alyssa thinks that Ben would like to meet her friends and composes
a reply which refers to his message.
#+BEGIN_SRC javascript
{"@type": "Create",
"actor": "https://social.example/alyssa/",
"to": ["https://social.example/alyssa/collections/my-friends"],
"object": {
"@id": "https://social.example/obj/Aj1k_Phx4uAgCXOMZ7KP9omJXXnOUySlhP-WXYE0obw",
"@type": "Note",
"attributedTo": "https://social.example/alyssa/",
"inReplyTo": "https://chatty.example/obj/fQFWD9bZf1GKc3E09gt8W4MlChVxoiMAjgzhqxP9KhE",
"content": "Hey Ben!! Welcome to the network. I want to introduce you to my friends."}}
#+END_SRC
In the former message, Ben shared his message amongst his followers
(which maybe he curates).
In the latter message, Alyssa sent her message, which also provided
a path to Ben's, amongst her friends, encouraging people she knows
to establish a social connection with Ben.
Alyssa and Ben were able to coordinate to spread this communication
amongst people they trust, but it is not spread further.
This is mildly interesting, but things get much more interesting when
we realize that inboxes can also themselves be capabilities.
Alyssa is a member of a group of pixel art enthusiasts.
#+BEGIN_SRC javascript
{"@type": "Group",
"@id": "bear:?u=https://groupchats.example/group&t=eQshu8RiJ-9ozh2GKRATXN5-J6dcBVf_AYSMrJ6UEzE",
"url": "https://groupchats.example/group/public/pixel-artists",
"name": "Pixel Art Enthusiasts",
"inbox": "bear:?u=https://groupchats.example/group/inbox&t=eQshu8RiJ-9ozh2GKRATXN5-J6dcBVf_AYSMrJ6UEzE"}
#+END_SRC
This pixel art enthusiast group has a public page that anyone can
view at =https://groupchats.example/group/public/pixel-artists=.
However, not everyone who can see that URL has the authority to
post to the group.
At present, Alyssa has the authority to make posts to this group,
which automatically disseminates them to all members.
However, Alyssa cannot moderate the group (including its membership
list).
She has limited access.
We will worry about how the limited access is accomplished in a
moment, but for the moment we can say that Alyssa posting to the
group is as simple as referencing its =@id=:
#+BEGIN_SRC javascript
#+END_SRC
** The power of proxying
** True names, public profiles, private profiles
** Rights amplification and group-style permissions
** MultiBox vs sharedInbox
** Requested policies
* Limitations
* Future work