You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Magister-Auto-Login/src/login.js

78 lines
1.6 KiB

const $ = document.querySelector.bind(document);
const getSettings = (callback) =>
chrome.storage.sync.get(['accounts', 'primaryAccount'], ({ primaryAccount, accounts }) => {
if (accounts && accounts.length != 0) {
callback(accounts.find((account) => account.username == primaryAccount));
}
});
const login = () => {
getSettings(async ({ school, username: number, password }) => {
const schoolPicker = $('#scholenkiezer_value');
if (schoolPicker) {
if (school) {
schoolPicker.value = school;
schoolPicker.dispatchEvent(new Event('input'));
} else {
return;
}
const selected = '.selected';
await awaitSelector(selected);
$(selected).click();
}
const username = '#username';
await awaitSelector(username);
if (number) {
$(username).value = number;
$(username).dispatchEvent(new Event('input'));
} else {
return;
}
const usernameSubmit = '#username_submit';
await awaitSelector(usernameSubmit);
$(usernameSubmit).click();
const rswpPassword = '#rswp_password';
await awaitSelector(rswpPassword);
if (password) {
$(rswpPassword).value = password;
$(rswpPassword).dispatchEvent(new Event('input'));
} else {
return;
}
await awaitSelector('[id*=_submit]');
$('#rswp_submit').click();
});
};
const awaitSelector = (selector) => {
return new Promise((resolve, reject) => {
const element = document.querySelector(selector);
if (element) {
resolve(element);
} else {
setTimeout(() => awaitSelector(selector).then(resolve, reject), 100);
}
});
};
chrome.storage.sync.get('enabled', (enabled) => {
enabled ? login() : null;
});