Better handle case when there are multiple forms on the page (#58)
This commit is contained in:
@@ -268,43 +268,47 @@
|
|||||||
* @return The login form
|
* @return The login form
|
||||||
*/
|
*/
|
||||||
function form() {
|
function form() {
|
||||||
var elems = queryAllVisible(document, INPUT_FIELDS, undefined);
|
const elems = queryAllVisible(document, INPUT_FIELDS, undefined);
|
||||||
var forms = [];
|
const forms = [];
|
||||||
for (var i = 0; i < elems.length; i++) {
|
for (let elem of elems) {
|
||||||
var form = elems[i].form;
|
const form = elem.form;
|
||||||
if (form && forms.indexOf(form) < 0) {
|
if (form && forms.indexOf(form) < 0) {
|
||||||
forms.push(form);
|
forms.push(form);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (forms.length == 0) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
if (forms.length == 1) {
|
|
||||||
return forms[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
// If there are multiple forms, try to detect which one is a login form
|
// Try to filter only forms that have some identifying marker
|
||||||
var formProps = [];
|
const markedForms = [];
|
||||||
for (var i = 0; i < forms.length; i++) {
|
for (let form of forms) {
|
||||||
var form = forms[i];
|
const props = [form.id, form.name, form.className, form.action];
|
||||||
var props = [form.id, form.name, form.className];
|
for (let marker of FORM_MARKERS) {
|
||||||
formProps.push(props);
|
for (let prop of props) {
|
||||||
for (var j = 0; j < FORM_MARKERS.length; j++) {
|
|
||||||
var marker = FORM_MARKERS[j];
|
|
||||||
for (var k = 0; k < props.length; k++) {
|
|
||||||
var prop = props[k];
|
|
||||||
if (prop.toLowerCase().indexOf(marker) > -1) {
|
if (prop.toLowerCase().indexOf(marker) > -1) {
|
||||||
return form;
|
markedForms.push(form);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.error(
|
// Try to filter only forms that have a password field
|
||||||
"Unable to detect which of the multiple available forms is the login form. Please submit an issue for browserpass on github, and provide the following list in the details: " +
|
const formsWithPassword = [];
|
||||||
JSON.stringify(formProps)
|
for (let form of markedForms) {
|
||||||
);
|
if (find(PASSWORD_FIELDS, form)) {
|
||||||
return forms[0];
|
formsWithPassword.push(form);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Give up and return the first available form, if any
|
||||||
|
if (formsWithPassword.length > 0) {
|
||||||
|
return formsWithPassword[0];
|
||||||
|
}
|
||||||
|
if (markedForms.length > 0) {
|
||||||
|
return markedForms[0];
|
||||||
|
}
|
||||||
|
if (forms.length > 0) {
|
||||||
|
return forms[0];
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user