From f71ad175b85163f4da0e31f00f1fa73d8f9575f3 Mon Sep 17 00:00:00 2001 From: Christopher Lemmer Webber Date: Wed, 24 Jul 2019 18:06:32 -0400 Subject: [PATCH] ocap meets activitypub objects/actors --- README.org | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/README.org b/README.org index a0ea907..cf753da 100644 --- a/README.org +++ b/README.org @@ -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