|
@@ -1,4 +1,7 @@
|
|
|
|
+import aescrypt from "utils/aescrypt";
|
|
import { getEndpoint } from "utils/common/apiUtil";
|
|
import { getEndpoint } from "utils/common/apiUtil";
|
|
|
|
+import { decrypt } from "utils/crypto/aes";
|
|
|
|
+import { strToUint8 } from "utils/crypto/common";
|
|
import HTTPService from "./HTTPService";
|
|
import HTTPService from "./HTTPService";
|
|
|
|
|
|
const ENDPOINT = getEndpoint();
|
|
const ENDPOINT = getEndpoint();
|
|
@@ -6,28 +9,56 @@ const ENDPOINT = getEndpoint();
|
|
export interface fileData {
|
|
export interface fileData {
|
|
id: number;
|
|
id: number;
|
|
metadata: {
|
|
metadata: {
|
|
- currentTimestamp: number,
|
|
|
|
- },
|
|
|
|
|
|
+ currentTime: number;
|
|
|
|
+ modificationTime: number;
|
|
|
|
+ latitude: number;
|
|
|
|
+ longitude: number;
|
|
|
|
+ title: string;
|
|
|
|
+ deviceFolder: string;
|
|
|
|
+ };
|
|
|
|
+ encryptedPassword: string;
|
|
|
|
+ encryptedPasswordIV: string;
|
|
|
|
+ file?: string;
|
|
};
|
|
};
|
|
|
|
|
|
const getFileDataUsingWorker = (data: any, key: string) => {
|
|
const getFileDataUsingWorker = (data: any, key: string) => {
|
|
return new Promise((resolve) => {
|
|
return new Promise((resolve) => {
|
|
- const worker = new Worker('worker/decrypt.worker.js', { type: 'module' });
|
|
|
|
|
|
+ const worker = new Worker('worker/decryptMetadata.worker.js', { type: 'module' });
|
|
const onWorkerMessage = (event) => resolve(event.data);
|
|
const onWorkerMessage = (event) => resolve(event.data);
|
|
worker.addEventListener('message', onWorkerMessage);
|
|
worker.addEventListener('message', onWorkerMessage);
|
|
worker.postMessage({ data, key });
|
|
worker.postMessage({ data, key });
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
-export const getFiles = async (sinceTimestamp: string, token: string, limit: string, key: string) => {
|
|
|
|
|
|
+const getFileUsingWorker = (data: any, key: string) => {
|
|
|
|
+ return new Promise((resolve) => {
|
|
|
|
+ const worker = new Worker('worker/decryptFile.worker.js', { type: 'module' });
|
|
|
|
+ const onWorkerMessage = (event) => resolve(event.data);
|
|
|
|
+ worker.addEventListener('message', onWorkerMessage);
|
|
|
|
+ worker.postMessage({ data, key });
|
|
|
|
+ });
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+export const getFiles = async (sinceTime: string, token: string, limit: string, key: string) => {
|
|
const resp = await HTTPService.get(`${ENDPOINT}/encrypted-files/diff`, {
|
|
const resp = await HTTPService.get(`${ENDPOINT}/encrypted-files/diff`, {
|
|
- sinceTimestamp, token, limit,
|
|
|
|
|
|
+ sinceTime, token, limit,
|
|
});
|
|
});
|
|
|
|
|
|
const promises: Promise<fileData>[] = resp.data.diff.map((data) => getFileDataUsingWorker(data, key));
|
|
const promises: Promise<fileData>[] = resp.data.diff.map((data) => getFileDataUsingWorker(data, key));
|
|
- console.time('Metadata Parsing');
|
|
|
|
const decrypted = await Promise.all(promises);
|
|
const decrypted = await Promise.all(promises);
|
|
- console.timeEnd('Metadata Parsing');
|
|
|
|
|
|
|
|
return decrypted;
|
|
return decrypted;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+export const getPreview = async (token: string, data: fileData, key: string) => {
|
|
|
|
+ const resp = await HTTPService.get(
|
|
|
|
+ `${ENDPOINT}/encrypted-files/preview/${data.id}`,
|
|
|
|
+ { token }, null, { responseType: 'arraybuffer' },
|
|
|
|
+ );
|
|
|
|
+ const decrypted = await getFileUsingWorker({
|
|
|
|
+ ...data,
|
|
|
|
+ file: resp.data,
|
|
|
|
+ }, key);
|
|
|
|
+ const url = URL.createObjectURL(new Blob([decrypted.file]));
|
|
|
|
+ return url;
|
|
|
|
+}
|