summaryrefslogtreecommitdiff
path: root/keys.js
blob: 7cad8aa2ab9e33e39f6d3cb66efaa99cdff0f9fa (plain)
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
72
73
74
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', resp => {
                if (resp.response.action != 'plugin.inbox_keys_import')
                    return;

                location.href =
                    'data:application/pgp-keys;base64,' + btoa(generated.privateKey);
                this.reload(1500);
            });
            this.http_post(
                'plugin.inbox_keys_import',
                {import: true, no_refresh: 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(1500));
            ref.http_post('plugin.inbox_keys_delete', {keys}, lock);
        });
};