Handle deviceCode expiry
This commit is contained in:
parent
8f954e0d1b
commit
a3bb85599a
|
@ -32,10 +32,10 @@ const convertDataToDecimalString = (data: Uint8Array): string => {
|
||||||
|
|
||||||
export default function PairingMode() {
|
export default function PairingMode() {
|
||||||
const [digits, setDigits] = useState<string[]>([]);
|
const [digits, setDigits] = useState<string[]>([]);
|
||||||
|
|
||||||
const [publicKeyB64, setPublicKeyB64] = useState('');
|
const [publicKeyB64, setPublicKeyB64] = useState('');
|
||||||
|
const [privateKeyB64, setPrivateKeyB64] = useState('');
|
||||||
const [codePending, setCodePending] = useState(true);
|
const [codePending, setCodePending] = useState(true);
|
||||||
|
const [isCastReady, setIsCastReady] = useState(false);
|
||||||
|
|
||||||
const { cast } = useCastReceiver();
|
const { cast } = useCastReceiver();
|
||||||
|
|
||||||
|
@ -45,24 +45,25 @@ export default function PairingMode() {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!cast) return;
|
if (!cast) return;
|
||||||
|
if (isCastReady) return;
|
||||||
const context = cast.framework.CastReceiverContext.getInstance();
|
const context = cast.framework.CastReceiverContext.getInstance();
|
||||||
if (!context.isInitialized) {
|
|
||||||
const options = new cast.framework.CastReceiverOptions();
|
|
||||||
options.customNamespaces = Object.assign({});
|
|
||||||
options.customNamespaces['urn:x-cast:pair-request'] =
|
|
||||||
cast.framework.system.MessageType.JSON;
|
|
||||||
|
|
||||||
options.disableIdleTimeout = true;
|
const options = new cast.framework.CastReceiverOptions();
|
||||||
|
options.customNamespaces = Object.assign({});
|
||||||
|
options.customNamespaces['urn:x-cast:pair-request'] =
|
||||||
|
cast.framework.system.MessageType.JSON;
|
||||||
|
|
||||||
context.addCustomMessageListener(
|
options.disableIdleTimeout = true;
|
||||||
'urn:x-cast:pair-request',
|
|
||||||
messageReceiveHandler
|
context.addCustomMessageListener(
|
||||||
);
|
'urn:x-cast:pair-request',
|
||||||
context.start(options);
|
messageReceiveHandler
|
||||||
return () => {
|
);
|
||||||
context.stop(options);
|
context.start(options);
|
||||||
};
|
setIsCastReady(true);
|
||||||
}
|
return () => {
|
||||||
|
context.stop(options);
|
||||||
|
};
|
||||||
}, [cast]);
|
}, [cast]);
|
||||||
|
|
||||||
const messageReceiveHandler = (message: {
|
const messageReceiveHandler = (message: {
|
||||||
|
@ -82,14 +83,11 @@ export default function PairingMode() {
|
||||||
const init = async () => {
|
const init = async () => {
|
||||||
const data = generateSecureData(6);
|
const data = generateSecureData(6);
|
||||||
setDigits(convertDataToDecimalString(data).split(''));
|
setDigits(convertDataToDecimalString(data).split(''));
|
||||||
|
|
||||||
const keypair = await generateKeyPair();
|
const keypair = await generateKeyPair();
|
||||||
setPublicKeyB64(await toB64(keypair.publicKey));
|
setPublicKeyB64(await toB64(keypair.publicKey));
|
||||||
setPrivateKeyB64(await toB64(keypair.privateKey));
|
setPrivateKeyB64(await toB64(keypair.privateKey));
|
||||||
};
|
};
|
||||||
|
|
||||||
const [privateKeyB64, setPrivateKeyB64] = useState('');
|
|
||||||
|
|
||||||
const generateKeyPair = async () => {
|
const generateKeyPair = async () => {
|
||||||
await _sodium.ready;
|
await _sodium.ready;
|
||||||
|
|
||||||
|
@ -113,6 +111,8 @@ export default function PairingMode() {
|
||||||
if (!encDastData) return;
|
if (!encDastData) return;
|
||||||
devicePayload = encDastData;
|
devicePayload = encDastData;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
setCodePending(true);
|
||||||
|
init();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,10 +145,9 @@ export default function PairingMode() {
|
||||||
`${digits.join('')}`,
|
`${digits.join('')}`,
|
||||||
publicKeyB64
|
publicKeyB64
|
||||||
);
|
);
|
||||||
setCodeGeneratedAt(new Date());
|
|
||||||
setCodePending(false);
|
setCodePending(false);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// schedule init after 5 seconds
|
// schedule re-try after 5 seconds
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
init();
|
init();
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
@ -175,7 +174,6 @@ export default function PairingMode() {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!publicKeyB64) return;
|
if (!publicKeyB64) return;
|
||||||
|
|
||||||
advertisePublicKey(publicKeyB64);
|
advertisePublicKey(publicKeyB64);
|
||||||
}, [publicKeyB64]);
|
}, [publicKeyB64]);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue