support archiving shared album and handle incoming sharee-metadata property

This commit is contained in:
Abhinav 2023-07-08 10:13:19 +05:30
parent 0cad1254ac
commit 7161bc8673
2 changed files with 85 additions and 6 deletions

View file

@ -30,6 +30,7 @@ import {
CollectionMagicMetadataProps,
CollectionPublicMagicMetadata,
RemoveFromCollectionRequest,
CollectionShareeMagicMetadata,
} from 'types/collection';
import {
COLLECTION_LIST_SORT_BY,
@ -139,12 +140,26 @@ const getCollectionWithSecrets = async (
};
}
let collectionShareeMagicMetadata: CollectionShareeMagicMetadata;
if (collection.sharedMagicMetadata?.data) {
collectionShareeMagicMetadata = {
...collection.sharedMagicMetadata,
data: await cryptoWorker.decryptMetadata(
collection.sharedMagicMetadata.data,
collection.sharedMagicMetadata.header,
collectionKey
),
};
}
return {
...collection,
name: collectionName,
key: collectionKey,
magicMetadata: collectionMagicMetadata,
pubMagicMetadata: collectionPublicMagicMetadata,
sharedMagicMetadata: collectionShareeMagicMetadata,
};
};
@ -359,6 +374,7 @@ const createCollection = async (
isDeleted: false,
magicMetadata: encryptedMagicMetadata,
pubMagicMetadata: null,
sharedMagicMetadata: null,
};
const createdCollection = await postCollection(newCollection, token);
const decryptedCreatedCollection = await getCollectionWithSecrets(
@ -738,6 +754,50 @@ export const updateCollectionMagicMetadata = async (
return updatedCollection;
};
export const updateSharedCollectionMagicMetadata = async (
collection: Collection,
updatedMagicMetadata: CollectionMagicMetadata
) => {
const token = getToken();
if (!token) {
return;
}
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
const { file: encryptedMagicMetadata } = await cryptoWorker.encryptMetadata(
updatedMagicMetadata.data,
collection.key
);
const reqBody: UpdateMagicMetadataRequest = {
id: collection.id,
magicMetadata: {
version: updatedMagicMetadata.version,
count: updatedMagicMetadata.count,
data: encryptedMagicMetadata.encryptedData,
header: encryptedMagicMetadata.decryptionHeader,
},
};
await HTTPService.put(
`${ENDPOINT}/collections/sharee-magic-metadata`,
reqBody,
null,
{
'X-Auth-Token': token,
}
);
const updatedCollection: Collection = {
...collection,
magicMetadata: {
...updatedMagicMetadata,
version: updatedMagicMetadata.version + 1,
},
};
return updatedCollection;
};
export const updatePublicCollectionMagicMetadata = async (
collection: Collection,
updatedPublicMagicMetadata: CollectionPublicMagicMetadata

View file

@ -8,6 +8,7 @@ import {
unhideToCollection,
updateCollectionMagicMetadata,
updatePublicCollectionMagicMetadata,
updateSharedCollectionMagicMetadata,
} from 'services/collectionService';
import { downloadFiles } from 'utils/file';
import { getLocalFiles, getLocalHiddenFiles } from 'services/fileService';
@ -164,12 +165,30 @@ export const changeCollectionVisibility = async (
visibility,
};
const updatedMagicMetadata = await updateMagicMetadata(
updatedMagicMetadataProps,
collection.magicMetadata,
collection.key
);
await updateCollectionMagicMetadata(collection, updatedMagicMetadata);
const user: User = getData(LS_KEYS.USER);
if (collection.owner.id === user.id) {
const updatedMagicMetadata = await updateMagicMetadata(
updatedMagicMetadataProps,
collection.magicMetadata,
collection.key
);
await updateCollectionMagicMetadata(
collection,
updatedMagicMetadata
);
} else {
const updatedMagicMetadata = await updateMagicMetadata(
updatedMagicMetadataProps,
collection.sharedMagicMetadata,
collection.key
);
await updateSharedCollectionMagicMetadata(
collection,
updatedMagicMetadata
);
}
} catch (e) {
logError(e, 'change collection visibility failed');
throw e;