Skip to content

Commit

Permalink
Document group provisioning via user API. (#748)
Browse files Browse the repository at this point in the history
  • Loading branch information
fisx authored May 9, 2019
1 parent a6f16fa commit 5086353
Showing 1 changed file with 142 additions and 0 deletions.
142 changes: 142 additions & 0 deletions docs/reference/conversation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
# Creating and populating conversations {#RefCreateAndPopulateConvs}

_Author: Matthias Fischmann_

---

This will walk you through creating and populating a conversation
using [curl](https://curl.haxx.se/) commands and the credentials of an
ordinary user (member role).

If you have a system for identity management like a SAML IdP, you may
be able to use that as a source of user and group information, and
write a script or a program based on this document to keep your wire
conversations in sync with your groups.

Sidenote: in the future we may implement groups in our [SCIM
API](http://www.simplecloud.info/) to handle conversations. For the
time being, we hope you consider the approach explained here a decent
work-around.


## Prerequisites

We will talk to the backend using the API that the clients use, so we
need a pseudo-user that we can authenticate as. We assume this user
has been created by other means. For the sake of testing, you could
just use the team admin (but you don't need admin privileges for this
user).

So here is some shell environment we will need:

```bash
export WIRE_BACKEND=https://prod-nginz-https.wire.com
export WIRE_USER=...
export WIRE_PASSWD=...
export WIRE_TEAMID=...
```

Now you can login and get a wire token to authenticate all further
requests:

```bash
export BEARER=$(curl -X POST \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
-d '{"email":"'"$WIRE_USER"'","password":"'"$WIRE_PASSWD"'"}' \
$WIRE_BACKEND/login'?persist=false' | jq -r .access_token)
```

This token will be good for 15 minutes; after that, just repeat.

If you don't want to install [jq](https://stedolan.github.io/jq/), you
can just call the `curl` command and copy the access token into the
shell variable manually.

Here is a quick test that you're logged in:

```bash
curl -X GET --header "Authorization: Bearer $BEARER" \
$WIRE_BACKEND/self
```


## Contact requests

If `$WIRE_USER` is in a team, all other team members are implicitly
connected to it. So for the users in your team, you don't have to do
anything here.

TODO: contact requests to users not on the team.


## Conversations

To create a converation with no users (except the pseudo-user creating it):

```bash
export WIRE_CONV_NAME="The B-Team"
export WIRE_CONV='{
"users": [],
"name": "'${WIRE_CONV_NAME}'",
"team": {
"managed": false,
"teamid": "'${WIRE_TEAMID}'"
},
"receipt_mode": 0,
"message_timer": 0
}'

export CONV_ID=$(curl -X POST --header "Authorization: Bearer $BEARER" \
-H "Content-Type: application/json" \
-d "$WIRE_CONV" \
$WIRE_BACKEND/conversations | jq -r .id)
```

The `users` field can contain UUIDs that need to point to existing
wire users (in your team or not), and `$WIRE_USER` needs to have an
accepted connection with them. You can extract these ids from the
corresponding SCIM user records. If in doubt, leave empty.

You can also add and remove users once the converation has been
created:

```bash
curl -X POST --header "Authorization: Bearer $BEARER" \
-H "Content-Type: application/json" \
-d '{ "users": ["b4b6a96c-70c8-11e9-99e6-f3ea044b132c", "b7293854-70c8-11e9-b620-97ff1eba6324"] }' \
$WIRE_BACKEND/conversations/$CONV_ID/members

curl -X DELETE --header "Authorization: Bearer $BEARER" \
$WIRE_BACKEND/conversations/$CONV_ID/members/b9f1c786-70c8-11e9-91a6-fbeb48cdcdd1
```

You can also look at one or all conversations:

```bash
curl -X GET --header "Authorization: Bearer $BEARER" \
$WIRE_BACKEND/conversations/ids

curl -X GET --header "Authorization: Bearer $BEARER" \
$WIRE_BACKEND/conversations/

curl -X GET --header "Authorization: Bearer $BEARER" \
$WIRE_BACKEND/conversations/$CONV_ID/
```

Finally, conversations can be renamed or deleted:

```bash
curl -X PUT --header "Authorization: Bearer $BEARER" \
-H "Content-Type: application/json" \
-d '{ "name": "The C-Team" }' \
$WIRE_BACKEND/conversations/$CONV_ID

curl -X DELETE --header "Authorization: Bearer $BEARER" \
$WIRE_BACKEND/teams/$WIRE_TEAMID/conversations/$CONV_ID
```


## Advanced topics

TODO: pseudo-user leaving the conv, and being added by admin for changes later.

0 comments on commit 5086353

Please sign in to comment.