fix: handle epic MFA code inputs with multiple fields
All checks were successful
build-and-push / lint (push) Successful in 4s
build-and-push / sonar (push) Successful in 12s
build-and-push / docker (push) Successful in 1m13s

This commit is contained in:
nocci 2025-12-31 13:28:30 +00:00
parent 943fdbbf0c
commit 2592de2285

View file

@ -146,7 +146,16 @@ const ensureLoggedIn = async (page, context) => {
try { try {
await page.waitForURL('**/id/login/mfa**', { timeout: cfg.login_timeout }); await page.waitForURL('**/id/login/mfa**', { timeout: cfg.login_timeout });
const otp = cfg.eg_otpkey && authenticator.generate(cfg.eg_otpkey) || await prompt({ type: 'text', message: 'Enter two-factor sign in code', validate: n => n.toString().length == 6 || 'The code must be 6 digits!' }); const otp = cfg.eg_otpkey && authenticator.generate(cfg.eg_otpkey) || await prompt({ type: 'text', message: 'Enter two-factor sign in code', validate: n => n.toString().length == 6 || 'The code must be 6 digits!' });
await page.locator('input[name="code-input-0"]').pressSequentially(otp.toString()); const codeInputs = page.locator('input[name^="code-input"]');
if (await codeInputs.count()) {
const digits = otp.toString().split('');
for (let i = 0; i < digits.length; i++) {
const input = codeInputs.nth(i);
await input.fill(digits[i]);
}
} else {
await page.locator('input[name="code-input-0"]').pressSequentially(otp.toString());
}
await page.click('button[type="submit"]'); await page.click('button[type="submit"]');
} catch { } catch {
// no MFA // no MFA