Skip to content

Commit 62fe88c

Browse files
decrypt all cryptedData
1 parent 13a23fc commit 62fe88c

2 files changed

Lines changed: 34 additions & 23 deletions

File tree

packages/import/features/Import.tsx

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useEffect } from 'react';
22

33
import { useAppSelector, useAppDispatch, setRowData } from 'state';
44
import { selectJsonSchema, selectCryptedData, setCryptedData, selectUiSchema, setJsonSchema, setUiSchema, CryptedData } from 'project-state';
5-
import { PGPProvider, decryptUsingContext } from 'pgp-provider';
5+
import { PGPProvider, useDecryptUsingContext } from 'pgp-provider';
66
import { api } from '@formswizard/api';
77

88
function useFormId() {
@@ -15,30 +15,28 @@ function useFormId() {
1515
export function DecryptAndImportLastNewSubmission() {
1616
const dispatch = useAppDispatch();
1717
const formId = useFormId();
18-
const jsonSchema = useAppSelector(selectJsonSchema);
1918

2019
const cryptedData = useAppSelector(selectCryptedData);
2120
useEffect( () => {
2221
async function loadCryptedData() {
2322
const { cryptedData } = await api.getProjectStateCryptedData(formId);
24-
const latestCryptedDatum = cryptedData?.length && cryptedData[cryptedData.length-1];
25-
latestCryptedDatum && dispatch(setCryptedData(latestCryptedDatum));
23+
cryptedData?.map( cryptedDatum => {
24+
dispatch(setCryptedData(cryptedDatum)); // TODO use a setter for all cryptedData at the same time
25+
});
2626
}
27-
console.log({cryptedData})
2827
cryptedData.length || loadCryptedData()
2928
}, [cryptedData])
3029

31-
/** TODO: Delete decrypted dataset after import and loop over submissions **/
32-
33-
const cryptedDatum = cryptedData[cryptedData.length-1] || {} as CryptedData;
34-
const { id, data, keyId, armoredPublicKey } = cryptedDatum
35-
const decrypted_str = decryptUsingContext(data);
36-
const decrypted = decrypted_str && JSON.parse(decrypted_str);
37-
30+
const decrypt = useDecryptUsingContext();
3831
useEffect( () => {
39-
const row = { ...decrypted, id, keyId, armoredPublicKey }
40-
decrypted && dispatch(setRowData({row}));
41-
}, [decrypted]);
32+
cryptedData.map( async cryptedDatum => {
33+
const { id, data, keyId, armoredPublicKey } = cryptedDatum
34+
const decrypted_str = await decrypt(data);
35+
const decrypted = decrypted_str && JSON.parse(decrypted_str);
36+
const row = { ...decrypted, id, keyId, armoredPublicKey }
37+
decrypted && dispatch(setRowData({row}));
38+
})
39+
}, [cryptedData]);
4240

4341
return <></>
4442
}

packages/pgp-provider/PGPProvider.tsx

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -98,22 +98,35 @@ export function encryptUsingContext(text: string, armoredPubKeys?: string[]) {
9898
return encrypted;
9999
};
100100

101-
export function decryptUsingContext(armoredMessage?: string) {
101+
export function useDecryptUsingContext() {
102102
const {privateKey: decryptionKeys} = useKeyContext();
103+
104+
async function decrypt(armoredMessage: string) {
105+
if(decryptionKeys) {
106+
const message = await readMessage({ armoredMessage });
107+
const decrypted = (await pgp_decrypt({ message, decryptionKeys })
108+
.catch(e => { console.error('Decryption failed. Do you have a correct privateKey?')
109+
console.warn(e) })
110+
)?.data.toString()
111+
return decrypted
112+
}
113+
};
114+
return decrypt
115+
}
116+
117+
export function decryptUsingContext(armoredMessage?: string) {
118+
const decrypt = useDecryptUsingContext();
103119
const [decrypted, setDecrypted] = useState<string>();
104120

105121
useEffect(() => {
106122
const asyncEffect = async () => {
107-
if(decryptionKeys && armoredMessage) {
108-
const message = await readMessage({ armoredMessage });
109-
pgp_decrypt({ message, decryptionKeys })
110-
.then(x => setDecrypted(x.data.toString()))
111-
.catch(e => { console.error('Decryption failed. Do you have a correct privateKey?')
112-
console.warn(e) })
123+
if(armoredMessage) {
124+
const decrypted = await decrypt(armoredMessage);
125+
decrypted && setDecrypted(decrypted)
113126
}
114127
};
115128
asyncEffect();
116-
}, [armoredMessage, decryptionKeys, setDecrypted]);
129+
}, [armoredMessage, setDecrypted]);
117130

118131
return decrypted;
119132
};

0 commit comments

Comments
 (0)