From f5e9b5de61fc037de525bbf316f1a244eff26075 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Sat, 23 Dec 2023 08:30:03 -0800 Subject: [PATCH] respecting allowUnsealed setting in mobile app --- app/mobile/src/constants/Strings.js | 6 ++++++ app/mobile/src/dashboard/Dashboard.jsx | 7 +++++++ app/mobile/src/dashboard/useDashboard.hook.js | 13 +++++++++---- app/mobile/src/session/channels/Channels.jsx | 16 +++++++++------- .../src/session/channels/useChannels.hook.js | 12 +++++++----- 5 files changed, 38 insertions(+), 16 deletions(-) diff --git a/app/mobile/src/constants/Strings.js b/app/mobile/src/constants/Strings.js index 01f09425..33e4d985 100644 --- a/app/mobile/src/constants/Strings.js +++ b/app/mobile/src/constants/Strings.js @@ -7,6 +7,7 @@ const Strings = [ visibleRegistry: 'Visible in Registry', edit: 'Edit', enableNotifications: 'Push Notifications', + allowUnsealed: 'Allow Unsealed', sealedTopics: 'Sealed Topics', colorMode: 'Color Mode', hourMode: 'Hour', @@ -205,6 +206,7 @@ const Strings = [ visibleRegistry: 'Visible dans le Registre', edit: 'Modifier', enableNotifications: 'Notifications Push', + allowUnsealed: 'Sujets non Sécurisés', sealedTopics: 'Sujets Sécurisés', colorMode: 'Mode de Couleur', hourMode: 'Heure', @@ -400,6 +402,7 @@ const Strings = [ visibleRegistry: 'Visible en el Registro', edit: 'Editar', enableNotifications: 'Notificaciones Push', + allowUnsealed: 'Sujetos Inseguros', sealedTopics: 'Temas Protegidos', colorMode: 'Modo de Color', hourMode: 'Hora', @@ -595,6 +598,7 @@ const Strings = [ visibleRegistry: 'Sichtbar in der Registrierung', edit: 'Bearbeiten', enableNotifications: 'Mitteilungen', + allowUnsealed: 'Unsichere Themen', sealedTopics: 'Gesicherte Themen', colorMode: 'Farmodus', hourMode: 'Stunde', @@ -790,6 +794,7 @@ const Strings = [ visibleRegistry: 'Visível no Registro', edit: 'Editar', enableNotifications: 'Notificações Push', + allowUnsealed: 'Assuntos Inseguros', sealedTopics: 'Tópicos Selados', colorMode: 'Modo de Cor', hourMode: 'Hora', @@ -970,6 +975,7 @@ const Strings = [ visibleRegistry: 'Видимый в реестре', edit: 'Редактировать', enableNotifications: 'Уведомления', + allowUnsealed: 'Небезопасные субъекты', sealedTopics: 'Запечатанные темы', colorMode: 'Цветовая схема', hourMode: 'Часы', diff --git a/app/mobile/src/dashboard/Dashboard.jsx b/app/mobile/src/dashboard/Dashboard.jsx index 2ec0007c..344b9424 100644 --- a/app/mobile/src/dashboard/Dashboard.jsx +++ b/app/mobile/src/dashboard/Dashboard.jsx @@ -191,6 +191,13 @@ export function Dashboard(props) { onValueChange={actions.setPushSupported} trackColor={styles.track}/> + actions.setPushSupported(!state.pushSupported)}> + { state.strings.allowUnsealed } + + + { - const { keyType, accountStorage, domain, enableImage, enableAudio, enableVideo, pushSupported, enableIce, iceUrl, iceUsername, icePassword } = config; - updateState({ keyType, storage: accountStorage.toString(), domain, enableImage, enableAudio, enableVideo, pushSupported, enableIce, iceUrl, iceUsername, icePassword }); + const { keyType, accountStorage, domain, enableImage, enableAudio, enableVideo, allowUnsealed, pushSupported, enableIce, iceUrl, iceUsername, icePassword } = config; + updateState({ keyType, storage: accountStorage.toString(), domain, enableImage, enableAudio, enableVideo, allowUnsealed, pushSupported, enableIce, iceUrl, iceUsername, icePassword }); }, [config]); useEffect(() => { @@ -108,6 +110,9 @@ export function useDashboard(config, server, token) { setPushSupported: (pushSupported) => { updateState({ pushSupported }); }, + setAllowUnsealed: (allowUnsealed) => { + updateState({ allowUnsealed }); + }, setEnableImage: (enableImage) => { updateState({ enableImage }); }, @@ -133,8 +138,8 @@ export function useDashboard(config, server, token) { updateState({ icePassword }); }, saveConfig: async () => { - const { storage, domain, keyType, enableImage, enableAudio, enableVideo, enableIce, iceUrl, iceUsername, icePassword } = state; - const config = { accountStorage: Number(storage), domain, keyType, enableImage, enableAudio, enableVideo, enableIce, iceUrl, iceUsername, icePassword }; + const { storage, domain, keyType, enableImage, pushSupported, allowUnsealed, enableAudio, enableVideo, enableIce, iceUrl, iceUsername, icePassword } = state; + const config = { accountStorage: Number(storage), domain, keyType, enableImage, pushSupported, allowUnsealed, enableAudio, enableVideo, enableIce, iceUrl, iceUsername, icePassword }; await setNodeConfig(server, token, config); }, enableUser: async (accountId, enabled) => { diff --git a/app/mobile/src/session/channels/Channels.jsx b/app/mobile/src/session/channels/Channels.jsx index 170f6109..ae2f63b1 100644 --- a/app/mobile/src/session/channels/Channels.jsx +++ b/app/mobile/src/session/channels/Channels.jsx @@ -50,15 +50,17 @@ export function Channels({ cardId, channelId, navigation, openConversation, dmCh - - - { state.strings.new } - + { (state.sealable || state.allowUnsealed) && ( + + + { state.strings.new } + + )} ), }); } - }, [navigation]); + }, [navigation, state.allowUnsealed]); return ( @@ -85,7 +87,7 @@ export function Channels({ cardId, channelId, navigation, openConversation, dmCh keyExtractor={item => (`${item.cardId}:${item.channelId}`)} /> )} - { !navigation && ( + { !navigation && (state.sealable || state.allowUnsealed) && ( @@ -131,7 +133,7 @@ export function Channels({ cardId, channelId, navigation, openConversation, dmCh )} - { state.sealable && ( + { state.sealable && state.allowUnsealed && ( <> diff --git a/app/mobile/src/session/channels/useChannels.hook.js b/app/mobile/src/session/channels/useChannels.hook.js index 2a30e36e..f300646d 100644 --- a/app/mobile/src/session/channels/useChannels.hook.js +++ b/app/mobile/src/session/channels/useChannels.hook.js @@ -20,6 +20,7 @@ export function useChannels() { addSubject: null, sealed: false, sealable: false, + allowUnsealed: false, busy: false, }); @@ -117,12 +118,13 @@ export function useChannels() { } useEffect(() => { + const allowUnsealed = account.state.status?.allowUnsealed; const { status, sealKey } = account.state; if (status?.seal?.publicKey && sealKey?.public && sealKey?.private && sealKey?.public === status.seal.publicKey) { - updateState({ sealable: true }); + updateState({ sealable: true, allowUnsealed }); } else { - updateState({ sealed: false, sealable: false }); + updateState({ sealed: false, sealable: false, allowUnsealed }); } }, [account.state]); @@ -138,7 +140,7 @@ export function useChannels() { if (contact.detail.status !== 'connected') { return false; } - if (state.sealed && !contact.profile.seal) { + if ((!state.allowUnsealed || state.sealed) && !contact.profile.seal) { return false; } return true; @@ -156,7 +158,7 @@ export function useChannels() { }); const addMembers = state.addMembers.filter(item => sorted.some(contact => contact.cardId === item)); updateState({ contacts: sorted, addMembers }); - }, [card.state, state.sealed]); + }, [card.state, state.sealed, state.allowUnsealed]); useEffect(() => { syncChannels(); @@ -244,7 +246,7 @@ export function useChannels() { if (!state.busy) { try { updateState({ busy: true }); - if (state.sealed) { + if (state.sealed || !state.allowUnsealed) { const keys = [ account.state.sealKey.public ]; state.addMembers.forEach(id => { const contact = card.state.cards.get(id);