import { getBaseRouterRoute } from './helpers' import { ensureProsodyRunning, ensureProsodyNotRunning } from './prosody/ctl' export function initSettings (options: RegisterServerOptions): void { const { peertubeHelpers, registerSetting, settingsManager } = options registerSetting({ name: 'chat-read-documentation', label: 'I have read the documentation', 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
` }) registerSetting({ name: 'chat-auto-display', label: 'Automatically open the chat', type: 'input-checkbox', default: false, // FIXME: set true when Peertube 3.2.0 is out (https://github.com/Chocobozzz/PeerTube/issues/4106) private: false }) registerSetting({ name: 'chat-open-blank', label: 'Show the «open in new window» button', private: false, type: 'input-checkbox', default: false // FIXME: set true when Peertube 3.2.0 is out (https://github.com/Chocobozzz/PeerTube/issues/4106) }) registerSetting({ name: 'chat-only-locals', label: 'Chats are only available for local videos.', type: 'input-checkbox', default: false, // FIXME: set true when Peertube 3.2.0 is out (https://github.com/Chocobozzz/PeerTube/issues/4106) private: false }) registerSetting({ name: 'chat-all-lives', label: 'Activate chat for all lives', type: 'input-checkbox', default: false, // FIXME: set true when Peertube 3.2.0 is out (https://github.com/Chocobozzz/PeerTube/issues/4106) descriptionHTML: 'If checked, a chat will be added to all lives.', private: false }) registerSetting({ name: 'chat-all-non-lives', label: 'Activate chat for all non-lives', type: 'input-checkbox', default: false, descriptionHTML: 'If checked, a chat will be added to all video that are not lives.', private: false }) registerSetting({ name: 'chat-videos-list', label: 'Activate chat for specific videos', type: 'input-textarea', default: '', descriptionHTML: 'Videos UUIDs for which we want a chat. ' + 'Can be non-live videos. One per line.
' + 'You can add comments: everything after the # character will be stripped off, and empty lines ignored.
' + 'Don\'t add private videos, the UUIDs will be send to frontend.', private: false }) registerSetting({ name: 'chat-use-prosody', label: 'Use builtin Prosody XMPP Server', type: 'input-checkbox', // /!\ dont auto-activate on existing settups. FIXME: how to do this? default: false, // TODO: set to true when we have a way to know if the plugin was previously installed. private: false, descriptionHTML: 'If checked, this will use a builtin XMPP server. This is the recommanded setup.' }) registerSetting({ name: 'prosody-port', label: 'Builtin prosody: Prosody port', type: 'input', default: '52800', private: true, descriptionHTML: 'The port that will be used by the builtin Prosody server.
' + 'Change it if this port is already in use on your server.
' + 'You can close this port on your firewall, it will not be accessed from the outer world.' }) registerSetting({ name: 'chat-use-builtin', label: 'Use builtin ConverseJS', type: 'input-checkbox', default: false, private: false, descriptionHTML: 'If checked, use a builtin ConverseJS iframe.
' + 'You still have to configure an external XMPP service. Please see the ' + 'documentation.
' + 'If you have no running webchat service, you can follow this ' + // eslint-disable-next-line max-len '
tutorial.' }) registerSetting({ name: 'chat-server', label: 'Builtin webchat: XMPP service server', type: 'input', default: '', descriptionHTML: 'When using the built-in converseJS webchat:
' + 'Your XMPP server. Without any scheme. Example : peertube.im.your_domain.', private: true }) registerSetting({ name: 'chat-room', label: 'Builtin webchat: XMPP room template', type: 'input', default: '', descriptionHTML: 'When using the built-in converseJS webchat:
' + 'Your XMPP room. You can use the placeholder {{VIDEO_UUID}} to add the video UUID.' + 'Without this placeholder, all videos will point to the same chat room.
' + 'Example: public@room.peertube.im.your_domain
' + 'Example: public_{{VIDEO_UUID}}@room.peertube.im.your_domain', private: true }) registerSetting({ name: 'chat-bosh-uri', label: 'Builtin webchat: BOSH uri', type: 'input', default: '', descriptionHTML: 'When using the built-in converseJS webchat:
' + 'URI of the external BOSH server. Please make sure it accept cross origin request from your domain.
' + 'You must at least have a BOSH or a Websocket uri.', private: true }) registerSetting({ name: 'chat-ws-uri', label: 'Builtin webchat: WS uri', type: 'input', default: '', descriptionHTML: 'When using the built-in converseJS webchat:
' + 'URI of the external WS server. Please make sure it accept cross origin request from your domain.
' + 'You must at least have a BOSH or a Websocket uri.', private: true }) registerSetting({ name: 'chat-uri', label: 'Webchat url', type: 'input', default: '', descriptionHTML: 'If you dont want to use the builtin ConverseJS webchat:
' + 'Put here your webchat url. An iframe will be created pointing to this url. ' + 'The placeholder {{VIDEO_UUID}} will be replace by the video UUID if present. ' + 'Example : https://my_domain/conversejs.html?room=video_{{VIDEO_UUID}}.
' + 'If this field is empty, it will use the builtin ConverseJS webchat.', private: false }) registerSetting({ name: 'chat-style', label: 'Webchat iframe style attribute', type: 'input-textarea', default: '', descriptionHTML: 'Additional styles to be added on the iframe style attribute.
' + 'Example: height:400px;', private: false }) // settings changes management // FIXME: Peertube <= 3.1.0 wrongly consider that the callback should not be async // eslint-disable-next-line @typescript-eslint/no-misused-promises settingsManager.onSettingsChange(async (settings: any) => { if ('chat-use-prosody' in settings) { if (settings['chat-use-prosody'] === true) { peertubeHelpers.logger.info('Saving settings, ensuring prosody is running') await ensureProsodyRunning(options) } else if (settings['chat-use-prody'] === false) { peertubeHelpers.logger.info('Saving settings, ensuring prosody is not running') await ensureProsodyNotRunning(options) } } }) }