Compare commits
3 Commits
78c7320872
...
9c72523e0c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c72523e0c | ||
|
|
b63c87f23c | ||
|
|
d857be6948 |
@@ -5,6 +5,7 @@ import { useState, useEffect } from "react";
|
||||
interface TextChainProps {
|
||||
text: string;
|
||||
mt?: MantineSize;
|
||||
withoutPaper?: boolean;
|
||||
}
|
||||
|
||||
export function TextChain(props : TextChainProps) {
|
||||
@@ -26,31 +27,41 @@ export function TextChain(props : TextChainProps) {
|
||||
});
|
||||
}, [text]);
|
||||
|
||||
const grid = (
|
||||
<SimpleGrid cols={3} spacing="xs">
|
||||
{text.split(" ").map((v, i) => {
|
||||
return (
|
||||
<Box
|
||||
key={i}
|
||||
className={classes.wordBox}
|
||||
style={{
|
||||
opacity: mounted[i] ? 1 : 0,
|
||||
transform: mounted[i] ? 'scale(1)' : 'scale(0.9)',
|
||||
transition: 'opacity 300ms ease, transform 300ms ease',
|
||||
}}
|
||||
>
|
||||
<Text size="xs" c="dimmed" mr={4}>{i + 1}.</Text>
|
||||
<Text size="sm" fw={500}>{v}</Text>
|
||||
</Box>
|
||||
);
|
||||
})}
|
||||
</SimpleGrid>
|
||||
);
|
||||
|
||||
return (
|
||||
!props.withoutPaper ? (
|
||||
<Box mt={props.mt}>
|
||||
<Box className={classes.displayArea}>
|
||||
<Text size="sm" mb="md" c="dimmed">
|
||||
Your seed phrase:
|
||||
</Text>
|
||||
<SimpleGrid cols={3} spacing="xs">
|
||||
{text.split(" ").map((v, i) => {
|
||||
return (
|
||||
<Box
|
||||
key={i}
|
||||
className={classes.wordBox}
|
||||
style={{
|
||||
opacity: mounted[i] ? 1 : 0,
|
||||
transform: mounted[i] ? 'scale(1)' : 'scale(0.9)',
|
||||
transition: 'opacity 300ms ease, transform 300ms ease',
|
||||
}}
|
||||
>
|
||||
<Text size="xs" c="dimmed" mr={4}>{i + 1}.</Text>
|
||||
<Text size="sm" fw={500}>{v}</Text>
|
||||
</Box>
|
||||
);
|
||||
})}
|
||||
</SimpleGrid>
|
||||
{grid}
|
||||
</Box>
|
||||
</Box>
|
||||
) : (
|
||||
<Box mt={props.mt}>
|
||||
{grid}
|
||||
</Box>
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -46,10 +46,11 @@ export function TextParser(props: TextParserProps) {
|
||||
{
|
||||
pattern: [
|
||||
/(https?:\/\/[^\s]+)/g,
|
||||
/\b(?:https?:\/\/)?(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(?:\/[^\s]*)?/g
|
||||
/\b(?:https?:\/\/)?(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(?:\/[\w\-\.\/\?&#=%]*)?/g
|
||||
],
|
||||
render: (match: string) => {
|
||||
let domainZone = match.split('.').pop() || '';
|
||||
let domain = match.replace(/https?:\/\//, '').split('/')[0];
|
||||
let domainZone = domain.split('.').pop() || '';
|
||||
domainZone = domainZone.split('/')[0];
|
||||
if(!ALLOWED_DOMAINS_ZONES.includes(domainZone)) {
|
||||
return <>{match}</>;
|
||||
|
||||
@@ -150,6 +150,7 @@ export function useAttachment(attachment: Attachment, keyPlain: string) {
|
||||
}
|
||||
setDownloadStatus(DownloadStatus.DECRYPTING);
|
||||
//console.info("Decrypted attachment ", Buffer.from(keyPlain, 'binary').toString('hex'));
|
||||
console.info("KP", keyPlain);
|
||||
const decrypted = await decodeWithPassword(keyPlain, downloadedBlob);
|
||||
setDownloadTag("");
|
||||
if(attachment.type == AttachmentType.FILE) {
|
||||
|
||||
@@ -184,15 +184,13 @@ export function DialogProvider(props: DialogProviderProps) {
|
||||
readUpdated = true;
|
||||
}
|
||||
let decryptKey = '';
|
||||
if(message.from_me){
|
||||
if(message.from_me && message.chacha_key != "" && message.chacha_key.startsWith("sync:")){
|
||||
/**
|
||||
* Если сообщение от меня, то ключ расшифровки для вложений
|
||||
* не нужен, передаем пустую строку, так как под капотом
|
||||
* в MessageAttachment.tsx при расшифровке вложений используется
|
||||
* локальный ключ, а не тот что в сообщении, так как файл и так находится
|
||||
* у нас локально
|
||||
* Если это сообщение от нас, то проверяем, есть ли внутри chacha_key, если есть, значит это
|
||||
* сообщение пришло нам в результате синхронизации и его нужно расшифровать, если chacha_key нет,
|
||||
* значит сообщение отправлено с нашего устройства, и зашифровано на стороне отправки (plain_message)
|
||||
*/
|
||||
decryptKey = '';
|
||||
decryptKey = Buffer.from(await decodeWithPassword(privatePlain, message.chacha_key.replace("sync:", "")), 'binary').toString('utf-8');
|
||||
}
|
||||
if(hasGroup(props.dialog)){
|
||||
/**
|
||||
|
||||
@@ -96,15 +96,15 @@ export function useDialogFiber() {
|
||||
const content = packet.getContent();
|
||||
const timestamp = packet.getTimestamp();
|
||||
const messageId = packet.getMessageId();
|
||||
|
||||
|
||||
if (fromPublicKey != publicKey) {
|
||||
/**
|
||||
* Игнорируем если это не сообщение от нас
|
||||
*/
|
||||
return;
|
||||
}
|
||||
const chachaDecryptedKey = Buffer.from(await decodeWithPassword(privatePlain, aesChachaKey), "binary");
|
||||
|
||||
const chachaKey = await decodeWithPassword(privatePlain, aesChachaKey);
|
||||
const chachaDecryptedKey = Buffer.from(chachaKey, "binary");
|
||||
const key = chachaDecryptedKey.slice(0, 32);
|
||||
const nonce = chachaDecryptedKey.slice(32);
|
||||
const decryptedContent = await chacha20Decrypt(content, nonce.toString('hex'), key.toString('hex'));
|
||||
@@ -160,7 +160,7 @@ export function useDialogFiber() {
|
||||
content,
|
||||
timestamp,
|
||||
0, //по умолчанию не прочитаны
|
||||
'',
|
||||
"sync:" + aesChachaKey,
|
||||
1, //Свои же сообщения всегда от нас
|
||||
await encodeWithPassword(privatePlain, decryptedContent),
|
||||
publicKey,
|
||||
|
||||
@@ -5,7 +5,7 @@ import { SettingsInput } from "@/app/components/SettingsInput/SettingsInput";
|
||||
import { TextChain } from "@/app/components/TextChain/TextChain";
|
||||
import { decodeWithPassword } from "@/app/crypto/crypto";
|
||||
import { useAccount } from "@/app/providers/AccountProvider/useAccount";
|
||||
import { Paper, Text } from "@mantine/core";
|
||||
import { Text } from "@mantine/core";
|
||||
import { useState } from "react";
|
||||
|
||||
export function Backup() {
|
||||
@@ -39,10 +39,8 @@ export function Backup() {
|
||||
</Text>
|
||||
{show.trim() !== "" && (
|
||||
<>
|
||||
<Paper mt={'sm'} p={'md'} withBorder>
|
||||
<TextChain rainbow={true} mt={'sm'} text={show}></TextChain>
|
||||
</Paper>
|
||||
<Text fz={10} mt={3} c={'gray'} pl={'xs'} pr={'xs'}>
|
||||
<TextChain withoutPaper mt={'sm'} text={show}></TextChain>
|
||||
<Text fz={10} mt={'sm'} c={'gray'} pl={'xs'} pr={'xs'}>
|
||||
Please don't share your seed phrase! The administration will never ask you for it.
|
||||
</Text>
|
||||
</>
|
||||
|
||||
Reference in New Issue
Block a user