js: code cleanup (eslint)
[gpgme.git] / lang / js / src / index.js
1 /* gpgme.js - Javascript integration for gpgme
2  * Copyright (C) 2018 Bundesamt für Sicherheit in der Informationstechnik
3  *
4  * This file is part of GPGME.
5  *
6  * GPGME is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * GPGME is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, see <http://www.gnu.org/licenses/>.
18  * SPDX-License-Identifier: LGPL-2.1+
19  *
20  * Author(s):
21  *     Maximilian Krambach <mkrambach@intevation.de>
22  */
23
24
25 import { GpgME } from './gpgmejs';
26 import { gpgme_error } from './Errors';
27 import { Connection } from './Connection';
28 import { defaultConf, availableConf } from './Config';
29
30 /**
31  * Initializes a nativeMessaging Connection and returns a GPGMEjs object
32  * @param {Object} config Configuration. See Config.js for available parameters.
33  * Still TODO
34  */
35 function init(config){
36     let _conf = parseconfiguration(config);
37     if (_conf instanceof Error){
38         return Promise.reject(_conf);
39     }
40     return new Promise(function(resolve, reject){
41         let connection = new Connection;
42         connection.checkConnection(false).then(
43             function(result){
44                 if (result === true) {
45                     resolve(new GpgME(_conf));
46                 } else {
47                     reject(gpgme_error('CONN_NO_CONNECT'));
48                 }
49             }, function(){ //unspecific connection error. Should not happen
50                 reject(gpgme_error('CONN_NO_CONNECT'));
51             });
52     });
53 }
54
55 function parseconfiguration(rawconfig = {}){
56     if ( typeof(rawconfig) !== 'object'){
57         return gpgme_error('PARAM_WRONG');
58     }
59     let result_config = {};
60     let conf_keys = Object.keys(rawconfig);
61
62     for (let i=0; i < conf_keys.length; i++){
63
64         if (availableConf.hasOwnProperty(conf_keys[i])){
65             let value = rawconfig[conf_keys[i]];
66             if (availableConf[conf_keys[i]].indexOf(value) < 0){
67                 return gpgme_error('PARAM_WRONG');
68             } else {
69                 result_config[conf_keys[i]] = value;
70             }
71         }
72         else {
73             return gpgme_error('PARAM_WRONG');
74         }
75     }
76     let default_keys = Object.keys(defaultConf);
77     for (let j=0; j < default_keys.length; j++){
78         if (!result_config.hasOwnProperty(default_keys[j])){
79             result_config[default_keys[j]] = defaultConf[default_keys[j]];
80         }
81     }
82     return result_config;
83 }
84
85 export default {
86     init: init
87 };