2020-09-19 21:20:10 +00:00
|
|
|
import { getEndpoint } from "utils/common/apiUtil";
|
|
|
|
import HTTPService from "./HTTPService";
|
2020-09-27 17:18:57 +00:00
|
|
|
import * as Comlink from "comlink";
|
|
|
|
|
|
|
|
const decryptMetadata: any = typeof window !== 'undefined'
|
|
|
|
&& Comlink.wrap(new Worker("worker/decryptMetadata.worker.js", { type: 'module' }));
|
|
|
|
const decryptThumbnail: any = typeof window !== 'undefined'
|
|
|
|
&& Comlink.wrap(new Worker("worker/decryptThumbnail.worker.js", { type: 'module' }));
|
2020-09-19 21:20:10 +00:00
|
|
|
|
|
|
|
const ENDPOINT = getEndpoint();
|
|
|
|
|
2020-09-26 17:16:16 +00:00
|
|
|
export interface decryptionParams {
|
|
|
|
encryptedKey: string;
|
|
|
|
keyDecryptionNonce: string;
|
|
|
|
header: string;
|
|
|
|
nonce: string;
|
|
|
|
};
|
2020-09-19 21:20:10 +00:00
|
|
|
export interface fileData {
|
|
|
|
id: number;
|
2020-09-26 17:16:16 +00:00
|
|
|
file: {
|
|
|
|
decryptionParams: decryptionParams;
|
|
|
|
},
|
|
|
|
thumbnail: {
|
|
|
|
decryptionParams: decryptionParams;
|
|
|
|
},
|
2020-09-19 21:20:10 +00:00
|
|
|
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-26 17:16:16 +00:00
|
|
|
data?: string;
|
2020-09-19 21:20:10 +00:00
|
|
|
};
|
|
|
|
|
2020-09-26 17:16:16 +00:00
|
|
|
const getFileMetaDataUsingWorker = (data: any, key: string) => {
|
2020-09-27 17:18:57 +00:00
|
|
|
return decryptMetadata({ data, key });
|
2020-09-19 21:20:10 +00:00
|
|
|
}
|
|
|
|
|
2020-09-20 15:18:35 +00:00
|
|
|
const getFileUsingWorker = (data: any, key: string) => {
|
2020-09-27 17:18:57 +00:00
|
|
|
return decryptThumbnail({ data, key });
|
2020-09-20 15:18:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export const getFiles = async (sinceTime: string, token: string, limit: string, key: string) => {
|
2020-09-19 21:20:10 +00:00
|
|
|
const resp = await HTTPService.get(`${ENDPOINT}/encrypted-files/diff`, {
|
2020-09-20 15:18:35 +00:00
|
|
|
sinceTime, token, limit,
|
2020-09-19 21:20:10 +00:00
|
|
|
});
|
|
|
|
|
2020-09-26 17:16:16 +00:00
|
|
|
const promises: Promise<fileData>[] = resp.data.diff.map((data) => getFileMetaDataUsingWorker(data, key));
|
2020-09-19 21:20:10 +00:00
|
|
|
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);
|
2020-09-26 17:16:16 +00:00
|
|
|
const url = URL.createObjectURL(new Blob([decrypted.data]));
|
2020-09-20 15:18:35 +00:00
|
|
|
return url;
|
|
|
|
}
|