Diff

mod_muc_http_defaults/README.markdown @ 4447:07aa101a1ae7

mod_muc_http_defaults: Get MUC room config from an API
author Kim Alvefur <zash@zash.se>
date Fri, 19 Feb 2021 16:01:41 +0100
child 4448:5879ca1f7853
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_muc_http_defaults/README.markdown	Fri Feb 19 16:01:41 2021 +0100
@@ -0,0 +1,141 @@
+---
+summary: Seed MUC configuration from JSON REST API
+---
+
+# Introduction
+
+This module fetches configuration for MUC rooms from an API when rooms
+are created.
+
+# Requirements
+
+Prosody **trunk** required.
+
+# Configuration
+
+`muc_create_api_url`
+:   URL template for the API endpoint to get settings. `{room.jid}` is
+    replaced by the address of the room in question.
+
+`muc_create_api_auth`
+:   The value of the Authorization header to authenticate against the
+    API. E.g. `"Bearer /rXU4tkQTYQMgdHfMLH6"`{.lua}
+
+## Example
+
+``` {.lua}
+Component "channels.example.net" "muc"
+modules_enabled = { "muc_http_defaults" }
+muc_create_api_url = "https://api.example.net/muc/config?jid={room.jid}"
+```
+
+# API
+
+A RESTful JSON API is used. Any error causes the room to be destroyed.
+
+The returned JSON consists of two main parts, the room configuration and
+the affiliations (member list).
+
+## Schema
+
+Here's a JSON Schema in YAML format describing the expected JSON
+response data:
+
+``` {.yaml}
+---
+type: object
+properties:
+  config:
+    type: object
+    properties:
+      name: string
+      description: string
+      language: string
+      persistent: boolean
+      public: boolean
+      members_only: boolean
+      allow_member_invites: boolean
+      public_jids: boolean
+      subject: string
+      changesubject: boolean
+      historylength: integer
+      moderated: boolean
+      archiving: boolean
+  affiliations:
+    anyOf:
+    - type: array
+      items:
+        type: object
+        required:
+        - jid
+        - affiliation
+        properties:
+          jid:
+            type: string
+            pattern: ^[^@/]+@[^/]+$
+          affiliation:
+            ref: '#/definitions/affiliation'
+          nick: string
+    - type: object
+      patternProperties:
+        ^[^@/]+@[^/]+$: '#/definitions/affiliation'
+definitions:
+  affiliation:
+    type: string
+    enum:
+    - owner
+    - admin
+    - member
+    - none
+    - outcast
+...
+```
+
+## Example
+
+A basic example with some config settings and a few affiliations:
+
+``` {.json}
+GET /muc/config?jid=place@channels.example.net
+Accept: application/json
+
+HTTP/1.1 200 OK
+Content-Type: application/json
+
+{
+   "affiliations" : [
+      {
+         "affiliation" : "owner",
+         "jid" : "bosmang@example.net",
+         "nick" : "bosmang"
+      },
+      {
+         "affiliation" : "admin",
+         "jid" : "xo@example.net",
+         "nick" : "xo"
+      },
+      {
+         "affiliation" : "member",
+         "jid" : "john@example.net"
+      }
+   ],
+   "config" : {
+      "archiving" : true,
+      "description" : "This is the place",
+      "members_only" : true,
+      "moderated" : false,
+      "name" : "The Place",
+      "persistent" : true,
+      "public" : false,
+      "subject" : "Discussions regarding The Place"
+   }
+}
+```
+
+To allow the creation without making any changes, letting whoever
+created it be the owner, just return an empty JSON object:
+
+    HTTP/1.1 200 OK
+    Content-Type: application/json
+
+    {}