Show challenge when requested by server
This commit is contained in:
parent
03c68da17d
commit
986d8a66bc
42 changed files with 1986 additions and 128 deletions
50
ts/main/challengeMain.ts
Normal file
50
ts/main/challengeMain.ts
Normal file
|
@ -0,0 +1,50 @@
|
|||
// Copyright 2021 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
/* eslint-disable no-restricted-syntax, no-console */
|
||||
|
||||
import { ipcMain as ipc, IpcMainEvent } from 'electron';
|
||||
|
||||
import { IPCRequest, IPCResponse, ChallengeResponse } from '../challenge';
|
||||
|
||||
export class ChallengeMainHandler {
|
||||
private handlers: Array<(response: ChallengeResponse) => void> = [];
|
||||
|
||||
constructor() {
|
||||
this.initialize();
|
||||
}
|
||||
|
||||
public handleCaptcha(captcha: string): void {
|
||||
const response: ChallengeResponse = { captcha };
|
||||
|
||||
const { handlers } = this;
|
||||
this.handlers = [];
|
||||
for (const resolve of handlers) {
|
||||
resolve(response);
|
||||
}
|
||||
}
|
||||
|
||||
private async onRequest(
|
||||
event: IpcMainEvent,
|
||||
request: IPCRequest
|
||||
): Promise<void> {
|
||||
console.log('Received challenge request, waiting for response');
|
||||
|
||||
const data = await new Promise<ChallengeResponse>(resolve => {
|
||||
this.handlers.push(resolve);
|
||||
});
|
||||
|
||||
console.log('Sending challenge response', data);
|
||||
|
||||
const ipcResponse: IPCResponse = {
|
||||
seq: request.seq,
|
||||
data,
|
||||
};
|
||||
event.sender.send('challenge:response', ipcResponse);
|
||||
}
|
||||
|
||||
private initialize(): void {
|
||||
ipc.on('challenge:request', (event, request) => {
|
||||
this.onRequest(event, request);
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue