enable connections to sandbox from localhost

This commit is contained in:
or-else
2022-08-14 16:01:09 -07:00
22 changed files with 168 additions and 70 deletions
+1 -1
View File
@@ -839,7 +839,7 @@ table.permission-editor td.checkbox {
} }
input#host-name { input#host-name {
width: 15rem; width: 100%;
} }
/* Input with a search icon on the left */ /* Input with a search icon on the left */
+1 -1
View File
File diff suppressed because one or more lines are too long
+1
View File
@@ -2,6 +2,7 @@
"name": "tinode-webapp", "name": "tinode-webapp",
"description": "Tinode messenger for the web", "description": "Tinode messenger for the web",
"version": "0.20.0-rc1", "version": "0.20.0-rc1",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/tinode/example-react-js.git" "url": "https://github.com/tinode/example-react-js.git"
+9 -2
View File
@@ -1425,10 +1425,17 @@
"obsolete": false "obsolete": false
}, },
"call_disconnected": { "call_disconnected": {
"translation": "", "translation": "getrennt",
"defaultMessage": "disconnected", "defaultMessage": "disconnected",
"description": "Label for disconnected call", "description": "Label for disconnected call",
"missing": true, "missing": false,
"obsolete": false
},
"label_use_secure_connection": {
"translation": "Verwenden Sie eine sichere Verbindung",
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView",
"missing": false,
"obsolete": false "obsolete": false
} }
} }
+7
View File
@@ -1430,5 +1430,12 @@
"description": "Label for disconnected call", "description": "Label for disconnected call",
"missing": false, "missing": false,
"obsolete": false "obsolete": false
},
"label_use_secure_connection": {
"translation": "Use secure connection",
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView",
"missing": false,
"obsolete": false
} }
} }
+9 -2
View File
@@ -1425,10 +1425,17 @@
"obsolete": false "obsolete": false
}, },
"call_disconnected": { "call_disconnected": {
"translation": "", "translation": "desconectada",
"defaultMessage": "disconnected", "defaultMessage": "disconnected",
"description": "Label for disconnected call", "description": "Label for disconnected call",
"missing": true, "missing": false,
"obsolete": false
},
"label_use_secure_connection": {
"translation": "Usar conexión segura",
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView",
"missing": false,
"obsolete": false "obsolete": false
} }
} }
+4
View File
@@ -396,6 +396,10 @@
"defaultMessage": "Archived:", "defaultMessage": "Archived:",
"description": "Label for unarchiving the topic" "description": "Label for unarchiving the topic"
}, },
"label_use_secure_connection": {
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView"
},
"label_user_contacts": { "label_user_contacts": {
"defaultMessage": "Contacts:", "defaultMessage": "Contacts:",
"description": "Label for user contacts" "description": "Label for user contacts"
+25 -18
View File
@@ -1369,66 +1369,73 @@
"obsolete": false "obsolete": false
}, },
"already_in_call": { "already_in_call": {
"translation": "", "translation": "Vous êtes déjà dans un appel en cours!",
"defaultMessage": "You already in an ongoing call!", "defaultMessage": "You already in an ongoing call!",
"description": "Error message when the user tried to accept a new call without finishing pervious one", "description": "Error message when the user tried to accept a new call without finishing pervious one",
"missing": true, "missing": false,
"obsolete": false "obsolete": false
}, },
"call_cancelled": { "call_cancelled": {
"translation": "", "translation": "annulé",
"defaultMessage": "cancelled", "defaultMessage": "cancelled",
"description": "Label for cancelled outgoing call", "description": "Label for cancelled outgoing call",
"missing": true, "missing": false,
"obsolete": false "obsolete": false
}, },
"call_declined": { "call_declined": {
"translation": "", "translation": "refusé",
"defaultMessage": "declined", "defaultMessage": "declined",
"description": "Label for declined call", "description": "Label for declined call",
"missing": true, "missing": false,
"obsolete": false "obsolete": false
}, },
"call_missed": { "call_missed": {
"translation": "", "translation": "manqué",
"defaultMessage": "missed", "defaultMessage": "missed",
"description": "Label for missed incoming call", "description": "Label for missed incoming call",
"missing": true, "missing": false,
"obsolete": false "obsolete": false
}, },
"calls_incoming": { "calls_incoming": {
"translation": "", "translation": "Appel entrant",
"defaultMessage": "Incoming call", "defaultMessage": "Incoming call",
"description": "Incoming call label", "description": "Incoming call label",
"missing": true, "missing": false,
"obsolete": false "obsolete": false
}, },
"calls_outgoing": { "calls_outgoing": {
"translation": "", "translation": "Appel sortant",
"defaultMessage": "Outgoing call", "defaultMessage": "Outgoing call",
"description": "Outgoing call label", "description": "Outgoing call label",
"missing": true, "missing": false,
"obsolete": false "obsolete": false
}, },
"calls_you_label": { "calls_you_label": {
"translation": "", "translation": "Tu",
"defaultMessage": "You", "defaultMessage": "You",
"description": "Shown over the local video screen", "description": "Shown over the local video screen",
"missing": true, "missing": false,
"obsolete": false "obsolete": false
}, },
"menu_item_video_call": { "menu_item_video_call": {
"translation": "", "translation": "Appel vidéo",
"defaultMessage": "Video call", "defaultMessage": "Video call",
"description": "Start video call", "description": "Start video call",
"missing": true, "missing": false,
"obsolete": false "obsolete": false
}, },
"call_disconnected": { "call_disconnected": {
"translation": "", "translation": "débranché",
"defaultMessage": "disconnected", "defaultMessage": "disconnected",
"description": "Label for disconnected call", "description": "Label for disconnected call",
"missing": true, "missing": false,
"obsolete": false
},
"label_use_secure_connection": {
"translation": "Utiliser une connexion sécurisée",
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView",
"missing": false,
"obsolete": false "obsolete": false
} }
} }
+9 -2
View File
@@ -1425,10 +1425,17 @@
"obsolete": false "obsolete": false
}, },
"call_disconnected": { "call_disconnected": {
"translation": "", "translation": "연결 끊김",
"defaultMessage": "disconnected", "defaultMessage": "disconnected",
"description": "Label for disconnected call", "description": "Label for disconnected call",
"missing": true, "missing": false,
"obsolete": false
},
"label_use_secure_connection": {
"translation": "보안 연결 사용",
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView",
"missing": false,
"obsolete": false "obsolete": false
} }
} }
+9 -2
View File
@@ -1425,10 +1425,17 @@
"obsolete": false "obsolete": false
}, },
"call_disconnected": { "call_disconnected": {
"translation": "", "translation": "deconectat",
"defaultMessage": "disconnected", "defaultMessage": "disconnected",
"description": "Label for disconnected call", "description": "Label for disconnected call",
"missing": true, "missing": false,
"obsolete": false
},
"label_use_secure_connection": {
"translation": "Utilizați conexiune securizată",
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView",
"missing": false,
"obsolete": false "obsolete": false
} }
} }
+9 -2
View File
@@ -1425,10 +1425,17 @@
"obsolete": false "obsolete": false
}, },
"call_disconnected": { "call_disconnected": {
"translation": "", "translation": "разъединен",
"defaultMessage": "disconnected", "defaultMessage": "disconnected",
"description": "Label for disconnected call", "description": "Label for disconnected call",
"missing": true, "missing": false,
"obsolete": false
},
"label_use_secure_connection": {
"translation": "Безопасное соединение",
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView",
"missing": false,
"obsolete": false "obsolete": false
} }
} }
+9 -2
View File
@@ -1425,10 +1425,17 @@
"obsolete": false "obsolete": false
}, },
"call_disconnected": { "call_disconnected": {
"translation": "", "translation": "斷開連接",
"defaultMessage": "disconnected", "defaultMessage": "disconnected",
"description": "Label for disconnected call", "description": "Label for disconnected call",
"missing": true, "missing": false,
"obsolete": false
},
"label_use_secure_connection": {
"translation": "使用安全連接",
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView",
"missing": false,
"obsolete": false "obsolete": false
} }
} }
+9 -2
View File
@@ -1425,10 +1425,17 @@
"obsolete": false "obsolete": false
}, },
"call_disconnected": { "call_disconnected": {
"translation": "", "translation": "断开连接",
"defaultMessage": "disconnected", "defaultMessage": "disconnected",
"description": "Label for disconnected call", "description": "Label for disconnected call",
"missing": true, "missing": false,
"obsolete": false
},
"label_use_secure_connection": {
"translation": "使用安全连接",
"defaultMessage": "Use secure connection",
"description": "Label for WS/WSS connection type in SettingsView",
"missing": false,
"obsolete": false "obsolete": false
} }
} }
+1 -1
View File
File diff suppressed because one or more lines are too long
-2
View File
@@ -635,8 +635,6 @@ class MessagesView extends React.Component {
if (status >= Tinode.MESSAGE_STATUS_SENT && msg.from != this.props.myUserId) { if (status >= Tinode.MESSAGE_STATUS_SENT && msg.from != this.props.myUserId) {
this.postReadNotification(msg.seq); this.postReadNotification(msg.seq);
} }
// This will send "received" notifications right away.
this.props.onData(msg);
} }
handleAllMessagesReceived(count) { handleAllMessagesReceived(count) {
+18 -3
View File
@@ -2,6 +2,8 @@
import React from 'react'; import React from 'react';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import CheckBox from '../widgets/checkbox.jsx';
import HostSelector from '../widgets/host-selector.jsx'; import HostSelector from '../widgets/host-selector.jsx';
export default class SettingsView extends React.PureComponent { export default class SettingsView extends React.PureComponent {
@@ -11,18 +13,21 @@ export default class SettingsView extends React.PureComponent {
this.state = { this.state = {
transport: props.transport || 'def', transport: props.transport || 'def',
serverAddress: props.serverAddress, serverAddress: props.serverAddress,
secureConnection: props.secureConnection,
}; };
this.handleSubmit = this.handleSubmit.bind(this); this.handleSubmit = this.handleSubmit.bind(this);
this.handleTransportSelected = this.handleTransportSelected.bind(this); this.handleTransportSelected = this.handleTransportSelected.bind(this);
this.handleServerAddressChange = this.handleServerAddressChange.bind(this); this.handleServerAddressChange = this.handleServerAddressChange.bind(this);
this.handleToggleSecure = this.handleToggleSecure.bind(this);
} }
handleSubmit(e) { handleSubmit(e) {
e.preventDefault(); e.preventDefault();
this.props.onUpdate({ this.props.onUpdate({
transport: this.state.transport, transport: this.state.transport,
serverAddress: this.state.serverAddress serverAddress: this.state.serverAddress,
secureConnection: this.state.secureConnection,
}); });
} }
@@ -34,6 +39,10 @@ export default class SettingsView extends React.PureComponent {
this.setState({serverAddress: name}); this.setState({serverAddress: name});
} }
handleToggleSecure(e) {
this.setState({secureConnection: !this.state.secureConnection});
}
render() { render() {
const names = {def: "default", ws: "websocket", lp: "long polling"}; const names = {def: "default", ws: "websocket", lp: "long polling"};
const transportOptions = []; const transportOptions = [];
@@ -58,8 +67,14 @@ export default class SettingsView extends React.PureComponent {
description="Label for server selector in SettingsView" /> description="Label for server selector in SettingsView" />
</label> </label>
</div> </div>
<HostSelector serverAddress={this.state.serverAddress} <HostSelector serverAddress={this.state.serverAddress} onServerAddressChange={this.handleServerAddressChange} />
onServerAddressChange={this.handleServerAddressChange} /> <div className="panel-form-row">
<CheckBox id="secure-connection" name="secure-connection" checked={this.state.secureConnection}
onChange={this.handleToggleSecure} /><label>
<FormattedMessage id="label_use_secure_connection" defaultMessage="Use secure connection"
description="Label for WS/WSS connection type in SettingsView" />
</label>
</div>
<div className="panel-form-row"> <div className="panel-form-row">
<label className="small"> <label className="small">
<FormattedMessage id="label_wire_transport" defaultMessage="Wire transport:" <FormattedMessage id="label_wire_transport" defaultMessage="Wire transport:"
+1
View File
@@ -165,6 +165,7 @@ class SidepanelView extends React.Component {
<SettingsView <SettingsView
transport={this.props.transport} transport={this.props.transport}
serverAddress={this.props.serverAddress} serverAddress={this.props.serverAddress}
secureConnection={this.props.secureConnection}
onCancel={this.props.onCancel} onCancel={this.props.onCancel}
onUpdate={this.props.onGlobalSettings} /> : onUpdate={this.props.onGlobalSettings} /> :
+7 -11
View File
@@ -102,7 +102,6 @@ class TinodeWeb extends React.Component {
this.tnMeContactUpdate = this.tnMeContactUpdate.bind(this); this.tnMeContactUpdate = this.tnMeContactUpdate.bind(this);
this.tnMeSubsUpdated = this.tnMeSubsUpdated.bind(this); this.tnMeSubsUpdated = this.tnMeSubsUpdated.bind(this);
this.resetContactList = this.resetContactList.bind(this); this.resetContactList = this.resetContactList.bind(this);
this.tnData = this.tnData.bind(this);
this.tnInitFind = this.tnInitFind.bind(this); this.tnInitFind = this.tnInitFind.bind(this);
this.tnFndSubsUpdated = this.tnFndSubsUpdated.bind(this); this.tnFndSubsUpdated = this.tnFndSubsUpdated.bind(this);
this.handleSearchContacts = this.handleSearchContacts.bind(this); this.handleSearchContacts = this.handleSearchContacts.bind(this);
@@ -282,7 +281,7 @@ class TinodeWeb extends React.Component {
}); });
new Promise((resolve, reject) => { new Promise((resolve, reject) => {
this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, this.state.transport, this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, isSecureConnection(), this.state.transport,
this.props.intl.locale, this.state.persist, resolve); this.props.intl.locale, this.state.persist, resolve);
this.tinode.onConnect = this.handleConnected; this.tinode.onConnect = this.handleConnected;
this.tinode.onDisconnect = this.handleDisconnect; this.tinode.onDisconnect = this.handleDisconnect;
@@ -342,9 +341,9 @@ class TinodeWeb extends React.Component {
} }
// Setup transport (usually websocket) and server address. This will terminate connection with the server. // Setup transport (usually websocket) and server address. This will terminate connection with the server.
static tnSetup(serverAddress, transport, locale, persistentCache, onSetupCompleted) { static tnSetup(serverAddress, secureConnection, transport, locale, persistentCache, onSetupCompleted) {
const tinode = new Tinode({appName: APP_NAME, host: serverAddress, apiKey: API_KEY, transport: transport, const tinode = new Tinode({appName: APP_NAME, host: serverAddress, apiKey: API_KEY, transport: transport,
secure: isSecureConnection(), persist: persistentCache}, onSetupCompleted); secure: secureConnection, persist: persistentCache}, onSetupCompleted);
tinode.setHumanLanguage(locale); tinode.setHumanLanguage(locale);
tinode.enableLogging(LOGGING_ENABLED, true); tinode.enableLogging(LOGGING_ENABLED, true);
return tinode; return tinode;
@@ -887,9 +886,6 @@ class TinodeWeb extends React.Component {
this.setState(newState); this.setState(newState);
} }
tnData(data) {
}
/* Fnd topic: find contacts by tokens */ /* Fnd topic: find contacts by tokens */
tnInitFind() { tnInitFind() {
const fnd = this.tinode.getFndTopic(); const fnd = this.tinode.getFndTopic();
@@ -1146,8 +1142,8 @@ class TinodeWeb extends React.Component {
this.tinode.onDisconnect = undefined; this.tinode.onDisconnect = undefined;
this.tinode.disconnect(); this.tinode.disconnect();
} }
this.tinode = TinodeWeb.tnSetup(serverAddress, transport, this.props.intl.locale, this.tinode = TinodeWeb.tnSetup(serverAddress, settings.secureConnection, transport,
LocalStorageUtil.getObject('keep-logged-in')); this.props.intl.locale, LocalStorageUtil.getObject('keep-logged-in'));
this.tinode.onConnect = this.handleConnected; this.tinode.onConnect = this.handleConnected;
this.tinode.onDisconnect = this.handleDisconnect; this.tinode.onDisconnect = this.handleDisconnect;
this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration; this.tinode.onAutoreconnectIteration = this.handleAutoreconnectIteration;
@@ -1407,7 +1403,7 @@ class TinodeWeb extends React.Component {
this.setState(this.getBlankState()); this.setState(this.getBlankState());
cleared.then(() => { cleared.then(() => {
this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, this.tinode = TinodeWeb.tnSetup(this.state.serverAddress, isSecureConnection(),
this.state.transport, this.props.intl.locale, LocalStorageUtil.getObject('keep-logged-in'), () => { this.state.transport, this.props.intl.locale, LocalStorageUtil.getObject('keep-logged-in'), () => {
this.tinode.onConnect = this.handleConnected; this.tinode.onConnect = this.handleConnected;
this.tinode.onDisconnect = this.handleDisconnect; this.tinode.onDisconnect = this.handleDisconnect;
@@ -1948,6 +1944,7 @@ class TinodeWeb extends React.Component {
desktopAlertsEnabled={this.state.desktopAlertsEnabled} desktopAlertsEnabled={this.state.desktopAlertsEnabled}
incognitoMode={this.state.incognitoMode} incognitoMode={this.state.incognitoMode}
serverAddress={this.state.serverAddress} serverAddress={this.state.serverAddress}
secureConnection={isSecureConnection()}
serverVersion={this.state.serverVersion} serverVersion={this.state.serverVersion}
onGlobalSettings={this.handleGlobalSettings} onGlobalSettings={this.handleGlobalSettings}
@@ -2025,7 +2022,6 @@ class TinodeWeb extends React.Component {
newTopicParams={this.state.newTopicParams} newTopicParams={this.state.newTopicParams}
onHideMessagesView={this.handleHideMessagesView} onHideMessagesView={this.handleHideMessagesView}
onData={this.tnData}
onError={this.handleError} onError={this.handleError}
onNewTopicCreated={this.handleNewTopicCreated} onNewTopicCreated={this.handleNewTopicCreated}
showContextMenu={this.handleShowContextMenu} showContextMenu={this.handleShowContextMenu}
+36 -16
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long