ente/src/services/fileService.ts

68 lines
2.1 KiB
TypeScript
Raw Normal View History

2020-09-20 15:18:35 +00:00
import aescrypt from "utils/aescrypt";
import { getEndpoint } from "utils/common/apiUtil";
2020-09-20 15:18:35 +00:00
import { decrypt } from "utils/crypto/aes";
import { strToUint8 } from "utils/crypto/common";
import HTTPService from "./HTTPService";
const ENDPOINT = getEndpoint();
export interface fileData {
id: number;
metadata: {
2020-09-20 15:18:35 +00:00
currentTime: number;
modificationTime: number;
latitude: number;
longitude: number;
title: string;
deviceFolder: string;
};
2020-09-20 15:23:48 +00:00
src: string,
w: number,
h: number,
2020-09-20 15:18:35 +00:00
encryptedPassword: string;
encryptedPasswordIV: string;
file?: string;
};
const getFileDataUsingWorker = (data: any, key: string) => {
return new Promise((resolve) => {
2020-09-20 15:18:35 +00:00
const worker = new Worker('worker/decryptMetadata.worker.js', { type: 'module' });
const onWorkerMessage = (event) => resolve(event.data);
worker.addEventListener('message', onWorkerMessage);
worker.postMessage({ data, key });
});
}
2020-09-20 15:18:35 +00:00
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`, {
2020-09-20 15:18:35 +00:00
sinceTime, token, limit,
});
const promises: Promise<fileData>[] = resp.data.diff.map((data) => getFileDataUsingWorker(data, key));
const decrypted = await Promise.all(promises);
return decrypted;
}
2020-09-20 15:18:35 +00:00
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' },
);
2020-09-20 15:23:48 +00:00
const decrypted: any = await getFileUsingWorker({
2020-09-20 15:18:35 +00:00
...data,
file: resp.data,
}, key);
const url = URL.createObjectURL(new Blob([decrypted.file]));
return url;
}