diff --git a/package.json b/package.json index 247368c01b26..2ab74e6d0b05 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,6 @@ "clsx": "1.1.1", "crypto": "npm:crypto-browserify", "crypto-browserify": "^3.12.0", - "crypto-js": "4.1.1", "dayjs": "1.11.13", "dompurify": "3.2.6", "dotenv": "^16.4.5", @@ -87,7 +86,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.16/lib-jitsi-meet-0.0.16.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/components/VideoParticipant.tsx b/react/features/base/meet/views/Conference/components/VideoParticipant.tsx index f66794c611ca..207c79325663 100644 --- a/react/features/base/meet/views/Conference/components/VideoParticipant.tsx +++ b/react/features/base/meet/views/Conference/components/VideoParticipant.tsx @@ -49,7 +49,7 @@ const VideoParticipant = ({ )} key={`video-${id}`} // Set to false due to decoding issues and video lag - encodeVideo={false} + encodeVideo={true} /> ) : (
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..4989ef7bf266 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7494,11 +7494,6 @@ crypto-browserify@^3.12.0: randombytes "^2.1.0" randomfill "^1.0.4" -crypto-js@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" - integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== - "crypto@npm:crypto-browserify": version "3.12.1" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz#bb8921bec9acc81633379aa8f52d69b0b69e0dac" @@ -11122,9 +11117,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.16/lib-jitsi-meet-0.0.16.tgz": + version "0.0.16" + resolved "https://github.com/internxt/lib-jitsi-meet/releases/download/v.0.0.16/lib-jitsi-meet-0.0.16.tgz#2951a8f7e224dd8ac17bab27906bd6123c1c4b77" dependencies: "@hexagon/base64" "^2.0.4" "@jitsi/js-utils" "^2.6.7" @@ -13219,9 +13214,9 @@ punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== qs@^6.9.4, qs@~6.14.0: - version "6.14.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" - integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + version "6.14.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159" + integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ== dependencies: side-channel "^1.1.0"