diff options
author | Marius David Wieschollek <passwords.public@mdns.eu> | 2020-02-16 15:20:57 +0300 |
---|---|---|
committer | Marius David Wieschollek <passwords.public@mdns.eu> | 2020-02-16 15:20:57 +0300 |
commit | ff1a41c3fefc5bd1a7b559e3685d57db60dec916 (patch) | |
tree | 76350ad3d24162b892eff65dd38cc91276e0082d /src | |
parent | ca35912b5c9b7643ff5aac4f751e4f80e4363be3 (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.js | 10 | ||||
-rw-r--r-- | src/js/Miner/DomMiner.js | 71 | ||||
-rw-r--r-- | src/js/Services/FormService.js | 22 |
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; |