---
title: Group Communication Platform
published: 2015-08-11
modified: 2015-08-12
---
**Update (2015-08-12)**: see
[private-messaging-brainstorming](https://indiewebcamp.com/private-messaging-brainstorming)
for a discussion on the topic of private messaging. It is in a way quite similar to
the proposal below of "Inbox", but without OAuth.
### Introduction
This post will describe some typical features for a group communication
platform with code name *Phubble*. As an example we will organize a
birthday party for Alice. This post will describe what would be required of
a "platform" to make it work for the IndieWeb.
### Alice's birthday party
Alice has a birthday in the near future. Bob, Eve and Mallory want to create a
surprise party for Alice. Until now they used "Facebook Groups" to organize
such an event among the friends.
Bob wants to coordinate the party with Eve and Mallory and have a secure way
of communicating among themselves without Alice, or anyone else finding out
about it.
The group of friends contains three members:
- `https://bob.example/`
- `https://eve.example/`
- `https://mallory.example/`
Bob creates a private space `alice-bday-party` on
*Phubble* and assigns the members to it.
*Phubble* will now have to figure out how to contact/notify the members
by some mechanism to notify them they have been added to the private group.
For example using an HTTP *inbox* or maybe email if an HTTP
*inbox* is not listed on the member's homepage.
Bob then posts his first idea to the wall. Eve and Mallory will receive a
another notification saying that Bob posted a new message, possibly with the
content of the message included, or maybe just a link.
Eve wants to add Peggy to the group. She adds her to the group configured in
*Phubble* with the identity `https://peggy.example/`. It
should be possible for all members of a space to add new members. Only the
creator can delete members.
*Phubble* sends Peggy a notification that she was added to the
`alice-bday-party` space, and will also inform her of any future
activity.
Peggy also has an idea and posts it to the space. Now Bob, Eve and Mallory will
get a notification.
### Notifications
In order to notify a member (out of the blue) that he or she is a member of a
(private) group space there needs to be a mechanism for doing this. Email has
long been the most reliable way to do this. Most users will publish their
email address on their homepage, for example using the
[h-card](https://en.wikipedia.org/wiki/HCard) microformat as
promoted for the IndieWeb or the
[rel="me"](http://microformats.org/wiki/relme) method. In
addition below a mechanism using HTTP is proposed, HTTP *inbox*.
#### HTTP *inbox*
The user advertises a HTTP *inbox* on their homepage:
```
```
This endpoint accepts a HTTP POST containing a subject and a message:
```
POST /inbox HTTP/1.1
Host: tuxed.net
Content-Type: application/x-www-form-urlencoded
subject=New+message+in+%22Alice%27s+birthday%22+space&content=Lorem+ipsum+dolor+sit.
```
This request needs an OAuth 2.0 Bearer token to succeed. If non provided, the
`inbox` endpoint will respond with some hints, as proposed by
[OAuth 2.0 Authorization Server Discovery](as_discovery.html).
```
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer
realm="Inbox",
authorization_endpoint="https://as.example.org/authorize",
token_endpoint="https://as.example.org/token"
```
Now *Phubble*, as an OAuth client, knows where to obtain authorization.
*Phubble* chooses its own "authorization server", e.g. one that supports
client certificates, and uses its own URL, e.g.
`https://phubble.example/` as its identity. Assuming the AS supports
[Distributed IndieAuth](https://indiewebcamp.com/distributed-indieauth)
this should work perfectly well.
Once the access token has been obtained it can be sent in the POST request:
```
POST /inbox HTTP/1.1
Host: tuxed.net
Authorization: Bearer SFmrZYeCR9hCol2ORAusJbccHiHrp7MU
Content-Type: application/x-www-form-urlencoded
subject=New+message+in+%22Alice%27s+birthday%22+space&content=Lorem+ipsum+dolor+sit.
```
Now the response will show it succeeded:
```
HTTP/1.1 201 Created
```
#### Email
Email is a safe fallback. The user's email address can be discovered from the
homepage, for example by querying the `rel="me"` `link`
headers:
```
```
This will be all that is needed to send notifications.
### Issues
- How does *Phubble* keep track of new users in the ACL that need to be
notified that they are now member of the space?
- How do we deal with disabling notifications? Opt-in? Opt-out?
- Should we implement a distinction between "invited" and "member"? So only
when people accept a membership they will start receiving notifications?