Fixed signing in
This commit is contained in:
parent
762c5fa196
commit
466c0b6b17
@ -13,9 +13,6 @@
|
||||
"default_popup": "popup/popup.html",
|
||||
"default_icon": "images/icon_passport_48.png"
|
||||
},
|
||||
"background": {
|
||||
"service_worker": "background.js"
|
||||
},
|
||||
"icons": {
|
||||
"16": "images/icon_passport_16.png",
|
||||
"48": "images/icon_passport_48.png",
|
||||
|
||||
@ -1,13 +1,9 @@
|
||||
function log_ts(message) {
|
||||
console.log(new Date().toISOString() + " " + message);
|
||||
}
|
||||
|
||||
async function delay(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
const pathnameRegex = /^\/\w{2}-\w{2}\/n?iv/;
|
||||
const MAX_SIGNIN_ATTEMPTS = 2;
|
||||
const MAX_SIGNIN_ATTEMPTS = 1;
|
||||
const PAGE_WAIT_TIME = 5000;
|
||||
|
||||
let config = {
|
||||
@ -19,6 +15,7 @@ let config = {
|
||||
};
|
||||
let minute = 60;
|
||||
let signin_attempts = 0;
|
||||
let isRunning = false;
|
||||
|
||||
|
||||
function isSignInPage() {
|
||||
@ -51,49 +48,61 @@ function isNotEnglishPage() {
|
||||
}
|
||||
|
||||
async function switchToEnglishPage() {
|
||||
log_ts('Changing page to English');
|
||||
console.log('Changing page to English');
|
||||
await chrome.storage.local.set({ "__status": "switching to English" });
|
||||
window.location.href(window.location.pathname.replace(/^\/\w{2}-{2}/, '/en-us'));
|
||||
delay(PAGE_WAIT_TIME);
|
||||
await delay(PAGE_WAIT_TIME);
|
||||
// Should be on English page
|
||||
}
|
||||
|
||||
async function goToSignInPage() {
|
||||
log_ts('Going to sign in page')
|
||||
console.log('Going to sign in page')
|
||||
await chrome.storage.local.set({ "__status": "going to sign in page" });
|
||||
document.querySelector(".homeSelectionsContainer a[href*='/sign_in']").click();
|
||||
delay(PAGE_WAIT_TIME);
|
||||
await delay(PAGE_WAIT_TIME);
|
||||
// Should be on sign in page
|
||||
}
|
||||
|
||||
async function enterCredentials() {
|
||||
if (signin_attempts == MAX_SIGNIN_ATTEMPTS) {
|
||||
log_ts('Too many sign in attempts');
|
||||
if (signin_attempts >= MAX_SIGNIN_ATTEMPTS) {
|
||||
await chrome.storage.local.set({ "__status": "too many sign in attempts" });
|
||||
return;
|
||||
}
|
||||
|
||||
log_ts('Signing in');
|
||||
console.log('Signing in');
|
||||
await chrome.storage.local.set({ "__status": "signing in" });
|
||||
|
||||
document.getElementById("user_email").value = config.username;
|
||||
document.getElementById("user_password").value = config.password;
|
||||
document.querySelector('[for="policy_confirmed"]').click();
|
||||
let policyConfirmed = document.querySelector('[for="policy_confirmed"]');
|
||||
if (!policyConfirmed.getElementsByTagName('input')[0].checked) {
|
||||
policyConfirmed.click();
|
||||
}
|
||||
document.querySelector("#sign_in_form input[type=submit]").click();
|
||||
signin_attempts += 1;
|
||||
|
||||
delay(PAGE_WAIT_TIME);
|
||||
// Should be on dashboard page
|
||||
await delay(PAGE_WAIT_TIME);
|
||||
if (!isDashboardPage()) {
|
||||
console.log('Sign in failed');
|
||||
await chrome.storage.local.set({ "__status": "sign in failed" });
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
async function checkDates() {
|
||||
log_ts('checkDates start');
|
||||
console.log('checkDates start');
|
||||
config.countdown = config.frequency * minute;
|
||||
await chrome.storage.local.set({ "__countdown": config.countdown });
|
||||
log_ts('checkDates done');
|
||||
console.log('checkDates done');
|
||||
}
|
||||
|
||||
async function runner() {
|
||||
if (isRunning) {
|
||||
return;
|
||||
}
|
||||
isRunning = true;
|
||||
// console.log('runner start');
|
||||
|
||||
page = window.location.pathname;
|
||||
let isSignIn = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/users\/sign_in/)
|
||||
let isLoggedOut = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv$/)
|
||||
@ -102,7 +111,6 @@ async function runner() {
|
||||
let isConfirmation = !!page.match(/^\/[a-z]{2}-[a-z]{2}\/(n|)iv\/schedule\/\d{1,}\/appointment\/instructions$/)
|
||||
let isNotEnglish = (isSignIn || isLoggedOut || isDashboard || isAppointment || isConfirmation) && !page.match(/^\/en-/)
|
||||
|
||||
// log_ts('runner start');
|
||||
let prev_config = Object.assign({}, config);
|
||||
|
||||
let result = await new Promise(resolve => chrome.storage.local.get(null, resolve));
|
||||
@ -113,14 +121,15 @@ async function runner() {
|
||||
config.countdown = result['__countdown'] || 0;
|
||||
|
||||
if (prev_config.activate === null) {
|
||||
log_ts('Reading config: ' + JSON.stringify(config));
|
||||
console.log('Reading config: ' + JSON.stringify(config));
|
||||
isRunning = false;
|
||||
return;
|
||||
}
|
||||
|
||||
let configChanged = false;
|
||||
for (let key in config) {
|
||||
if (config.hasOwnProperty(key) && config[key] !== prev_config[key]) {
|
||||
log_ts(`Config change: ${key}, ${prev_config[key]} => ${config[key]}`);
|
||||
console.log(`Config change: ${key}, ${prev_config[key]} => ${config[key]}`);
|
||||
configChanged = true;
|
||||
|
||||
// reduce countdown if frequency is reduced
|
||||
@ -134,11 +143,11 @@ async function runner() {
|
||||
|
||||
if (key === 'activate') {
|
||||
if (config[key]) {
|
||||
log_ts('Activating extension');
|
||||
console.log('Activating extension');
|
||||
config.countdown = 5;
|
||||
await chrome.storage.local.set({ "__countdown": config.countdown });
|
||||
} else {
|
||||
log_ts('Deactivating extension');
|
||||
console.log('Deactivating extension');
|
||||
// reset countdown when deactivating the extension
|
||||
config.countdown = 0;
|
||||
await chrome.storage.local.set({ "__countdown": config.countdown });
|
||||
@ -155,30 +164,34 @@ async function runner() {
|
||||
}
|
||||
if (configChanged) {
|
||||
// print whole config
|
||||
log_ts(JSON.stringify(config));
|
||||
console.log(JSON.stringify(config));
|
||||
}
|
||||
|
||||
if (!config.activate) {
|
||||
isRunning = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (config.username === "" || config.password === "") {
|
||||
log_ts('Username or password is empty');
|
||||
console.log('Username or password is empty');
|
||||
await chrome.storage.local.set({ "__status": "missing credentials" });
|
||||
isRunning = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (config.frequency <= 0) {
|
||||
log_ts('Frequency is 0 or negative');
|
||||
console.log('Frequency is 0 or negative');
|
||||
await chrome.storage.local.set({ "__status": "invalid frequency" });
|
||||
isRunning = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (config.countdown > 0) {
|
||||
config.countdown -= 1;
|
||||
log_ts(`Countdown: ${config.countdown}`);
|
||||
console.log(`Countdown: ${config.countdown}`);
|
||||
await chrome.storage.local.set({ "__countdown": config.countdown });
|
||||
await chrome.storage.local.set({ "__status": `waiting, ${config.countdown}s` });
|
||||
isRunning = false;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -195,7 +208,8 @@ async function runner() {
|
||||
await checkDates();
|
||||
}
|
||||
|
||||
// log_ts('runner done');
|
||||
// console.log('runner done');
|
||||
isRunning = false;
|
||||
}
|
||||
|
||||
setInterval(runner, 1000);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user