gpgme/lang/js/src/Errors.js

149 lines
4.7 KiB
JavaScript
Raw Normal View History

/* 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+
*/
// This is a preliminary collection of erors and warnings to be thrown and implemented.
// general idea: if throw , throw the NAME
// return false || 'return' property
//TODO: Connection.NOCONNECT promise
//connection.timeout: Be aware of pinentry
export class GPGMEJS_Error {
constructor(code = 'GENERIC_ERROR', details){
let config = { //TODO TEMP
debug: 'console', // |'alert'
throw: 'default' // | 'always' | 'never'
};
let errors = { //TODO: someplace else
//Connection errors
'ALREADY_CONNECTED':{
msg: 'The connection was already established. The action would overwrite the context',
throw: true
},
'NO_CONNECT': {
msg:'Connection with the nativeMessaging host could not be established.',
throw: true
},
'EMPTY_GPG_ANSWER':{
msg: 'The nativeMesaging answer was empty',
throw: true
},
'TIMEOUT': {
msg: 'A timeout was exceeded.',
throw: false
},
'UNEXPECTED_ANSWER': {
msg: 'The answer from gnupg was not as expected',
throw: true
},
// Message/Data Errors
'NO_KEYS' : {
msg: 'There were no valid keys provided.',
throw: true
},
'NOT_A_FPR': {
msg: 'The String is not an accepted fingerprint',
throw: false
},
'MSG_INCOMPLETE': {
msg: 'The Message did not match the minimum requirements for the interaction',
throw: true
},
'EMPTY_MSG' : {
msg: 'The Message has no data.',
throw: true
},
'MSG_NODATA':{
msg: 'The data sent is empty. This may be unintentional.',
throw: false
},
'MSG_OP_PENDING': {
msg: 'There is no operation specified yet. The parameter cannot be set',
throw: false
},
'WRONG_OP': {
msg: "The operation requested could not be found",
throw: true
},
//generic errors
'WRONGPARAM':{
msg: 'invalid parameter was found',
throw: true
},
'WRONGTYPE':{
msg: 'invalid parameter type was found',
throw: true
},
'NOT_IMPLEMENTED': {
msg: 'A openpgpjs parameter was submitted that is not implemented',
throw: true
},
'GENERIC_ERROR': {
msg: 'Unspecified error',
throw: true
},
// hopefully temporary errors
'NOT_YET_IMPLEMENTED': {
msg: 'Support of this is probable, but it is not implemented yet',
throw: false
}
}
if (!errors.hasOwnProperty(code)){
throw('GENERIC_ERROR');
}
let msg = code;
if (errors[code].msg !== undefined){
msg = msg + ': ' + errors[code].msg;
}
if (details){
msg = msg + ' ' + details;
}
if (config.debug === 'console'){
console.log(msg);
} else if (config.debug === 'alert'){
alert(msg);
}
switch (config.throw) {
case 'default':
if (errors[code].throw === true){
throw(code);
}
break;
case 'always':
throw(code);
break;
case 'never':
break;
default:
throw('GENERIC_ERROR');
}
}
}