diff --git a/CHANGELOG.md b/CHANGELOG.md index 8507bcbf..d2dbc895 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## ??? +## v2.0.0 * Code is now in Typescript * Builtin Prosody server, for easy configuration diff --git a/README.md b/README.md index da222019..bcb87373 100644 --- a/README.md +++ b/README.md @@ -2,16 +2,13 @@ This plugin can provide webchat for peertube videos. -Warning: the webchat is not provided by this plugin. You have to rely on an external tool. There are multiple way to provide such functionality: -* by having a Jabber/XMPP server with BOSH or Websocket and anonymous loggin -* by having an external webchat tool, that will be included in an iframe +* **builtin prosody:** this plugin can launch a [Prosody](https://prosody.im) process and auto-configure it. [Documentation](documentation/prosody.md). Althought this is still experimental and under development, it is the recommanded setup. +* **builtin converseJS:** you can use an external Jabber/XMPP server with BOSH or Websocket and anonymous loggin enabled. [Documentation](documentation/conversejs.md) +* **external tool:** you can use any external webchat tool, that can be included in an iframe. [Documentation](documentation/external.md) -For the first solution, the connection to the XMPP server is made with [converseJS](https://conversejs.org/). - -**Important Note**: If you don't have a running XMPP server, here is a -**[tutorial to install Prosody XMPP Server](documentation/tutorials/prosody.md) on your Peertube instance**. This is the simpliest way to make this plugin work. +For the two first solutions, the connection to the XMPP server is made with [converseJS](https://conversejs.org/). If you have new feature requests, bugs, or difficulties to setup the plugin, you can use the [Github issue tracker](https://github.com/JohnXLivingston/peertube-plugin-livechat/issues). @@ -23,145 +20,13 @@ If you have any question, or if you want to talk about this plugin, you can join ## Settings -There are several options in the plugin settings page. +There are several common settings. Please see the documentation here: [common settings documentation](documentation/common.md). -### Automatically open the chat +Then, please refer to the documentation associated with the mode you are planning to use: -If checked, the chat will be loaded as soon as you are on the video page. - -### Show the «open in new window» button - -If your webchat can be opened in a full window, you can add a button to do so. - -NB: The builtin ConverseJS is compatible with this feature. - -### Chats are only available for local videos - -Peertube is a federated service. Plugins are only available on the server you are browsing. -So, if you are watching a remote video, only you will have the webchat, not users from remote instances. -Therefore, this options is checked by default and prevent displaying a webchat for remote videos. - -### Activate chat for all lives - -The chat will be available for all Peertube Live on your instance. -This is the main purpose of this plugin: providing a chatting experience to user watching a live video. - -### Activate chat for all non-lives - -The chat will be available for all Peertube video that are not live. - -### Activate chat for specific videos - -You can choose some UUIDs for which the chat will be available. -If you don't want te enable the feature for all videos, you can use this field to list videos UUIDs. -You can add comments: everything rights to the # character will be stripped off, as for empty lines. - -NB: this feature will probably soon disappear. I planned to add a checkbox in each video settings. - -### Use builtin ConverseJS - -If you have an XMPP server, and don't want to provide a webchat application by yourself, you can use the builtin ConverseJS implementation. - -If you don't have a running XMPP server, you can use -[this tutorial](documentation/tutorials/prosody.md) to setup Prosody Server -on your Peertube's instance. - -You have to fill the following parameters: - -#### Builtin webchat: XMPP service server (mandatory) - -The XMPP server. For example: ```peertube.im.your_domain```. - -NB: If you have an existing Prosody server, you can use its address if it has anonymous authentication on. -Otherwise, you can create a subdomain (see [the example file](documentation/examples/prosody/virtualhost.cfg.lua)). -The ```peertube.im``` is part of the example, you have to replace the entire value. - -#### Builtin webchat: XMPP room template (mandatory) - -The room to join on your XMPP server. -You can have a single room for all webchats, or you can use the placeholder ```{{{VIDEO_UUID}}}``` to insert the video UUID and have a custom room for each video. - -Example: ```room_{{VIDEO_UUID}}@room.peertube.im.your_domain``` - -#### Builtin webchat: BOSH uri OR Builtin webchat: WS uri - -You have to provide at least one of these two settings. - -Example for BOSH: ```https://peertube.im.yiny.org/http-bind``` - -Example for Websocket: ```wss://peertube.im.yiny.org/xmpp-websocket``` - -NB: ConverseJS can also use the ```/.well-known/host-meta``` file to discover services. -See ConverseJS [documentation](https://conversejs.org/docs/html/configuration.html#discover-connection-methods) -and XMPP [documentation](https://xmpp.org/extensions/xep-0156.html#httpexamples). - -### Webchat url - -If you are not using the builtin ConverseJS feature, you can speficy here the url for you chat application. - -You can add the string {{VIDEO_UUID}} in the url, it will be replaced by the video UUID. - -It is possible to use a single chat for all your videos if you omit this parameter. - -Example: -```https://peertube.im.your_domain?room={{VIDEO_UUID}}``` - -### Webchat iframe style attribute - -You can add some custom styles that will be added to the iframe. -For example a custom width: - -```width:400px;``` - -## XMPP backend with ConverseJS - -### ConverseJS - -You can use the builtin ConverseJS implementation. - -#### Custom ConverseJS webchat - -If you want to setup your own webchat with converseJS on a different webserver, here is some tips. - -Once you have a XMPP server that allow anonymous authentication, with bosh -(or websocket) enabled, you can - for example - setup a html page that looks like -[this one](documentation/examples/converseJS/index.html). You have of course to -replace the path /conversejs/dist with your converseJS path, and replace peertube.im.your_domain -by your actual domain. - -NB: converseJS has an option «discover_connection_methods» to find your server configuration (bosh, websocket, ...). -To use it, you have to add a file [/.well-known/host-meta](documentation/examples/converseJS/host-meta). -Please refer to the converseJS documentation. - -### XMPP Server: Prosody - -You can use Prosody for the XMPP backend. - -You can find an example configuration file [here](documentation/examples/prosody/virtualhost.cfg.lua) or use [this tutorial](documentation/tutorials/prosody.md) -to setup Prosody from scratch. - -Replace admin@your_xmpp_provider_domain with Jabber ids of users that you want to be admin for your server and public chatrooms. -This users have to be on another domain/virtualhost (which don't use anonymous authentication). -It can even be on another XMPP server. Or you can add a virtualhost on the -Peertube server's prosody config. -If you have no XMPP account, remove the line (but you will not be able to moderate rooms). - -Please refer to the [Prosody documentation](https://prosody.im/doc/) and to -[the tutorial](documentation/tutorials/prosody.md) for other modifications -(how to get the ssl certificates, ...). - -NB : if you have not nginx on your server, please replace by the correct parameter. - -### XMPP over HTTP: nginx - -You can use the reverse proxy nginx to server the Prosody Bosh server. -So your requests will be on the 443 port, and it will minimise cross domains constraints. - -There is an example file [here](documentation/examples/nginx/site.conf). - -NB: this example files also serve the static html files with converseJS. - -NB: it is recommanded to change ```Access-Control-Allow-Origin``` to something else that ```"*"``` (your peertubes uri). +* **builtin prosody:** this plugin can launch a [Prosody](https://prosody.im) process and auto-configure it. [Documentation](documentation/prosody.md) +* **builtin converseJS:** you can use an external Jabber/XMPP server with BOSH or Websocket and anonymous loggin enabled. [Documentation](documentation/conversejs.md) +* **external tool:** you can use any external webchat tool, that can be included in an iframe. [Documentation](documentation/external.md) ## Credits diff --git a/documentation/common.md b/documentation/common.md new file mode 100644 index 00000000..f762e181 --- /dev/null +++ b/documentation/common.md @@ -0,0 +1,43 @@ +# Common settings documentation + +There are several options in the plugin settings page that are common to all installation types. + +## Automatically open the chat + +If checked, the chat will be loaded as soon as you are on the video page. + +## Show the «open in new window» button + +If your webchat can be opened in a full window, you can add a button to do so. + +NB: The builtin ConverseJS is compatible with this feature. + +## Chats are only available for local videos + +Peertube is a federated service. Plugins are only available on the server you are browsing. +So, if you are watching a remote video, only you will have the webchat, not users from remote instances. +Therefore, this options is checked by default and prevent displaying a webchat for remote videos. + +## Activate chat for all lives + +The chat will be available for all Peertube Live on your instance. +This is the main purpose of this plugin: providing a chatting experience to user watching a live video. + +## Activate chat for all non-lives + +The chat will be available for all Peertube video that are not live. + +## Activate chat for specific videos + +You can choose some UUIDs for which the chat will be available. +If you don't want te enable the feature for all videos, you can use this field to list videos UUIDs. +You can add comments: everything rights to the # character will be stripped off, as for empty lines. + +NB: this feature will probably soon disappear. I planned to add a checkbox in each video settings. + +### Webchat iframe style attribute + +You can add some custom styles that will be added to the iframe. +For example a custom width: + +```width:400px;``` diff --git a/documentation/conversejs.md b/documentation/conversejs.md new file mode 100644 index 00000000..099a0f3b --- /dev/null +++ b/documentation/conversejs.md @@ -0,0 +1,51 @@ +# Use an external XMPP server + +**Important Note**: If you don't have a running XMPP server, here is a +**[tutorial to install Prosody XMPP Server](./tutorials/prosody.md) on your Peertube instance**. + +## Plugin Settings + +### Common settings + +First you have to configure [common settings](./common.md). + +Then, left settings related to the [builtin prosody](./prosody.md) blank, and fill following settings according to this page. + +### Use builtin ConverseJS + +Check this checkbox to use this mode. + +If you have an XMPP server, and don't want to provide a webchat application by yourself, you can use the builtin ConverseJS implementation. + +If you don't have a running XMPP server, you can use +[this tutorial](./tutorials/prosody.md) to setup Prosody Server +on your Peertube's instance. + +You have to fill the following parameters: + +#### Builtin webchat: XMPP service server (mandatory) + +The XMPP server. For example: ```peertube.im.your_domain```. + +NB: If you have an existing Prosody server, you can use its address if it has anonymous authentication on. +Otherwise, you can create a subdomain (see [the example file](documentation/examples/prosody/virtualhost.cfg.lua)). +The ```peertube.im``` is part of the example, you have to replace the entire value. + +#### Builtin webchat: XMPP room template (mandatory) + +The room to join on your XMPP server. +You can have a single room for all webchats, or you can use the placeholder ```{{{VIDEO_UUID}}}``` to insert the video UUID and have a custom room for each video. + +Example: ```room_{{VIDEO_UUID}}@room.peertube.im.your_domain``` + +#### Builtin webchat: BOSH uri OR Builtin webchat: WS uri + +You have to provide at least one of these two settings. + +Example for BOSH: ```https://peertube.im.yiny.org/http-bind``` + +Example for Websocket: ```wss://peertube.im.yiny.org/xmpp-websocket``` + +NB: ConverseJS can also use the ```/.well-known/host-meta``` file to discover services. +See ConverseJS [documentation](https://conversejs.org/docs/html/configuration.html#discover-connection-methods) +and XMPP [documentation](https://xmpp.org/extensions/xep-0156.html#httpexamples). diff --git a/documentation/external.md b/documentation/external.md new file mode 100644 index 00000000..ae21f3df --- /dev/null +++ b/documentation/external.md @@ -0,0 +1,67 @@ +# Use an external webchat tool + +You can use any webchat tool that can be included in an «iframe». + +## Common settings + +First you have to configure [common settings](./common.md). + +Then, left settings related to the [builtin prosody](./prosody.md) and [builtin converseJS](./conversejs.md) blank, and fill following settings according to this page. + +## Webchat url + +If you are not using the builtin ConverseJS feature, you can speficy here the url for you chat application. + +You can add the string {{VIDEO_UUID}} in the url, it will be replaced by the video UUID. + +It is possible to use a single chat for all your videos if you omit this parameter. + +Example: +```https://peertube.im.your_domain?room={{VIDEO_UUID}}``` + +## Tips: install your own XMPP webchat + +Here are some tips if you want to setup a XMPP server yourself. + +### Custom ConverseJS webchat + +If you want to setup your own webchat with converseJS on a different webserver, here is some tips. + +Once you have a XMPP server that allow anonymous authentication, with bosh +(or websocket) enabled, you can - for example - setup a html page that looks like +[this one](./examples/converseJS/index.html). You have of course to +replace the path /conversejs/dist with your converseJS path, and replace peertube.im.your_domain +by your actual domain. + +NB: converseJS has an option «discover_connection_methods» to find your server configuration (bosh, websocket, ...). +To use it, you have to add a file [/.well-known/host-meta](./examples/converseJS/host-meta). +Please refer to the converseJS documentation. + +### XMPP Server: Prosody + +You can use Prosody for the XMPP backend. + +You can find an example configuration file [here](./examples/prosody/virtualhost.cfg.lua) or use [this tutorial](./tutorials/prosody.md) +to setup Prosody from scratch. + +Replace admin@your_xmpp_provider_domain with Jabber ids of users that you want to be admin for your server and public chatrooms. +This users have to be on another domain/virtualhost (which don't use anonymous authentication). +It can even be on another XMPP server. Or you can add a virtualhost on the +Peertube server's prosody config. +If you have no XMPP account, remove the line (but you will not be able to moderate rooms). + +Please refer to the [Prosody documentation](https://prosody.im/doc/) and to [the tutorial](./tutorials/prosody.md) for other modifications +(how to get the ssl certificates, ...). + +NB : if you have not nginx on your server, please replace by the correct parameter. + +### XMPP over HTTP: nginx + +You can use the reverse proxy nginx to server the Prosody Bosh server. +So your requests will be on the 443 port, and it will minimise cross domains constraints. + +There is an example file [here](./examples/nginx/site.conf). + +NB: this example files also serve the static html files with converseJS. + +NB: it is recommanded to change ```Access-Control-Allow-Origin``` to something else that ```"*"``` (your peertubes uri). diff --git a/documentation/prosody.md b/documentation/prosody.md new file mode 100644 index 00000000..43fe1aa1 --- /dev/null +++ b/documentation/prosody.md @@ -0,0 +1,46 @@ +# Builtin Prosody XMPP Server + +Althought this mode is still experimental and under heavy development, it is the recommanded setup mode. + +Peertube will launch a [Prosody](https://prosody.im) process, with a custom configuration. + +## For Docker installations + +This mode is not yet compatible with a Docker Peertube installation. +If you are using Docker and want to help to make this work, please contact me. + +## Prerequisite + +You have to install [Prosody](https://prosody.im) on your server: + +```bash +sudo apt-get install prosody +``` + +If you are not using prosody for anything else on your server, you can then disabled it: + +```bash +sudo systemctl disable prosody && sudo systemctl stop prosody +``` + +**NB:** the plugin will create a directory in the `/tmp/` folder. Please ensure that the `peertube` user has write access to this directory. + +And that's it! + +The Prosody process launched by the plugin will listen on a specific port, and only on the localhost interface. + +## Settings + +### Common settings + +First you have to configure [common settings](./common.md). + +Then, left settings related to the [builtin converseJS](./converseJS.md) blank, and fill following settings according to this page. + +### Use the builtin Prosody XMPP Server + +Check this checkbox to activate this mode. + +#### Builtin prosody: Prosody port + +This is the port that the Prosody server will use. By default it is set to 52800. If you want to use another port, just change the value here. diff --git a/server/lib/settings.ts b/server/lib/settings.ts index e2b29970..cfeefb45 100644 --- a/server/lib/settings.ts +++ b/server/lib/settings.ts @@ -10,17 +10,47 @@ export function initSettings (options: RegisterServerOptions): void { type: 'input-checkbox', default: false, private: false, // not private so that I can check when doing support - descriptionHTML: 'Please read the ' + - 'documentation ' + - 'before trying to use this plugin.
' + - 'There is 3 way to use it:
' + - 'Before asking for help, please use this diagnostic tool: ' + - '
Launch diagnostic.
' + descriptionHTML: ` +Please read the + + documentation + +before trying to use this plugin.
+There is 3 way to use it: + +
+Before asking for help, please use this diagnostic tool: +Launch diagnostic +
` }) registerSetting({ name: 'chat-auto-display',