e2ee: show warning if not all participants support E2EE
Refs: https://github.com/jitsi/lib-jitsi-meet/pull/1108
This commit is contained in:
parent
b1d1599a1c
commit
e2788e0fb2
|
@ -178,6 +178,7 @@
|
||||||
"e2eeDescription": "<p>End-to-End Encryption is currently <strong>EXPERIMENTAL</strong>. Please see <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a> for details.</p><br/><p>Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: recording, live streaming and phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.</p>",
|
"e2eeDescription": "<p>End-to-End Encryption is currently <strong>EXPERIMENTAL</strong>. Please see <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a> for details.</p><br/><p>Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: recording, live streaming and phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.</p>",
|
||||||
"e2eeLabel": "Key",
|
"e2eeLabel": "Key",
|
||||||
"e2eeTitle": "End-to-End Encryption",
|
"e2eeTitle": "End-to-End Encryption",
|
||||||
|
"e2eeWarning": "<br /><p><strong>WARNING:</strong> Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.</p>",
|
||||||
"enterDisplayName": "Please enter your name here",
|
"enterDisplayName": "Please enter your name here",
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"externalInstallationMsg": "You need to install our desktop sharing extension.",
|
"externalInstallationMsg": "You need to install our desktop sharing extension.",
|
||||||
|
|
|
@ -196,6 +196,13 @@ StateListenerRegistry.register(
|
||||||
JitsiConferenceEvents.PARTICIPANT_PROPERTY_CHANGED,
|
JitsiConferenceEvents.PARTICIPANT_PROPERTY_CHANGED,
|
||||||
(participant, propertyName, oldValue, newValue) => {
|
(participant, propertyName, oldValue, newValue) => {
|
||||||
switch (propertyName) {
|
switch (propertyName) {
|
||||||
|
case 'features_e2ee':
|
||||||
|
store.dispatch(participantUpdated({
|
||||||
|
conference,
|
||||||
|
id: participant.getId(),
|
||||||
|
e2eeSupported: newValue
|
||||||
|
}));
|
||||||
|
break;
|
||||||
case 'features_jigasi':
|
case 'features_jigasi':
|
||||||
store.dispatch(participantUpdated({
|
store.dispatch(participantUpdated({
|
||||||
conference,
|
conference,
|
||||||
|
|
|
@ -7,6 +7,7 @@ import { FieldTextStateless as TextField } from '@atlaskit/field-text';
|
||||||
import { createE2EEEvent, sendAnalytics } from '../../analytics';
|
import { createE2EEEvent, sendAnalytics } from '../../analytics';
|
||||||
import { Dialog } from '../../base/dialog';
|
import { Dialog } from '../../base/dialog';
|
||||||
import { translate, translateToHTML } from '../../base/i18n';
|
import { translate, translateToHTML } from '../../base/i18n';
|
||||||
|
import { getParticipants } from '../../base/participants';
|
||||||
import { connect } from '../../base/redux';
|
import { connect } from '../../base/redux';
|
||||||
|
|
||||||
import { setE2EEKey } from '../actions';
|
import { setE2EEKey } from '../actions';
|
||||||
|
@ -14,6 +15,11 @@ import { setE2EEKey } from '../actions';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether all participants in the conference currently support E2EE.
|
||||||
|
*/
|
||||||
|
_everyoneSupportsE2EE: boolean,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The current E2EE key.
|
* The current E2EE key.
|
||||||
*/
|
*/
|
||||||
|
@ -70,7 +76,7 @@ class E2EEDialog extends Component<Props, State> {
|
||||||
* @returns {ReactElement}
|
* @returns {ReactElement}
|
||||||
*/
|
*/
|
||||||
render() {
|
render() {
|
||||||
const { t } = this.props;
|
const { _everyoneSupportsE2EE, t } = this.props;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog
|
<Dialog
|
||||||
|
@ -81,6 +87,12 @@ class E2EEDialog extends Component<Props, State> {
|
||||||
<div className = 'e2ee-destription'>
|
<div className = 'e2ee-destription'>
|
||||||
{ translateToHTML(t, 'dialog.e2eeDescription') }
|
{ translateToHTML(t, 'dialog.e2eeDescription') }
|
||||||
</div>
|
</div>
|
||||||
|
{
|
||||||
|
!_everyoneSupportsE2EE
|
||||||
|
&& <div className = 'e2ee-warn'>
|
||||||
|
{ translateToHTML(t, 'dialog.e2eeWarning') }
|
||||||
|
</div>
|
||||||
|
}
|
||||||
<TextField
|
<TextField
|
||||||
autoFocus = { true }
|
autoFocus = { true }
|
||||||
compact = { true }
|
compact = { true }
|
||||||
|
@ -133,8 +145,10 @@ class E2EEDialog extends Component<Props, State> {
|
||||||
*/
|
*/
|
||||||
function mapStateToProps(state) {
|
function mapStateToProps(state) {
|
||||||
const { e2eeKey } = state['features/e2ee'];
|
const { e2eeKey } = state['features/e2ee'];
|
||||||
|
const participants = getParticipants(state).filter(p => !p.local);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
_everyoneSupportsE2EE: participants.every(p => Boolean(p.e2eeSupported)),
|
||||||
_key: e2eeKey || ''
|
_key: e2eeKey || ''
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue