diff --git a/backend/services/chunk-service/chunk-service.ts b/backend/services/chunk-service/chunk-service.ts index d5d9ab1..745a756 100644 --- a/backend/services/chunk-service/chunk-service.ts +++ b/backend/services/chunk-service/chunk-service.ts @@ -383,6 +383,7 @@ class StorageService { const start = parseInt(parts[0], 10); const end = parts[1] ? parseInt(parts[1], 10) : fileSize - 1; const chunksize = end - start + 1; + const IV = currentFile.metadata.IV; const head = { "Content-Range": "bytes " + start + "-" + end + "/" + fileSize, @@ -408,9 +409,25 @@ class StorageService { fixedStart = 0; } + let currentIV = IV; + + if (fixedStart !== 0 && start !== 0) { + const readStreamParams = createGenericParams({ + filePath: currentFile.metadata.filePath, + Key: currentFile.metadata.s3ID, + }); + currentIV = (await storageActions.getPrevIV( + readStreamParams, + fixedStart - 16 + )) as Buffer; + } + res.writeHead(206, head); - await getFileData(res, fileID, user, { start: fixedStart, end: fixedEnd }); + await getFileData(res, fileID, user, currentIV, { + start: fixedStart, + end: fixedEnd, + }); }; getPublicDownload = async (fileID: string, tempToken: any, res: Response) => { diff --git a/backend/services/chunk-service/utils/getFileData.ts b/backend/services/chunk-service/utils/getFileData.ts index d0dfb7f..4d13144 100644 --- a/backend/services/chunk-service/utils/getFileData.ts +++ b/backend/services/chunk-service/utils/getFileData.ts @@ -16,6 +16,7 @@ const proccessData = ( res: Response, fileID: string, user: UserInterface, + rangeIV?: Buffer, range?: { start: number; end: number } ) => { const eventEmitter = new EventEmitter(); @@ -30,7 +31,7 @@ const proccessData = ( if (!password) throw new ForbiddenError("Invalid Encryption Key"); - const IV = currentFile.metadata.IV; + const IV = rangeIV || currentFile.metadata.IV; const readStreamParams = createGenericParams({ filePath: currentFile.metadata.filePath, @@ -99,10 +100,11 @@ const getFileData = ( res: Response, fileID: string, user: UserInterface, + rangeIV?: Buffer, range?: { start: number; end: number } ) => { return new Promise((resolve, reject) => { - const eventEmitter = proccessData(res, fileID, user, range); + const eventEmitter = proccessData(res, fileID, user, rangeIV, range); eventEmitter.on("finish", (data) => { resolve(data); }); diff --git a/src/components/FolderItem/FolderItem.tsx b/src/components/FolderItem/FolderItem.tsx index 88edc06..9b60837 100644 --- a/src/components/FolderItem/FolderItem.tsx +++ b/src/components/FolderItem/FolderItem.tsx @@ -148,7 +148,7 @@ const FolderItem: React.FC = memo((props) => {
= ({

Email

{user.email}

- {"emailVerified" in user && ( + {"emailVerified" in user && !user.emailVerified && (
-

- {user.emailVerified ? "Email verified" : "Email unverified"} -

+

Email not verified

{!user.emailVerified && (