support archiving shared album and handle incoming sharee-metadata property
This commit is contained in:
parent
0cad1254ac
commit
7161bc8673
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue