aboutsummaryrefslogtreecommitdiffstats
path: root/lang/js/src/Message.js
blob: 9e7a8835e16c62253151e91fba063a6135f2bff5 (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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/* gpgme.js - Javascript integration for gpgme
 * Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
 *
 * This file is part of GPGME.
 *
 * GPGME is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * GPGME is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this program; if not, see <http://www.gnu.org/licenses/>.
 * SPDX-License-Identifier: LGPL-2.1+
 */
import { permittedOperations } from './permittedOperations'
import { gpgme_error } from './Errors'

export function createMessage(operation){
    if (typeof(operation) !== 'string'){
        return gpgme_error('PARAM_WRONG');
    }
    if (permittedOperations.hasOwnProperty(operation)){
        return new GPGME_Message(operation);
    } else {
        return gpgme_error('MSG_WRONG_OP');
    }
}

/**
 * Prepares a communication request. It checks operations and parameters in
 * ./permittedOperations.
 * @param {String} operation
 */
export class GPGME_Message {
    //TODO getter

    constructor(operation){
        this.operation = operation;
    }

    set operation (op){


    }
    get operation(){
        return this._msg.op;
    }

    /**
     * Sets a parameter for the message. Note that the operation has to be set
     * first, to be able to check if the parameter is permittted
     * @param {String} param Parameter to set
     * @param {any} value Value to set //TODO: Some type checking
     * @returns {Boolean} If the parameter was set successfully
     */
    setParameter(param,value){
        if (!param || typeof(param) !== 'string'){
            return gpgme_error('PARAM_WRONG');
        }
        let po = permittedOperations[this._msg.op];
        if (!po){
            return gpgme_error('MSG_WRONG_OP');
        }
        if (po.required.indexOf(param) >= 0 || po.optional.indexOf(param) >= 0){
            this._msg[param] = value;
            return true;
        }
        return gpgme_error('PARAM_WRONG');
    }

    /**
     * Check if the message has the minimum requirements to be sent, according
     * to the definitions in permittedOperations
     * @returns {Boolean}
     */
    get isComplete(){
        if (!this._msg.op){
            return false;
        }
        let reqParams = permittedOperations[this._msg.op].required;
        for (let i=0; i < reqParams.length; i++){

            if (!this._msg.hasOwnProperty(reqParams[i])){
                console.log(reqParams[i] + 'missing');
                return false;
            }
        }
        return true;
    }

    /**
     * Returns the prepared message with parameters and completeness checked
     * @returns {Object|null} Object to be posted to gnupg, or null if
     * incomplete
     */
    get message(){
        if (this.isComplete === true){
            return this._msg;
        }
        else {
            return null;
        }

    }
}