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/js
diff options
context:
space:
mode:
authorMarius David Wieschollek <passwords.public@mdns.eu>2021-03-13 18:54:51 +0300
committerMarius David Wieschollek <passwords.public@mdns.eu>2021-03-13 18:54:51 +0300
commit1c806857b4edffafea26cfa0603dcf39495ee358 (patch)
treec7847ad3dab84a7ad2eedc183e1914097664b3e8 /src/js
parentd17aadcb31ed5960416d341523386b87ff00cbbd (diff)
[#60] Add menu option to open website
[#102] Add menu option to delete passwords Signed-off-by: Marius David Wieschollek <passwords.public@mdns.eu>
Diffstat (limited to 'src/js')
-rw-r--r--src/js/Controller/Password/Delete.js75
-rw-r--r--src/js/Controller/Tab/Create.js24
-rw-r--r--src/js/Manager/ControllerManager.js14
3 files changed, 113 insertions, 0 deletions
diff --git a/src/js/Controller/Password/Delete.js b/src/js/Controller/Password/Delete.js
new file mode 100644
index 0000000..04c8bf6
--- /dev/null
+++ b/src/js/Controller/Password/Delete.js
@@ -0,0 +1,75 @@
+import AbstractController from '@js/Controller/AbstractController';
+import SearchIndex from '@js/Search/Index/SearchIndex';
+import ApiRepository from "@js/Repositories/ApiRepository";
+import ToastService from "@js/Services/ToastService";
+import ErrorManager from "@js/Manager/ErrorManager";
+
+export default class Delete extends AbstractController {
+
+ async execute(message, reply) {
+ let {id} = message.getPayload();
+
+ /** @type {EnhancedPassword} **/
+ let model = SearchIndex.getItem(id);
+
+ if(model !== null && !model.isTrashed()) {
+ SearchIndex.removeItem(model);
+ let api = /** @type {PasswordsClient} **/ await ApiRepository.findById(model.getServer().getId());
+ let repository = /** @type {PasswordRepository} **/ api.getInstance('repository.password');
+ await repository.delete(model);
+
+ reply.setPayload({success: true});
+ if(!model.getHidden()) {
+ this._crateTrashedNotification(repository, model)
+ .catch(ErrorManager.catch);
+ } else {
+ this._restoreOrDelete(repository, model);
+ }
+ } else {
+ reply.setPayload({success: false});
+ }
+ }
+
+ /**
+ *
+ * @param {PasswordRepository} repository
+ * @param {EnhancedPassword} model
+ * @returns {Promise<Boolean>}
+ * @private
+ */
+ async _crateTrashedNotification(repository, model) {
+ let toast = {
+ type : model.getHidden() ? 'warning':'info',
+ message : [`ToastPassword${model.getHidden() ? 'Hidden':''}Trashed`, model.getLabel()],
+ closeable: true,
+ options : {restore: 'ToastPasswordTrashedRestore', close: 'ButtonClose'},
+ ttl : model.getHidden() ? 10:5
+ },
+ response = await ToastService.create(toast);
+
+ if(response === 'restore') {
+ await repository.restore(model);
+ SearchIndex.addItem(model);
+ ToastService
+ .success(['ToastPasswordRestored', model.getLabel()])
+ .catch(ErrorManager.catch);
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ *
+ * @param {PasswordRepository} repository
+ * @param {EnhancedPassword} model
+ * @returns {Promise<void>}
+ * @private
+ */
+ async _restoreOrDelete(repository, model) {
+ if(!await this._crateTrashedNotification(repository, model)) {
+ await repository.delete(model);
+ }
+ }
+} \ No newline at end of file
diff --git a/src/js/Controller/Tab/Create.js b/src/js/Controller/Tab/Create.js
new file mode 100644
index 0000000..a62c2ce
--- /dev/null
+++ b/src/js/Controller/Tab/Create.js
@@ -0,0 +1,24 @@
+import AbstractController from '@js/Controller/AbstractController';
+import SystemService from '@js/Services/SystemService';
+import ErrorManager from '@js/Manager/ErrorManager';
+
+export default class Create extends AbstractController {
+
+ /**
+ *
+ * @param {Message} message
+ * @param {Message} reply
+ */
+ async execute(message, reply) {
+ let api = SystemService.getBrowserApi();
+
+ try {
+ let payload = message.getPayload();
+ await api.tabs.create({url:payload.url});
+ reply.setPayload({success: true});
+ } catch(e) {
+ ErrorManager.logError(e);
+ reply.setPayload({success: false});
+ }
+ }
+} \ No newline at end of file
diff --git a/src/js/Manager/ControllerManager.js b/src/js/Manager/ControllerManager.js
index 61e683a..51e31fa 100644
--- a/src/js/Manager/ControllerManager.js
+++ b/src/js/Manager/ControllerManager.js
@@ -61,6 +61,13 @@ class ControllerManager {
}
);
MessageService.listen(
+ 'password.delete',
+ async (message, reply) => {
+ let module = await import(/* webpackChunkName: "PasswordDelete" */ '@js/Controller/Password/Delete');
+ await this._executeController(module, message, reply);
+ }
+ );
+ MessageService.listen(
'folder.list',
async (message, reply) => {
let module = await import(/* webpackChunkName: "FolderList" */ '@js/Controller/Folder/List');
@@ -292,6 +299,13 @@ class ControllerManager {
}
);
MessageService.listen(
+ 'tab.create',
+ async (message, reply) => {
+ let module = await import(/* webpackChunkName: "TabCreate" */ '@js/Controller/Tab/Create');
+ await this._executeController(module, message, reply);
+ }
+ );
+ MessageService.listen(
'popup.debug.form.fields',
async (message, reply) => {
let module = await import(/* webpackChunkName: "PopupDebugLoginForms" */ '@js/Controller/Popup/DebugLoginForms');