Show challenge when requested by server

This commit is contained in:
Fedor Indutny 2021-05-05 17:09:29 -07:00 committed by GitHub
parent 03c68da17d
commit 986d8a66bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
42 changed files with 1986 additions and 128 deletions

22
main.js
View file

@ -108,8 +108,10 @@ const OS = require('./ts/OS');
const { isBeta } = require('./ts/util/version');
const {
isSgnlHref,
isCaptchaHref,
isSignalHttpsLink,
parseSgnlHref,
parseCaptchaHref,
parseSignalHttpsLink,
} = require('./ts/util/sgnlHref');
const {
@ -120,8 +122,10 @@ const {
TitleBarVisibility,
} = require('./ts/types/Settings');
const { Environment } = require('./ts/environment');
const { ChallengeMainHandler } = require('./ts/main/challengeMain');
const sql = new MainSQL();
const challengeHandler = new ChallengeMainHandler();
let sqlInitTimeStart = 0;
let sqlInitTimeEnd = 0;
@ -193,6 +197,12 @@ if (!process.mas) {
showWindow();
}
const incomingCaptchaHref = getIncomingCaptchaHref(argv);
if (incomingCaptchaHref) {
const { captcha } = parseCaptchaHref(incomingCaptchaHref, logger);
challengeHandler.handleCaptcha(captcha);
return true;
}
// Are they trying to open a sgnl:// href?
const incomingHref = getIncomingHref(argv);
if (incomingHref) {
@ -1391,11 +1401,19 @@ app.on('web-contents-created', (createEvent, contents) => {
});
app.setAsDefaultProtocolClient('sgnl');
app.setAsDefaultProtocolClient('signalcaptcha');
app.on('will-finish-launching', () => {
// open-url must be set from within will-finish-launching for macOS
// https://stackoverflow.com/a/43949291
app.on('open-url', (event, incomingHref) => {
event.preventDefault();
if (isCaptchaHref(incomingHref, logger)) {
const { captcha } = parseCaptchaHref(incomingHref, logger);
challengeHandler.handleCaptcha(captcha);
return;
}
handleSgnlHref(incomingHref);
});
});
@ -1656,6 +1674,10 @@ function getIncomingHref(argv) {
return argv.find(arg => isSgnlHref(arg, logger));
}
function getIncomingCaptchaHref(argv) {
return argv.find(arg => isCaptchaHref(arg, logger));
}
function handleSgnlHref(incomingHref) {
let command;
let args;