Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marius-wieschollek/passwords-webextension.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarius David Wieschollek <passwords.public@mdns.eu>2020-02-16 15:20:57 +0300
committerMarius David Wieschollek <passwords.public@mdns.eu>2020-02-16 15:20:57 +0300
commitff1a41c3fefc5bd1a7b559e3685d57db60dec916 (patch)
tree76350ad3d24162b892eff65dd38cc91276e0082d /src
parentca35912b5c9b7643ff5aac4f751e4f80e4363be3 (diff)
Added more listeners to mine more passwords
Signed-off-by: Marius David Wieschollek <passwords.public@mdns.eu>
Diffstat (limited to 'src')
-rw-r--r--src/js/Manager/MiningManager.js10
-rw-r--r--src/js/Miner/DomMiner.js71
-rw-r--r--src/js/Services/FormService.js22
3 files changed, 76 insertions, 27 deletions
diff --git a/src/js/Manager/MiningManager.js b/src/js/Manager/MiningManager.js
index adb4f66..c68f70b 100644
--- a/src/js/Manager/MiningManager.js
+++ b/src/js/Manager/MiningManager.js
@@ -88,7 +88,7 @@ class MiningManager {
checkIfDuplicate(data) {
let ids = TabManager.get('autofill.ids', []),
query = new SearchQuery(),
- /** @type EnhancedPassword[] **/
+ /** @type {EnhancedPassword[]} **/
items = query
.where(query.field('id').in(ids))
.type('password')
@@ -99,9 +99,13 @@ class MiningManager {
}
/** @type {MiningItem[]}**/
- let miningItems = this._miningQueue.getItems();
- for(let item of miningItems) {
+ items = this._miningQueue.getItems();
+ for(let item of items) {
if(data.password.value === item.getResultField('password')) return true;
+ if(data.user.value === item.getResultField('username')) {
+ item.setTaskField('password', data.password.value);
+ return true;
+ }
}
query = new SearchQuery();
diff --git a/src/js/Miner/DomMiner.js b/src/js/Miner/DomMiner.js
index b2fb7e3..17c3a0c 100644
--- a/src/js/Miner/DomMiner.js
+++ b/src/js/Miner/DomMiner.js
@@ -6,39 +6,64 @@ export default class DomMiner {
init() {
window.addEventListener(
'beforeunload',
- () => {
- this._checkForNewPassword();
- }
+ () => {this._checkForNewPassword();},
+ {passive: true}
);
+
+ let forms = new FormService().getLoginFields();
+ for(let form of forms) {
+ form.form.addEventListener(
+ 'submit',
+ () => {this._checkFormForPassword(form);},
+ {passive: true}
+ );
+
+ if(form.submit) {
+ form.submit.addEventListener(
+ 'click',
+ () => {this._checkFormForPassword(form);},
+ {passive: true}
+ )
+ }
+ }
}
_checkForNewPassword() {
let forms = new FormService().getLoginFields();
for(let form of forms) {
- if(form.pass.value.length !== 0) {
- let info = {
- url : this._getUrl(),
- title : this._getTitle(),
- password: {
- selector: this._getFieldSelector(form.pass),
- value : form.pass.value
- }
- };
+ this._checkFormForPassword(form);
+ }
+ }
- if(form.user) {
- info.user = {
- selector: this._getFieldSelector(form.user),
- value : form.user.value
- };
+ /**
+ *
+ * @param {{form: HTMLFormElement, user: HTMLInputElement, pass: HTMLInputElement}} form
+ * @private
+ */
+ _checkFormForPassword(form) {
+ if(form.pass.value.length !== 0) {
+ let info = {
+ url : this._getUrl(),
+ title : this._getTitle(),
+ password: {
+ selector: this._getFieldSelector(form.pass),
+ value : form.pass.value
}
+ };
- MessageService.send(
- {
- type : 'password.mine',
- payload: info
- }
- );
+ if(form.user) {
+ info.user = {
+ selector: this._getFieldSelector(form.user),
+ value : form.user.value
+ };
}
+
+ MessageService.send(
+ {
+ type : 'password.mine',
+ payload: info
+ }
+ );
}
}
diff --git a/src/js/Services/FormService.js b/src/js/Services/FormService.js
index 3cbdda3..988391b 100644
--- a/src/js/Services/FormService.js
+++ b/src/js/Services/FormService.js
@@ -12,6 +12,11 @@ export default class FormService {
return results;
}
+ /**
+ *
+ * @param {Node} el
+ * @return {(HTMLFormElement|void)}
+ */
getParentForm(el) {
while(el.parentNode) {
if(el.parentNode.nodeName.toLowerCase() === 'form') {
@@ -32,6 +37,10 @@ export default class FormService {
return style.display !== 'none' && style.visibility !== 'hidden' && style.opacity !== '0';
}
+ /**
+ *
+ * @return {[]}
+ */
getLoginFields() {
let fieldPairs = [],
passwords = this.getPasswordFields(),
@@ -79,19 +88,30 @@ export default class FormService {
return fieldPairs;
}
+ /**
+ *
+ * @param {HTMLInputElement} field
+ * @return {Boolean}
+ */
isQualifiedField(field) {
return !field.readOnly && !field.disabled && ['text', 'email', 'tel', 'submit'].indexOf(field.type) !== -1;
}
+ /**
+ *
+ * @param {HTMLInputElement} field
+ * @return {Boolean}
+ */
isUserNameField(field) {
if(field.type === 'email') return true;
let search = ['user', 'login', 'email'],
+ pl = field.placeholder.toLowerCase(),
name = field.name.toLowerCase(),
id = field.id.toLowerCase();
for(let i = 0; i < search.length; i++) {
- if(name.indexOf(search[i]) !== -1 || id.indexOf(search[i]) !== -1) return true;
+ if(name.indexOf(search[i]) !== -1 || id.indexOf(search[i]) !== -1 || pl.indexOf(search[i]) !== -1) return true;
}
return false;