1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
window.rcmail && window.rcmail.addEventListener('init', function() {
if (rcmail.env.task === 'settings'
&& rcmail.env.action === 'plugin.inbox_keys') {
if (rcmail.gui_objects.keyslist) {
rcmail.inbox_keys_list = new rcube_list_widget(
rcmail.gui_objects.keyslist,
{multiselect: true, draggable: false, keyboard: true});
rcmail.inbox_keys_list
.addEventListener('select', list => rcmail.inbox_keys_select(list))
.addEventListener('keypress',
list => rcmail.list_keypress(list, {del: 'plugin.inbox_keys_delete'}))
.init()
.focus();
}
rcmail.register_command('plugin.inbox_keys_generate', () => rcmail.inbox_keys_generate(), true);
rcmail.register_command('plugin.inbox_keys_import', () => rcmail.inbox_keys_import(), true);
rcmail.register_command('plugin.inbox_keys_delete', () => rcmail.inbox_keys_delete(), false);
}
});
rcube_webmail.prototype.inbox_keys_select = function(list) {
this.enable_command('plugin.inbox_keys_delete', list.get_selection().length > 0);
};
rcube_webmail.prototype.inbox_keys_generate = function() {
// TODO: passphrase prompt
var comment = 'Generated ' + (new Date()).toLocaleDateString();
var generating_message = this.display_message(
this.get_label('inbox_settings.generating_key'), 'loading');
openpgp.generateKey(
{
type: 'ecc',
curve: 'curve25519',
userIDs: this.env.userIDs.map(
identity => ({name: identity.name, email: identity.email})),
format: 'armored'
}).then(generated => {
this.hide_message(generating_message);
var lock = this.display_message(
this.get_label('inbox_settings.importing_key'), 'loading');
this.addEventListener('responseafter', () => {
location.href =
'data:application/pgp-keys;base64,' + btoa(generated.privateKey);
this.reload(2000);
});
this.http_post(
'plugin.inbox_keys_import',
{import: true, key_data: generated.publicKey, comment},
lock);
});
};
rcube_webmail.prototype.inbox_keys_import = function() {
this.goto_url('plugin.inbox_keys_import');
};
rcube_webmail.prototype.inbox_keys_delete = function() {
var keys = this.inbox_keys_list.get_selection();
if (!keys.length) return;
this.confirm_dialog(
this.get_label('inbox_settings.confirm_delete_key'),
'delete',
function(_evt, ref) {
var lock = ref.display_message(
ref.get_label('inbox_settings.deleting_key', 'loading'));
ref.addEventListener('responseafter', () => ref.reload(2000));
ref.http_post('plugin.inbox_keys_delete', {keys}, lock);
});
};
|