diff options
author | Marius David Wieschollek <passwords.public@mdns.eu> | 2020-12-11 01:39:48 +0300 |
---|---|---|
committer | Marius David Wieschollek <passwords.public@mdns.eu> | 2020-12-11 01:39:48 +0300 |
commit | 4a7c2a381ec6541d479dde6001c27da0eb6c33c4 (patch) | |
tree | 3c7a36561061164797156842d0d4f5cee22a5510 /src/js/Manager/MiningManager.js | |
parent | 266a5f9b3bbc83b5a7ef38f276cc0bab386b2d0f (diff) |
Add password update support
Signed-off-by: Marius David Wieschollek <passwords.public@mdns.eu>
Diffstat (limited to 'src/js/Manager/MiningManager.js')
-rw-r--r-- | src/js/Manager/MiningManager.js | 82 |
1 files changed, 75 insertions, 7 deletions
diff --git a/src/js/Manager/MiningManager.js b/src/js/Manager/MiningManager.js index febc940..ec347ce 100644 --- a/src/js/Manager/MiningManager.js +++ b/src/js/Manager/MiningManager.js @@ -6,9 +6,8 @@ import TabManager from '@js/Manager/TabManager'; import SearchQuery from '@js/Search/Query/SearchQuery'; import SearchIndex from '@js/Search/Index/SearchIndex'; import NotificationService from '@js/Services/NotificationService'; -import ServerRepository from '@js/Repositories/ServerRepository'; -import Setting from 'passwords-client/src/Model/Setting/Setting'; import HiddenFolderHelper from "@js/Helper/HiddenFolderHelper"; +import Url from "url-parse"; class MiningManager { @@ -41,6 +40,13 @@ class MiningManager { .setTaskField('hidden', hidden) .setTaskNew(true); + let basePassword = this.findPossibleUpdate(data); + if(basePassword !== null) { + task.setTaskField('id', basePassword.getId()) + .setTaskField('label', basePassword.getLabel()) + .setTaskNew(false); + } + this.processTask(task); } @@ -57,6 +63,8 @@ class MiningManager { .setFeedback('MiningPasswordDiscarded'); } else if(task.isNew()) { await this.createPassword(task); + } else { + await this.updatePassword(task); } await this._miningQueue.push(task); @@ -76,15 +84,15 @@ class MiningManager { */ async createPassword(task) { let api = await ServerManager.getDefaultApi(), - /** @type PasswordConverter **/ + /** @type {PasswordConverter} **/ converter = api.getInstance('converter.password'), fields = task.getResultFields(), password = converter.fromObject(fields); - if(password.getHidden()) { - let helper = new HiddenFolderHelper(); - password.setFolder(await helper.getHiddenFolderId(api)); - } + if(password.getHidden()) { + let helper = new HiddenFolderHelper(); + password.setFolder(await helper.getHiddenFolderId(api)); + } await api.getPasswordRepository().create(password); SearchIndex.addItem(password); @@ -94,6 +102,37 @@ class MiningManager { } /** + * @param {MiningItem} task + * @return {Promise<void>} + */ + async updatePassword(task) { + let api = await ServerManager.getDefaultApi(), + query = new SearchQuery(), + password = /** @type {EnhancedPassword} **/ query + .where(query.field('id').equals(task.getResultField('id'))) + .execute()[0]; + + password + .setLabel(task.getResultField('label')) + .setUserName(task.getResultField('username')) + .setPassword(task.getResultField('password')) + .setUrl(task.getResultField('url')) + .setHidden(task.getResultField('hidden')); + + if(password.isHidden()) { + let helper = new HiddenFolderHelper(); + password.setFolder(await helper.getHiddenFolderId(api)); + } + + await api.getPasswordRepository().update(password); + SearchIndex.removeItem(password); + SearchIndex.addItem(password); + + task.setAccepted(true) + .setFeedback('MiningPasswordUpdated'); + } + + /** * @param {Object} data * @return {Boolean} */ @@ -141,6 +180,35 @@ class MiningManager { data.user = {value: '', selector: null}; } } + + /** + * + * @param {Object} data + * @returns {(EnhancedPassword|null)} + */ + findPossibleUpdate(data) { + let tab = TabManager.get(); + + let url = Url(tab.url); + if(url.host.length === 0) { + return null; + } + + let query = new SearchQuery(), + items = query + .where( + query.field('username').equals(data.user.value), + query.field('host').contains(url.host) + ) + .type('password') + .hidden(tab.tab.incognito) + .limit(1) + .execute(); + + if(items.length !== 0) { + return items[0]; + } + } } export default new MiningManager();
\ No newline at end of file |