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
diff options
context:
space:
mode:
authorMarius David Wieschollek <passwords.public@mdns.eu>2020-12-11 01:39:48 +0300
committerMarius David Wieschollek <passwords.public@mdns.eu>2020-12-11 01:39:48 +0300
commit4a7c2a381ec6541d479dde6001c27da0eb6c33c4 (patch)
tree3c7a36561061164797156842d0d4f5cee22a5510 /src/js/Manager/MiningManager.js
parent266a5f9b3bbc83b5a7ef38f276cc0bab386b2d0f (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.js82
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