66 lines
1.7 KiB
JavaScript
66 lines
1.7 KiB
JavaScript
(async function() {
|
|
// eslint-disable-next-line no-undef
|
|
const api = typeof browser !== "undefined" ? browser : chrome;
|
|
|
|
const fillAndSubmit = (code) => {
|
|
const input = document.getElementById("input2factor");
|
|
const button = document.getElementById("notification_2factor_button_ok");
|
|
|
|
const errorMsg = document.querySelector(".ui-state-error");
|
|
const isErrorVisible = errorMsg && errorMsg.style.display !== "none";
|
|
|
|
if (!input || input.value.length > 0 || isErrorVisible) {
|
|
return;
|
|
}
|
|
|
|
console.log("Autofill");
|
|
|
|
input.focus();
|
|
input.value = code;
|
|
['input', 'change', 'keyup', 'keydown'].forEach(evt => {
|
|
input.dispatchEvent(new Event(evt, { bubbles: true }));
|
|
});
|
|
|
|
setTimeout(() => {
|
|
if (button) {
|
|
console.log("Clicking 'Aceptar'");
|
|
const clickEvent = new MouseEvent('click', {
|
|
view: window,
|
|
bubbles: true,
|
|
cancelable: true
|
|
});
|
|
button.dispatchEvent(clickEvent);
|
|
}
|
|
}, 400);
|
|
};
|
|
|
|
const tryAutofill = async () => {
|
|
const data = await api.storage.local.get(['shasecret']);
|
|
if (data.shasecret) {
|
|
api.runtime.sendMessage({ action: "GENERATE_TOKEN" }, response => {
|
|
if (response?.token) {
|
|
fillAndSubmit(response.token);
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
const observer = new MutationObserver(() => {
|
|
if (document.getElementById("input2factor")) {
|
|
tryAutofill();
|
|
}
|
|
});
|
|
|
|
observer.observe(document.body, {
|
|
childList: true,
|
|
subtree: true
|
|
});
|
|
|
|
api.runtime.onMessage.addListener((request) => {
|
|
if (request.action === "autofill") {
|
|
fillAndSubmit(request.code);
|
|
}
|
|
});
|
|
|
|
tryAutofill();
|
|
})(); |