83 lines
3.8 KiB
Markdown
83 lines
3.8 KiB
Markdown
---
|
|
title: "Terms&Conditions"
|
|
description: "Terms&Conditions implementation"
|
|
weight: 65
|
|
chapter: false
|
|
livechatnotranslation: true
|
|
---
|
|
|
|
You can set terms & conditions on the instance level (called "global terms"), or at the streamers' channels level (called "muc terms", as it is related to muc rooms).
|
|
|
|
## Backend
|
|
|
|
The `mod_muc_peertubelivechat_terms` prosody modules handles the terms configuration.
|
|
|
|
It has a configuration option for the global terms.
|
|
It also adds muc terms in the room data.
|
|
|
|
When a new occupant session is opened, this modules sends them messages containing the global and muc terms (if set).
|
|
|
|
Here is an example of sent messages:
|
|
|
|
```xml
|
|
<message xmlns="jabber:client" id="_iRSEs061gi5GBjF7zGh7f-M" type="groupchat" to="root@p1.localhost/QH1H89H1" from="8df24108-6e70-4fc8-b1cc-f2db7fcdd535@room.p1.localhost/Peertube">
|
|
<body>The global terms.</body>
|
|
<x-livechat-terms type="global" />
|
|
<delay xmlns="urn:xmpp:delay" stamp="2024-06-25T11:02:25Z" />
|
|
<stanza-id by="8df24108-6e70-4fc8-b1cc-f2db7fcdd535@room.p1.localhost" xmlns="urn:xmpp:sid:0" id="InoL5fonvOoR8X9gOlAYsz_N" />
|
|
<no-copy xmlns='urn:xmpp:hints'/>
|
|
<no-store xmlns='urn:xmpp:hints'/>
|
|
<no-permanent-store xmlns='urn:xmpp:hints'/>
|
|
</message>
|
|
|
|
<message xmlns="jabber:client" id="_iRSEs061gi5GBjF7zGh7f-M" type="groupchat" to="root@p1.localhost/QH1H89H1" from="8df24108-6e70-4fc8-b1cc-f2db7fcdd535@room.p1.localhost/Peertube">
|
|
<body>The muc terms.</body>
|
|
<x-livechat-terms type="muc" />
|
|
<delay xmlns="urn:xmpp:delay" stamp="2024-06-25T11:02:25Z" />
|
|
<stanza-id by="8df24108-6e70-4fc8-b1cc-f2db7fcdd535@room.p1.localhost" xmlns="urn:xmpp:sid:0" id="InoL5fonvOoR8X9gOlAYsz_N" />
|
|
<no-copy xmlns='urn:xmpp:hints'/>
|
|
<no-store xmlns='urn:xmpp:hints'/>
|
|
<no-permanent-store xmlns='urn:xmpp:hints'/>
|
|
</message>
|
|
```
|
|
|
|
Notice the `x-livechat-terms` tag.
|
|
|
|
Standard XMPP clients will show these messages as standard message.
|
|
|
|
Message are sent from a "service nickname": this occupant does not exist.
|
|
The service nickname is an option of the module (livechat use "Peertube", hard coded for now).
|
|
This nickname is reserved, no-one can spoof it (the module will bounce any request to use this nickname).
|
|
We must do so, because without nickname, some XMPP clients won't show the messages (tested with Gajim).
|
|
|
|
We also add a `delay` tag, to trick the moderation bot (see comments in code).
|
|
This also ensure clients will not drop the message because there is no occupant with this name.
|
|
|
|
We also add some `urn:xmpp:hints` to avoid storing or copying these messages.
|
|
|
|
When muc terms are updated, the new terms will be broadcasted.
|
|
|
|
To avoid anyone spoofing terms & conditions, incoming message stanza are filtered, and any `x-livechat-terms` tag will be removed.
|
|
|
|
Message history is disabled for message containing the `x-livechat-terms`, so that messages broadcasted when the terms change are not stored by muc_mam modume ("Message Archiving Management").
|
|
|
|
## Frontend
|
|
|
|
For standard XMPP clients, terms will be shown as delayed messages.
|
|
|
|
For the livechat frontend, there is a `livechat-converse-terms` Converse plugin that will intercept these messages, and prevent them to be shown in the chat history.
|
|
|
|
It will also create infobox at the top of the chat to display the terms content.
|
|
If muc terms are updated, the new terms will be shown.
|
|
|
|
Users can hide the terms.
|
|
To remember that a user has already hidden the terms, we store the content in localStorage.
|
|
We will only show terms again if the content in this localStorage changes.
|
|
We do so for both global terms and muc terms, in two separate localStorage keys.
|
|
The keys in localstorage does not depends on the room JID or the origin peertube instance.
|
|
This means that message will be shown again:
|
|
|
|
* if terms are modified
|
|
* if the user switch to another channel
|
|
* if the user switch to a video from a different peertube instance
|