diff --git a/package.json b/package.json index 247368c01b26..c7508c97f1e7 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "js-md5": "0.6.1", "js-sha512": "0.8.0", "jwt-decode": "2.2.0", - "lib-jitsi-meet": "https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.13/lib-jitsi-meet-0.0.13.tgz", + "lib-jitsi-meet": "https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.15/lib-jitsi-meet-0.0.15.tgz", "lodash-es": "4.17.21", "moment": "2.29.4", "moment-duration-format": "2.2.2", diff --git a/react/features/base/conference/functions.ts b/react/features/base/conference/functions.ts index fef9fe745fe2..2fe66f14ffcb 100644 --- a/react/features/base/conference/functions.ts +++ b/react/features/base/conference/functions.ts @@ -246,6 +246,8 @@ export function getConferenceOptions(stateful: IStateful) { delete config.analytics?.amplitudeAPPKey; } + options.isChatEncrypted = true; // Encrypted by default + return options; } diff --git a/react/features/base/meet/views/Conference/containers/ConferenceControlsWrapper.tsx b/react/features/base/meet/views/Conference/containers/ConferenceControlsWrapper.tsx index 97b0d6e87dba..36b2f7795a61 100644 --- a/react/features/base/meet/views/Conference/containers/ConferenceControlsWrapper.tsx +++ b/react/features/base/meet/views/Conference/containers/ConferenceControlsWrapper.tsx @@ -28,6 +28,7 @@ interface ConferenceControlsProps extends WithTranslation { _screensharing: boolean; _screenShareActive: boolean; _chatOpen: boolean; + _chatKeysArrived: boolean; } const ConferenceControls = ({ @@ -40,6 +41,7 @@ const ConferenceControls = ({ _screensharing, _screenShareActive, _chatOpen, + _chatKeysArrived }: ConferenceControlsProps) => { const [isOpenInviteUser, setIsOpenInviteUser] = useState(false); @@ -59,7 +61,13 @@ const ConferenceControls = ({ }; const handleToggleChat = () => { - dispatch(toggleChat()); + if(_chatKeysArrived) { + console.log("Toggling chat."); + dispatch(toggleChat()); + } + else { + console.log("Chat keys have not arrived yet."); + } }; return ( @@ -120,6 +128,7 @@ function mapStateToProps(state: IReduxState) { _screensharing: isScreenVideoShared(state), _screenShareActive: screenShareParticipants.length > 0, _chatOpen: state["features/chat"].isOpen, + _chatKeysArrived: state["features/chat"].isKeysArrived, }; } diff --git a/react/features/chat/actionTypes.ts b/react/features/chat/actionTypes.ts index 7db6605b6541..363c6ed428db 100644 --- a/react/features/chat/actionTypes.ts +++ b/react/features/chat/actionTypes.ts @@ -172,3 +172,12 @@ export const SET_CHAT_IS_RESIZING = 'SET_CHAT_IS_RESIZING'; * } */ export const NOTIFY_PRIVATE_RECIPIENTS_CHANGED = 'NOTIFY_PRIVATE_RECIPIENTS_CHANGED'; + + /** + * The type of action makes the chat visiable. + * + * { + * type: CHAT_KEYS_ARRIVED + * } + */ + export const CHAT_KEYS_ARRIVED = 'CHAT_KEYS_ARRIVED'; \ No newline at end of file diff --git a/react/features/chat/middleware.ts b/react/features/chat/middleware.ts index deedbdd47d33..109faeeddc66 100644 --- a/react/features/chat/middleware.ts +++ b/react/features/chat/middleware.ts @@ -405,6 +405,14 @@ function _addChatMsgListener(conference: IJitsiConference, store: IStore) { } ); + conference.on( + JitsiConferenceEvents.E2EE_CHAT_KEY_RECEIVED, + () => { + _onKeyReceived(store); + } + ); + + conference.on( JitsiConferenceEvents.PRIVATE_MESSAGE_RECEIVED, (participantId: string, message: string, timestamp: number, messageId: string, displayName?: string, isFromVisitor?: boolean) => { @@ -481,6 +489,12 @@ function _onReactionReceived(store: IStore, { participantId, reactionList, messa store.dispatch(addMessageReaction(reactionPayload)); } +function _onKeyReceived(store: IStore) { + store.dispatch({ + type: 'CHAT_KEYS_ARRIVED' + }); +} + /** * Handles a received gif message. * diff --git a/react/features/chat/reducer.ts b/react/features/chat/reducer.ts index 1380d6b5130e..98bb1df8dfcf 100644 --- a/react/features/chat/reducer.ts +++ b/react/features/chat/reducer.ts @@ -7,6 +7,7 @@ import { IVisitorChatParticipant } from '../visitors/types'; import { ADD_MESSAGE, ADD_MESSAGE_REACTION, + CHAT_KEYS_ARRIVED, CLEAR_MESSAGES, CLOSE_CHAT, EDIT_MESSAGE, @@ -40,7 +41,8 @@ const DEFAULT_STATE = { width: { current: CHAT_SIZE, userSet: null - } + }, + isKeysArrived: false }; export interface IChatState { @@ -48,6 +50,7 @@ export interface IChatState { groupChatWithPermissions: boolean; isLobbyChatActive: boolean; isOpen: boolean; + isKeysArrived: boolean; isResizing: boolean; lastReadMessage?: IMessage; lobbyMessageRecipient?: { @@ -184,6 +187,13 @@ ReducerRegistry.register('features/chat', (state = DEFAULT_STATE, ac privateMessageRecipient: action.participant }; + case CHAT_KEYS_ARRIVED: + return { + ...state, + isKeysArrived: true, + privateMessageRecipient: action.participant + }; + case CLOSE_CHAT: return { ...state, diff --git a/yarn.lock b/yarn.lock index c86c2cda058b..e99689f6f5d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11122,9 +11122,9 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -"lib-jitsi-meet@https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.13/lib-jitsi-meet-0.0.13.tgz": - version "0.0.13" - resolved "https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.13/lib-jitsi-meet-0.0.13.tgz#8ec080d2c7f70fd78b769c49cce7515ec22a75c9" +"lib-jitsi-meet@https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.15/lib-jitsi-meet-0.0.15.tgz": + version "0.0.15" + resolved "https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.15/lib-jitsi-meet-0.0.15.tgz#bf9f183d244e0fa0a14c3c0e5a76a7b6cba0d55e" dependencies: "@hexagon/base64" "^2.0.4" "@jitsi/js-utils" "^2.6.7"