diff options
Diffstat (limited to 'main/src/plugins/openpgp/plugin.vala')
| -rw-r--r-- | main/src/plugins/openpgp/plugin.vala | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/main/src/plugins/openpgp/plugin.vala b/main/src/plugins/openpgp/plugin.vala new file mode 100644 index 00000000..67b94455 --- /dev/null +++ b/main/src/plugins/openpgp/plugin.vala @@ -0,0 +1,47 @@ +using Gee; + +using Dino.Entities; + +namespace Dino.Plugins.OpenPgp { + +public class Plugin : Plugins.RootInterface, Object { + public Dino.Application app; + public Database db; + public HashMap<Account, Module> modules = new HashMap<Account, Module>(Account.hash_func, Account.equals_func); + + private EncryptionListEntry list_entry; + private ContactDetailsProvider contact_details_provider; + + public void registered(Dino.Application app) { + this.app = app; + this.db = new Database(Path.build_filename(Application.get_storage_dir(), "pgp.db")); + this.list_entry = new EncryptionListEntry(app.stream_interactor, db); + this.contact_details_provider = new ContactDetailsProvider(app.stream_interactor); + + app.plugin_registry.register_encryption_list_entry(list_entry); + app.plugin_registry.register_encryption_preferences_entry(new PgpPreferencesEntry(this)); + app.plugin_registry.register_contact_details_entry(contact_details_provider); + app.stream_interactor.module_manager.initialize_account_modules.connect(on_initialize_account_modules); + + Manager.start(app.stream_interactor, db); + app.stream_interactor.get_module(FileManager.IDENTITY).add_file_encryptor(new PgpFileEncryptor(app.stream_interactor)); + app.stream_interactor.get_module(FileManager.IDENTITY).add_file_decryptor(new PgpFileDecryptor()); + JingleFileHelperRegistry.instance.add_encryption_helper(Encryption.PGP, new JingleFileEncryptionHelperTransferOnly()); + } + + public void shutdown() { } + + private void on_initialize_account_modules(Account account, ArrayList<Xmpp.XmppStreamModule> modules) { + string signed_data = ""; + string? sig = db.get_account_signature(account, signed_data); + bool sig_was_unknown = sig == null; + Module module = new Module(db.get_account_key(account), ref signed_data, ref sig); + if (sig_was_unknown && sig != null) { + db.set_account_signature(account, signed_data, sig); + } + this.modules[account] = module; + modules.add(module); + } +} + +} |
