finished sealing modal

This commit is contained in:
balzack 2024-09-12 22:45:03 -07:00
parent ec697f8e4a
commit be9451ad42
3 changed files with 92 additions and 28 deletions

View File

@ -14,6 +14,12 @@ export const en = {
forgotPassword: 'Forgot Password',
manageTopics: 'Manage Sealing Key',
sealUnlock: 'Unlock sealing key to access end-to-end encrypted messages',
sealForget: 'Forget sealing key to revoke access of end-to-end encrypted messages for this device only',
sealDelete: 'Deleting the sealing key will permantently revoke access to all end-to-end encrypted messages from all devices',
sealUpdate: 'Updating the sealing key will only change the locking password',
sealCreate: 'Create a sealing key to send and receive end-to-end encrypted messages',
new: 'New',
newMessage: 'New Message',
topics: 'Topics',
@ -229,6 +235,13 @@ export const fr = {
forgotPassword: 'Mot de Passe Oublié',
manageTopics: 'Gérer la clé de sécurité',
sealUnlock: 'Déverrouiller la clé de scellement pour accéder aux messages chiffrés de bout en bout',
sealForget: 'Oublier la clé de scellement pour révoquer l\'accès aux messages chiffrés de bout en bout pour cet appareil uniquement',
sealDelete: 'La suppression de la clé de scellement révoquera définitivement l\'accès à tous les messages chiffrés de bout en bout depuis tous les appareils',
sealUpdate: 'La mise à jour de la clé de scellement changera uniquement le mot de passe de verrouillage',
sealCreate: 'Créer une clé de scellement pour envoyer et recevoir des messages chiffrés de bout en bout',
new: 'Nouveau',
newMessage: 'Nouveau Message',
topics: 'Sujets',
@ -447,6 +460,12 @@ export const sp = {
forgotPassword: 'Contraseña Olvidada',
manageTopics: 'Administrar clave de seguridad',
sealUnlock: 'Desbloquear la clave de sellado para acceder a los mensajes cifrados de extremo a extremo',
sealForget: 'Olvidar la clave de sellado para revocar el acceso a los mensajes cifrados de extremo a extremo solo en este dispositivo',
sealDelete: 'Eliminar la clave de sellado revocará permanentemente el acceso a todos los mensajes cifrados de extremo a extremo desde todos los dispositivos',
sealUpdate: 'Actualizar la clave de sellado solo cambiará la contraseña de bloqueo',
sealCreate: 'Crear una clave de sellado para enviar y recibir mensajes cifrados de extremo a extremo',
new: 'Nuevo',
newMessage: 'Nuevo mensaje',
topics: 'Temas',
@ -663,6 +682,12 @@ export const pt = {
forgotPassword: 'Senha Esquecida',
manageTopics: 'Gerenciar Chave de Selagem',
sealUnlock: 'Desbloquear a chave de selagem para acessar mensagens criptografadas de ponta a ponta',
sealForget: 'Esquecer a chave de selagem para revogar o acesso às mensagens criptografadas de ponta a ponta apenas para este dispositivo',
sealDelete: 'Excluir a chave de selagem revogará permanentemente o acesso a todas as mensagens criptografadas de ponta a ponta de todos os dispositivos',
sealUpdate: 'Atualizar a chave de selagem mudará apenas a senha de bloqueio',
sealCreate: 'Criar uma chave de selagem para enviar e receber mensagens criptografadas de ponta a ponta',
new: 'Novo',
newMessage: 'Nova mensagem',
topics: 'Tópicos',
@ -879,6 +904,12 @@ export const de = {
forgotPassword: 'Passwort Vergessen',
manageTopics: 'Sicherheitsschlüssel verwalten',
sealUnlock: 'Entsperren Sie den Versiegelungsschlüssel, um auf Ende-zu-Ende-verschlüsselte Nachrichten zuzugreifen',
sealForget: 'Versiegelungsschlüssel vergessen, um den Zugriff auf Ende-zu-Ende-verschlüsselte Nachrichten nur für dieses Gerät zu widerrufen',
sealDelete: 'Das Löschen des Versiegelungsschlüssels widerruft dauerhaft den Zugriff auf alle Ende-zu-Ende-verschlüsselten Nachrichten von allen Geräten',
sealUpdate: 'Das Aktualisieren des Versiegelungsschlüssels ändert nur das Sperrpasswort',
sealCreate: 'Erstellen Sie einen Versiegelungsschlüssel, um Ende-zu-Ende-verschlüsselte Nachrichten zu senden und zu empfangen',
new: 'Neu',
newMessage: 'Neue Nachricht',
topics: 'Themen',
@ -1096,6 +1127,12 @@ export const ru = {
forgotPassword: 'Пароль забыт',
manageTopics: 'Управление ключом запечатывания',
sealUnlock: 'Разблокировать ключ запечатывания для доступа к сообщениям с сквозным шифрованием',
sealForget: 'Забыть ключ запечатывания, чтобы отозвать доступ к сообщениям с сквозным шифрованием только для этого устройства',
sealDelete: 'Удаление ключа запечатывания навсегда отзовет доступ ко всем сообщениям с сквозным шифрованием со всех устройств',
sealUpdate: 'Обновление ключа запечатывания изменит только пароль блокировки',
sealCreate: 'Создать ключ запечатывания для отправки и получения сообщений с сквозным шифрованием',
new: 'Новый',
newMessage: 'Новое сообщение',
topics: 'Темы',

View File

@ -3,6 +3,11 @@
flex-direction: column;
gap: 16px;
.sealConfig {
cursor: pointer;
color: var(--mantine-color-dbgreen-1);
}
.delete {
background-color: var(--mantine-color-red-9);
color: var(--mantine-color-red-0);

View File

@ -33,6 +33,9 @@ import {
IconEye,
IconBook,
IconMapPin,
IconTrash,
IconCaretDown,
IconCaretRight,
IconLogout,
IconLogin,
IconCopy,
@ -67,8 +70,7 @@ export function Settings({ showLogout }: { showLogout: boolean }) {
const [addingMfa, setAddingMfa] = useState(false)
const [sealDelete, setSealDelete] = useState(false)
const [sealReset, setSealReset] = useState(false)
console.log("SEAL: ", state.config);
const [sealConfig, setSealConfig] = useState(false)
const logout = () =>
modals.openConfirmModal({
@ -127,6 +129,7 @@ export function Settings({ showLogout }: { showLogout: boolean }) {
if (!savingSeal) {
setSealDelete(false);
setSealReset(false);
setSealConfig(false);
actions.setSealPassword('');
actions.setSealConfirm('');
actions.setSealDelete('');
@ -760,25 +763,36 @@ export function Settings({ showLogout }: { showLogout: boolean }) {
opened={sealOpened}
onClose={sealClose}
overlayProps={{ backgroundOpacity: 0.55, blur: 3 }}
size="lg"
centered
>
<>
{ !sealDelete && !sealReset && state.config.sealSet && state.config.sealUnlocked && (
<div className={classes.seal}>
<span>UNLOCK SEAL</span>
<div className={classes.buttons}>
<Button
className={classes.delete}
onClick={() => setSealDelete(true)}
>
{state.strings.remove}
</Button>
<Button
variant="filled"
onClick={() => setSealReset(true)}
>
{state.strings.resave}
</Button>
<span>{ state.strings.sealForget }</span>
<div className={classes.buttons}>
{ !sealConfig && (
<IconCaretDown className={classes.sealConfig} onClick={() => setSealConfig(true)}/>
)}
{ sealConfig && (
<IconCaretRight className={classes.sealConfig} onClick={() => setSealConfig(false)}/>
)}
{ sealConfig && (
<Button
className={classes.delete}
onClick={() => setSealDelete(true)}
>
{state.strings.remove}
</Button>
)}
{ sealConfig && (
<Button
variant="filled"
onClick={() => setSealReset(true)}
>
{state.strings.resave}
</Button>
)}
<div className={classes.controls}>
<Button variant="default" onClick={sealClose}>
{state.strings.cancel}
@ -792,7 +806,7 @@ export function Settings({ showLogout }: { showLogout: boolean }) {
)}
{ !sealDelete && sealReset && state.config.sealSet && state.config.sealUnlocked && (
<div className={classes.seal}>
<span>UPDATE SEAL</span>
<span>{ state.strings.sealUpdate }</span>
<TextInput
className={classes.input}
size="md"
@ -823,7 +837,7 @@ export function Settings({ showLogout }: { showLogout: boolean }) {
)}
{ !sealDelete && state.config.sealSet && !state.config.sealUnlocked && (
<div className={classes.seal}>
<span>LOCKED SEAL</span>
<span>{ state.strings.sealUnlock }</span>
<PasswordInput
className={classes.input}
size="md"
@ -832,13 +846,21 @@ export function Settings({ showLogout }: { showLogout: boolean }) {
placeholder={state.strings.password}
onChange={(event) => actions.setSealPassword(event.currentTarget.value)}
/>
<div className={classes.buttons}>
<Button
className={classes.delete}
onClick={() => setSealDelete(true)}
>
{state.strings.remove}
</Button>
<div className={classes.buttons}>
{ !sealConfig && (
<IconCaretDown className={classes.sealConfig} onClick={() => setSealConfig(true)}/>
)}
{ sealConfig && (
<IconCaretRight className={classes.sealConfig} onClick={() => setSealConfig(false)}/>
)}
{ sealConfig && (
<Button
className={classes.delete}
onClick={() => setSealDelete(true)}
>
{state.strings.remove}
</Button>
)}
<div className={classes.controls}>
<Button variant="default" onClick={sealClose}>
{state.strings.cancel}
@ -852,13 +874,13 @@ export function Settings({ showLogout }: { showLogout: boolean }) {
)}
{ sealDelete && state.config.sealSet && (
<div className={classes.seal}>
<span>DELETE MODE</span>
<span>{ state.strings.sealDelete }</span>
<TextInput
className={classes.input}
size="md"
value={state.sealDelete}
leftSectionPointerEvents="none"
leftSection={<IconKey />}
leftSection={<IconTrash />}
placeholder={state.strings.deleteKey}
onChange={(event) => actions.setSealDelete(event.currentTarget.value)}
/>
@ -874,7 +896,7 @@ export function Settings({ showLogout }: { showLogout: boolean }) {
)}
{ !state.config.sealSet && (
<div className={classes.seal}>
<span>NO SEAL</span>
<span>{ state.strings.sealCreate }</span>
<TextInput
className={classes.input}
size="md"