'init'
This commit is contained in:
BIN
app/providers/SystemAccountsProvider/.DS_Store
vendored
Normal file
BIN
app/providers/SystemAccountsProvider/.DS_Store
vendored
Normal file
Binary file not shown.
@@ -0,0 +1,72 @@
|
||||
import { useDatabase } from "@/app/providers/DatabaseProvider/useDatabase";
|
||||
import { createContext, useEffect } from "react";
|
||||
import { useSystemAccount } from "./useSystemAccount";
|
||||
import { usePublicKey } from "../AccountProvider/usePublicKey";
|
||||
import { usePrivatePlain } from "../AccountProvider/usePrivatePlain";
|
||||
import { APP_VERSION, RELEASE_NOTICE } from "@/app/version";
|
||||
import { chacha20Encrypt, encodeWithPassword, encrypt } from "@/app/crypto/crypto";
|
||||
import { generateRandomKey } from "@/app/utils/utils";
|
||||
import { DeliveredMessageState } from "../DialogProvider/DialogProvider";
|
||||
import { UserInformation } from "../InformationProvider/InformationProvider";
|
||||
import { useNotification } from "@/app/hooks/useNotification";
|
||||
import { useDialogsList } from "../DialogListProvider/useDialogsList";
|
||||
|
||||
export const SystemAccountContext = createContext(null);
|
||||
|
||||
export interface SystemUserInformation extends UserInformation {
|
||||
avatar: string;
|
||||
}
|
||||
|
||||
interface SystemAccountProviderProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
export function SystemAccountProvider(props : SystemAccountProviderProps) {
|
||||
const {runQuery} = useDatabase();
|
||||
const lastNoticeVersion = localStorage.getItem("lastNoticeVersion") || "0.0.0";
|
||||
const updateAccount = useSystemAccount("updates");
|
||||
const publicKey = usePublicKey();
|
||||
const privatePlain = usePrivatePlain();
|
||||
const {updateDialog} = useDialogsList();
|
||||
const notify = useNotification();
|
||||
|
||||
useEffect(() => {
|
||||
if(publicKey == ""){
|
||||
return;
|
||||
}
|
||||
if(lastNoticeVersion !== APP_VERSION){
|
||||
sendReleaseNoticeFromUpdatesAccount();
|
||||
localStorage.setItem("lastNoticeVersion", APP_VERSION);
|
||||
}
|
||||
}, [lastNoticeVersion, publicKey]);
|
||||
|
||||
const sendReleaseNoticeFromUpdatesAccount = async () => {
|
||||
const message = RELEASE_NOTICE;
|
||||
if(message.trim() == ""){
|
||||
return;
|
||||
}
|
||||
const cahchaEncrypted = await chacha20Encrypt(message.trim());
|
||||
const key = Buffer.concat([
|
||||
Buffer.from(cahchaEncrypted.key, "hex"),
|
||||
Buffer.from(cahchaEncrypted.nonce, "hex")]);
|
||||
const encryptedKey = await encrypt(key.toString('binary'), publicKey);
|
||||
const messageId = generateRandomKey(16);
|
||||
const plainMessage = await encodeWithPassword(privatePlain, message.trim());
|
||||
|
||||
|
||||
|
||||
await runQuery(`
|
||||
INSERT INTO messages
|
||||
(from_public_key, to_public_key, content, timestamp, read, chacha_key, from_me, plain_message, account, message_id, delivered, attachments) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
`, [updateAccount!.publicKey, publicKey, cahchaEncrypted.ciphertext, Date.now(), 0, encryptedKey, 0, plainMessage, publicKey, messageId, DeliveredMessageState.DELIVERED, JSON.stringify([])]);
|
||||
updateDialog(updateAccount!.publicKey);
|
||||
notify("New message", "You have a new message");
|
||||
}
|
||||
|
||||
|
||||
return (
|
||||
<SystemAccountContext.Provider value={null}>
|
||||
{props.children}
|
||||
</SystemAccountContext.Provider>
|
||||
)
|
||||
}
|
||||
BIN
app/providers/SystemAccountsProvider/avatars/updates.png
Normal file
BIN
app/providers/SystemAccountsProvider/avatars/updates.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.4 KiB |
8
app/providers/SystemAccountsProvider/useSystemAccount.ts
Normal file
8
app/providers/SystemAccountsProvider/useSystemAccount.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
import { SystemUserInformation } from "./SystemAccountsProvider";
|
||||
import { useSystemAccounts } from "./useSystemAccounts";
|
||||
|
||||
export function useSystemAccount(username: string) : SystemUserInformation | undefined {
|
||||
const systemAccounts = useSystemAccounts();
|
||||
return systemAccounts.find((v) => v.username == username);
|
||||
}
|
||||
18
app/providers/SystemAccountsProvider/useSystemAccounts.ts
Normal file
18
app/providers/SystemAccountsProvider/useSystemAccounts.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { OnlineState } from "@/app/providers/ProtocolProvider/protocol/packets/packet.onlinestate";
|
||||
import { SystemUserInformation } from "./SystemAccountsProvider";
|
||||
import updates from './avatars/updates.png';
|
||||
|
||||
export function useSystemAccounts() : SystemUserInformation[] {
|
||||
const accounts : SystemUserInformation[] = [
|
||||
{
|
||||
publicKey: "0x000000000000000000000000000000000000000001",
|
||||
verified: 1,
|
||||
title: "Rosetta Updates",
|
||||
username: "updates",
|
||||
online: OnlineState.OFFLINE,
|
||||
avatar: updates
|
||||
}
|
||||
];
|
||||
|
||||
return accounts;
|
||||
}
|
||||
Reference in New Issue
Block a user