summaryrefslogtreecommitdiffstats
path: root/webapp
diff options
context:
space:
mode:
Diffstat (limited to 'webapp')
-rw-r--r--webapp/components/admin_console/admin_sidebar.jsx16
-rw-r--r--webapp/components/admin_console/webrtc_settings.jsx220
-rw-r--r--webapp/i18n/en.json24
-rw-r--r--webapp/routes/route_admin_console.jsx5
4 files changed, 265 insertions, 0 deletions
diff --git a/webapp/components/admin_console/admin_sidebar.jsx b/webapp/components/admin_console/admin_sidebar.jsx
index 77d2fa2ae..1e74df05f 100644
--- a/webapp/components/admin_console/admin_sidebar.jsx
+++ b/webapp/components/admin_console/admin_sidebar.jsx
@@ -180,6 +180,7 @@ export default class AdminSidebar extends React.Component {
let samlSettings = null;
let clusterSettings = null;
let complianceSettings = null;
+ let webrtcSettings = null;
let license = null;
let audits = null;
@@ -256,6 +257,20 @@ export default class AdminSidebar extends React.Component {
);
}
+ if (global.window.mm_license.Webrtc === 'true') {
+ webrtcSettings = (
+ <AdminSidebarSection
+ name='webrtc'
+ title={
+ <FormattedMessage
+ id='admin.sidebar.webrtc'
+ defaultMessage='WebRTC'
+ />
+ }
+ />
+ );
+ }
+
oauthSettings = (
<AdminSidebarSection
name='oauth'
@@ -572,6 +587,7 @@ export default class AdminSidebar extends React.Component {
/>
}
/>
+ {webrtcSettings}
<AdminSidebarSection
name='external'
title={
diff --git a/webapp/components/admin_console/webrtc_settings.jsx b/webapp/components/admin_console/webrtc_settings.jsx
new file mode 100644
index 000000000..eac075bfa
--- /dev/null
+++ b/webapp/components/admin_console/webrtc_settings.jsx
@@ -0,0 +1,220 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import React from 'react';
+
+import * as Utils from 'utils/utils.jsx';
+
+import AdminSettings from './admin_settings.jsx';
+import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
+import SettingsGroup from './settings_group.jsx';
+import BooleanSetting from './boolean_setting.jsx';
+import TextSetting from './text_setting.jsx';
+
+export default class WebrtcSettings extends AdminSettings {
+ constructor(props) {
+ super(props);
+
+ this.getConfigFromState = this.getConfigFromState.bind(this);
+ this.renderSettings = this.renderSettings.bind(this);
+ }
+
+ getConfigFromState(config) {
+ config.WebrtcSettings.Enable = this.state.enableWebrtc;
+ config.WebrtcSettings.GatewayWebsocketUrl = this.state.gatewayWebsocketUrl;
+ config.WebrtcSettings.GatewayAdminUrl = this.state.gatewayAdminUrl;
+ config.WebrtcSettings.GatewayAdminSecret = this.state.gatewayAdminSecret;
+ config.WebrtcSettings.StunURI = this.state.stunURI;
+ config.WebrtcSettings.TurnURI = this.state.turnURI;
+ config.WebrtcSettings.TurnUsername = this.state.turnUsername;
+ config.WebrtcSettings.TurnSharedKey = this.state.turnSharedKey;
+
+ return config;
+ }
+
+ getStateFromConfig(config) {
+ const settings = config.WebrtcSettings;
+
+ return {
+ hasErrors: false,
+ enableWebrtc: settings.Enable,
+ gatewayWebsocketUrl: settings.GatewayWebsocketUrl,
+ gatewayAdminUrl: settings.GatewayAdminUrl,
+ gatewayAdminSecret: settings.GatewayAdminSecret,
+ stunURI: settings.StunURI,
+ turnURI: settings.TurnURI,
+ turnUsername: settings.TurnUsername,
+ turnSharedKey: settings.TurnSharedKey
+ };
+ }
+
+ renderTitle() {
+ return (
+ <h3>
+ <FormattedMessage
+ id='admin.integrations.webrtc'
+ defaultMessage='Mattermost WebRTC'
+ />
+ </h3>
+ );
+ }
+
+ renderSettings() {
+ return (
+ <SettingsGroup>
+ <BooleanSetting
+ id='enableWebrtc'
+ label={
+ <FormattedMessage
+ id='admin.webrtc.enableTitle'
+ defaultMessage='Enable Mattermost WebRTC: '
+ />
+ }
+ helpText={
+ <FormattedHTMLMessage
+ id='admin.webrtc.enableDescription'
+ defaultMessage='When true, Mattermost allows making <strong>one on one</strong> video calls.'
+ />
+ }
+ value={this.state.enableWebrtc}
+ onChange={this.handleChange}
+ />
+ <TextSetting
+ id='gatewayWebsocketUrl'
+ label={
+ <FormattedMessage
+ id='admin.webrtc.gatewayWebsocketUrlTitle'
+ defaultMessage='Gateway Websocket URL:'
+ />
+ }
+ placeholder={Utils.localizeMessage('admin.webrtc.gatewayWebsocketUrlExample', 'Ex "wss://webrtc.mattermost.com:8189"')}
+ helpText={
+ <FormattedMessage
+ id='admin.webrtc.gatewayWebsocketUrlDescription'
+ defaultMessage='Enter wss://<mattermost-webrtc-gateway-url>:<port>. Make sure you use WS or WSS in your URL depending on your server configuration.
+ This is the websocket used to signal and establish communication between the peers.'
+ />
+ }
+ value={this.state.gatewayWebsocketUrl}
+ onChange={this.handleChange}
+ disabled={!this.state.enableWebrtc}
+ />
+ <TextSetting
+ id='gatewayAdminUrl'
+ label={
+ <FormattedMessage
+ id='admin.webrtc.gatewayAdminUrlTitle'
+ defaultMessage='Gateway Admin URL:'
+ />
+ }
+ placeholder={Utils.localizeMessage('admin.webrtc.gatewayAdminUrlExample', 'Ex "https://webrtc.mattermost.com:7089/admin"')}
+ helpText={
+ <FormattedMessage
+ id='admin.webrtc.gatewayAdminUrlDescription'
+ defaultMessage='Enter https://<mattermost-webrtc-gateway-url>:<port>. Make sure you use HTTP or HTTPS in your URL depending on your server configuration.
+ Mattermost WebRTC uses this URL to obtain valid tokens for each peer to establish the connection.'
+ />
+ }
+ value={this.state.gatewayAdminUrl}
+ onChange={this.handleChange}
+ disabled={!this.state.enableWebrtc}
+ />
+ <TextSetting
+ id='gatewayAdminSecret'
+ label={
+ <FormattedMessage
+ id='admin.webrtc.gatewayAdminSecretTitle'
+ defaultMessage='Gateway Admin Secret:'
+ />
+ }
+ placeholder={Utils.localizeMessage('admin.webrtc.gatewayAdminSecretExample', 'Ex "PVRzWNN1Tg6szn7IQWvhpAvLByScWxdy"')}
+ helpText={
+ <FormattedMessage
+ id='admin.webrtc.gatewayAdminSecretDescription'
+ defaultMessage='Enter your admin secret password to access the Gateway Admin URL.'
+ />
+ }
+ value={this.state.gatewayAdminSecret}
+ onChange={this.handleChange}
+ disabled={!this.state.enableWebrtc}
+ />
+ <TextSetting
+ id='stunURI'
+ label={
+ <FormattedMessage
+ id='admin.webrtc.stunUriTitle'
+ defaultMessage='STUN URI:'
+ />
+ }
+ placeholder={Utils.localizeMessage('admin.webrtc.stunUriExample', 'Ex "stun:webrtc.mattermost.com:5349"')}
+ helpText={
+ <FormattedMessage
+ id='admin.webrtc.stunUriDescription'
+ defaultMessage='Enter your STUN URI as stun:<your-stun-url>:<port>. STUN is a standardized network protocol to allow an end host to assist devices to access its public IP address if it is located behind a NAT.'
+ />
+ }
+ value={this.state.stunURI}
+ onChange={this.handleChange}
+ disabled={!this.state.enableWebrtc}
+ />
+ <TextSetting
+ id='turnURI'
+ label={
+ <FormattedMessage
+ id='admin.webrtc.turnUriTitle'
+ defaultMessage='TURN URI:'
+ />
+ }
+ placeholder={Utils.localizeMessage('admin.webrtc.turnUriExample', 'Ex "turn:webrtc.mattermost.com:5349"')}
+ helpText={
+ <FormattedHTMLMessage
+ id='admin.webrtc.turnUriDescription'
+ defaultMessage='Enter your TURN URI as turn:<your-turn-url>:<port>. TURN is a standardized network protocol to allow an end host to assist devices to establish a connection by using a relay public IP address if it is located behind a symmetric NAT.'
+ />
+ }
+ value={this.state.turnURI}
+ onChange={this.handleChange}
+ disabled={!this.state.enableWebrtc}
+ />
+ <TextSetting
+ id='turnUsername'
+ label={
+ <FormattedMessage
+ id='admin.webrtc.turnUsernameTitle'
+ defaultMessage='TURN Username:'
+ />
+ }
+ placeholder={Utils.localizeMessage('admin.webrtc.turnUsernameExample', 'Ex "myusername"')}
+ helpText={
+ <FormattedHTMLMessage
+ id='admin.webrtc.turnUsernameDescription'
+ defaultMessage='Enter your TURN Server Username.'
+ />
+ }
+ value={this.state.turnUsername}
+ onChange={this.handleChange}
+ disabled={!this.state.enableWebrtc || !this.state.turnURI}
+ />
+ <TextSetting
+ id='turnSharedKey'
+ label={
+ <FormattedMessage
+ id='admin.webrtc.turnSharedKeyTitle'
+ defaultMessage='TURN Shared Key:'
+ />
+ }
+ placeholder={Utils.localizeMessage('admin.webrtc.turnSharedKeyExample', 'Ex "bXdkOWQxc3d0Ynk3emY5ZmsxZ3NtazRjaWg="')}
+ helpText={
+ <FormattedHTMLMessage
+ id='admin.webrtc.turnSharedKeyDescription'
+ defaultMessage='Enter your TURN Server Shared Key. This is used to created dynamic passwords to establish the connection. Each password is valid for a short period of time.'
+ />
+ }
+ value={this.state.turnSharedKey}
+ onChange={this.handleChange}
+ disabled={!this.state.enableWebrtc || !this.state.turnURI}
+ />
+ </SettingsGroup>
+ );
+ }
+}
diff --git a/webapp/i18n/en.json b/webapp/i18n/en.json
index 66e994893..4a6293b2d 100644
--- a/webapp/i18n/en.json
+++ b/webapp/i18n/en.json
@@ -392,6 +392,7 @@
"admin.image.thumbWidthTitle": "Attachment Thumbnail Width:",
"admin.integrations.custom": "Custom Integrations",
"admin.integrations.external": "External Services",
+ "admin.integrations.webrtc": "Mattermost WebRTC",
"admin.ldap.baseDesc": "The Base DN is the Distinguished Name of the location where Mattermost should start its search for users in the AD/LDAP tree.",
"admin.ldap.baseEx": "Ex \"ou=Unit Name,dc=corp,dc=example,dc=com\"",
"admin.ldap.baseTitle": "BaseDN:",
@@ -823,6 +824,29 @@
"admin.user_item.switchToEmail": "Switch to Email/Password",
"admin.user_item.sysAdmin": "System Admin",
"admin.user_item.teamAdmin": "Team Admin",
+ "admin.webrtc.enableDescription": "When true, Mattermost allows making <strong>one on one</strong> video calls.",
+ "admin.webrtc.enableTitle": "Enable Mattermost WebRTC: ",
+ "admin.webrtc.gatewayAdminSecretDescription": "Enter your admin secret password to access the Gateway Admin URL.",
+ "admin.webrtc.gatewayAdminSecretExample": "Ex \"PVRzWNN1Tg6szn7IQWvhpAvLByScWxdy\"",
+ "admin.webrtc.gatewayAdminSecretTitle": "Gateway Admin Secret:",
+ "admin.webrtc.gatewayAdminUrlDescription": "Enter https://<mattermost-webrtc-gateway-url>:<port>. Make sure you use HTTP or HTTPS in your URL depending on your server configuration. Mattermost WebRTC uses this URL to obtain valid tokens for each peer to establish the connection.",
+ "admin.webrtc.gatewayAdminUrlExample": "Ex \"https://webrtc.mattermost.com:7089/admin\"",
+ "admin.webrtc.gatewayAdminUrlTitle": "Gateway Admin URL:",
+ "admin.webrtc.gatewayWebsocketUrlDescription": "Enter wss://<mattermost-webrtc-gateway-url>:<port>. Make sure you use WS or WSS in your URL depending on your server configuration. This is the websocket used to signal and establish communication between the peers.",
+ "admin.webrtc.gatewayWebsocketUrlExample": "Ex \"wss://webrtc.mattermost.com:8189\"",
+ "admin.webrtc.gatewayWebsocketUrlTitle": "Gateway Websocket URL:",
+ "admin.webrtc.stunUriDescription": "Enter your STUN URI as stun:<your-stun-url>:<port>. STUN is a standardized network protocol to allow an end host to assist devices to access its public IP address if it is located behind a NAT.",
+ "admin.webrtc.stunUriExample": "Ex \"stun:webrtc.mattermost.com:5349\"",
+ "admin.webrtc.stunUriTitle": "STUN URI",
+ "admin.webrtc.turnSharedKeyDescription": "Enter your TURN Server Shared Key. This is used to created dynamic passwords to establish the connection. Each password is valid for a short period of time.",
+ "admin.webrtc.turnSharedKeyExample": "Ex \"bXdkOWQxc3d0Ynk3emY5ZmsxZ3NtazRjaWg=\"",
+ "admin.webrtc.turnSharedKeyTitle": "TURN Shared Key:",
+ "admin.webrtc.turnUriDescription": "Enter your TURN URI as turn:<your-turn-url>:<port>. TURN is a standardized network protocol to allow an end host to assist devices to establish a connection by using a relay public IP address if it is located behind a symmetric NAT.",
+ "admin.webrtc.turnUriExample": "Ex \"turn:webrtc.mattermost.com:5349\"",
+ "admin.webrtc.turnUriTitle": "TURN URI",
+ "admin.webrtc.turnUsernameDescription": "Enter your TURN Server Username.",
+ "admin.webrtc.turnUsernameExample": "Ex \"myusername\"",
+ "admin.webrtc.turnUsernameTitle": "TURN Username:",
"admin.webserverModeDisabled": "Disabled",
"admin.webserverModeDisabledDescription": "The Mattermost server will not serve static files.",
"admin.webserverModeGzip": "gzip",
diff --git a/webapp/routes/route_admin_console.jsx b/webapp/routes/route_admin_console.jsx
index f20c5c379..e3e22ed68 100644
--- a/webapp/routes/route_admin_console.jsx
+++ b/webapp/routes/route_admin_console.jsx
@@ -27,6 +27,7 @@ import EmailSettings from 'components/admin_console/email_settings.jsx';
import PushSettings from 'components/admin_console/push_settings.jsx';
import CustomIntegrationsSettings from 'components/admin_console/custom_integrations_settings.jsx';
import ExternalServiceSettings from 'components/admin_console/external_service_settings.jsx';
+import WebrtcSettings from 'components/admin_console/webrtc_settings.jsx';
import DatabaseSettings from 'components/admin_console/database_settings.jsx';
import StorageSettings from 'components/admin_console/storage_settings.jsx';
import ImageSettings from 'components/admin_console/image_settings.jsx';
@@ -147,6 +148,10 @@ export default (
path='external'
component={ExternalServiceSettings}
/>
+ <Route
+ path='webrtc'
+ component={WebrtcSettings}
+ />
</Route>
<Route path='files'>
<IndexRedirect to='storage'/>