a54277c242907494e7a1dfb832263bc4d7fa172a
[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
21 import { GpgME } from "./gpgmejs";
22 import { GPGMEJS_Error } from "./Errors";
23 import { GpgME_openpgpmode } from "./gpgmejs_openpgpjs";
24 import { Connection } from "./Connection";
25
26 /**
27  * Initializes a nativeMessaging Connection and returns a GPGMEjs object
28  * @param {*} conf Configuration. TBD
29  */
30 function init( config = {
31     api_style: 'gpgme', //  | gpgme_openpgpjs
32     null_expire_is_never: true // Boolean
33     }){
34         return new Promise(function(resolve, reject){
35             let connection = new Connection;
36             // TODO: Delayed reaction is ugly. We need to listen to the port's
37             // event listener in isConnected, but this takes some time (<5ms) to
38             // disconnect if there is no successfull connection.
39             let delayedreaction = function(){
40                 if (connection.isConnected === true){
41                     let gpgme = null;
42                     if (config.api_style && config.api_style === 'gpgme_openpgpjs'){
43                         resolve(
44                             new GpgME_openpgpmode(connection));
45                     } else {
46                         resolve(new GpgME(connection));
47                     }
48                 } else {
49                     reject(GPGMEJS_Error('CONN_NO_CONNECT'));
50                 }
51             };
52             setTimeout(delayedreaction, 5);
53     });
54 };
55
56 export default {
57     init: init
58 }