2021-06-29 15:46:07 +10:00
|
|
|
import { Button } from '@material-ui/core';
|
|
|
|
|
import React, { useState } from 'react';
|
|
|
|
|
import { createPublicKeyMessage, KeyPair } from './crypto';
|
2021-07-01 11:52:07 +10:00
|
|
|
import { PublicKeyMessage } from './messaging/wire';
|
2021-06-29 15:46:07 +10:00
|
|
|
import { WakuMessage, Waku } from 'js-waku';
|
|
|
|
|
import { Signer } from '@ethersproject/abstract-signer';
|
2021-07-09 13:52:17 +10:00
|
|
|
import { PublicKeyContentTopic } from './waku';
|
2021-06-29 15:46:07 +10:00
|
|
|
|
|
|
|
|
interface Props {
|
2021-08-12 14:45:40 +10:00
|
|
|
EncryptionKeyPair: KeyPair | undefined;
|
2021-06-29 15:46:07 +10:00
|
|
|
waku: Waku | undefined;
|
|
|
|
|
signer: Signer | undefined;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default function BroadcastPublicKey({
|
|
|
|
|
signer,
|
2021-08-12 14:45:40 +10:00
|
|
|
EncryptionKeyPair,
|
2021-06-29 15:46:07 +10:00
|
|
|
waku,
|
|
|
|
|
}: Props) {
|
|
|
|
|
const [publicKeyMsg, setPublicKeyMsg] = useState<PublicKeyMessage>();
|
|
|
|
|
|
|
|
|
|
const broadcastPublicKey = () => {
|
2021-08-12 14:45:40 +10:00
|
|
|
if (!EncryptionKeyPair) return;
|
2021-06-29 15:46:07 +10:00
|
|
|
if (!signer) return;
|
|
|
|
|
if (!waku) return;
|
|
|
|
|
|
|
|
|
|
if (publicKeyMsg) {
|
2021-07-09 11:39:31 +10:00
|
|
|
encodePublicKeyWakuMessage(publicKeyMsg)
|
|
|
|
|
.then((wakuMsg) => {
|
|
|
|
|
waku.lightPush.push(wakuMsg).catch((e) => {
|
|
|
|
|
console.error('Failed to send Public Key Message', e);
|
|
|
|
|
});
|
|
|
|
|
})
|
2021-07-28 11:22:29 +10:00
|
|
|
.catch(() => {
|
2021-07-09 11:39:31 +10:00
|
|
|
console.log('Failed to encode Public Key Message in Waku Message');
|
|
|
|
|
});
|
2021-06-29 15:46:07 +10:00
|
|
|
} else {
|
2021-08-12 14:45:40 +10:00
|
|
|
createPublicKeyMessage(signer, EncryptionKeyPair.publicKey)
|
2021-06-29 15:46:07 +10:00
|
|
|
.then((msg) => {
|
|
|
|
|
setPublicKeyMsg(msg);
|
2021-07-09 11:39:31 +10:00
|
|
|
encodePublicKeyWakuMessage(msg)
|
|
|
|
|
.then((wakuMsg) => {
|
2021-07-12 17:10:05 +10:00
|
|
|
waku.lightPush
|
|
|
|
|
.push(wakuMsg)
|
|
|
|
|
.then((res) => console.log('Public Key Message pushed', res))
|
|
|
|
|
.catch((e) => {
|
|
|
|
|
console.error('Failed to send Public Key Message', e);
|
|
|
|
|
});
|
2021-07-09 11:39:31 +10:00
|
|
|
})
|
2021-07-28 11:22:29 +10:00
|
|
|
.catch(() => {
|
2021-07-09 11:39:31 +10:00
|
|
|
console.log(
|
|
|
|
|
'Failed to encode Public Key Message in Waku Message'
|
|
|
|
|
);
|
|
|
|
|
});
|
2021-06-29 15:46:07 +10:00
|
|
|
})
|
|
|
|
|
.catch((e) => {
|
2021-06-29 16:34:26 +10:00
|
|
|
console.error('Failed to create public key message', e);
|
2021-06-29 15:46:07 +10:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Button
|
|
|
|
|
variant="contained"
|
|
|
|
|
color="primary"
|
|
|
|
|
onClick={broadcastPublicKey}
|
2021-08-12 14:45:40 +10:00
|
|
|
disabled={!EncryptionKeyPair || !waku}
|
2021-06-29 15:46:07 +10:00
|
|
|
>
|
2021-08-12 14:45:40 +10:00
|
|
|
Broadcast Encryption Public Key
|
2021-06-29 15:46:07 +10:00
|
|
|
</Button>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-09 11:39:31 +10:00
|
|
|
async function encodePublicKeyWakuMessage(
|
2021-07-01 11:52:07 +10:00
|
|
|
publicKeyMessage: PublicKeyMessage
|
2021-07-09 11:39:31 +10:00
|
|
|
): Promise<WakuMessage> {
|
2021-07-01 11:52:07 +10:00
|
|
|
const payload = publicKeyMessage.encode();
|
2021-07-28 11:22:29 +10:00
|
|
|
return await WakuMessage.fromBytes(payload, PublicKeyContentTopic);
|
2021-06-29 15:46:07 +10:00
|
|
|
}
|