json: Add proper decrypt_result_t handling

* src/gpgme-json.c (recipient_to_json, decrypt_result_to_json):
New.
(op_decrypt, hlp_decrypt): Update.

--
The op_decrypt as one of the first operations did not yet
match the current 1 <> 1 mapping of gpgme types to json
dictonaries.

info and dec_info are bad names but used for compatibility reasons.
This commit is contained in:
Andre Heinecke 2018-08-21 14:36:42 +02:00
parent 8103eeba80
commit 263dadb04a
No known key found for this signature in database
GPG Key ID: 2978E9D40CBABA5C

View File

@ -1154,6 +1154,55 @@ verify_result_to_json (gpgme_verify_result_t verify_result)
return result;
}
/* Create a recipient json object */
static cjson_t
recipient_to_json (gpgme_recipient_t recp)
{
cjson_t result = xjson_CreateObject ();
xjson_AddStringToObject0 (result, "keyid", recp->keyid);
xjson_AddStringToObject0 (result, "pubkey_algo_name",
gpgme_pubkey_algo_name (recp->pubkey_algo));
xjson_AddStringToObject0 (result, "status_string",
gpgme_strerror (recp->status));
xjson_AddNumberToObject (result, "status_code", recp->status);
return result;
}
/* Create a JSON object from a gpgme_decrypt result */
static cjson_t
decrypt_result_to_json (gpgme_decrypt_result_t decrypt_result)
{
cjson_t result = xjson_CreateObject ();
xjson_AddStringToObject0 (result, "file_name", decrypt_result->file_name);
xjson_AddStringToObject0 (result, "symkey_algo",
decrypt_result->symkey_algo);
xjson_AddBoolToObject (result, "wrong_key_usage",
decrypt_result->wrong_key_usage);
xjson_AddBoolToObject (result, "is_de_vs",
decrypt_result->is_de_vs);
xjson_AddBoolToObject (result, "is_mime", decrypt_result->is_mime);
xjson_AddBoolToObject (result, "legacy_cipher_nomdc",
decrypt_result->legacy_cipher_nomdc);
if (decrypt_result->recipients)
{
cjson_t array = xjson_CreateArray ();
gpgme_recipient_t recp;
for (recp = decrypt_result->recipients; recp; recp = recp->next)
cJSON_AddItemToArray (array, recipient_to_json (recp));
xjson_AddItemToObject (result, "recipients", array);
}
return result;
}
/* Create a JSON object from an engine_info */
static cjson_t
@ -1740,10 +1789,31 @@ static const char hlp_decrypt[] =
"type: \"plaintext\"\n"
"data: The decrypted data. This may be base64 encoded.\n"
"base64: Boolean indicating whether data is base64 encoded.\n"
"mime: A Boolean indicating whether the data is a MIME object.\n"
"info: An object with verification information. (gpgme_verify_result_t)\n"
" file_name: Optional string of the plaintext file name.\n"
" is_mime: Boolean that is true if the messages claims it is MIME.\n"
"mime: deprecated - use dec_info is_mime instead\n"
"dec_info: An object with decryption information. (gpgme_decrypt_result_t)\n"
" Boolean values:\n"
" wrong_key_usage: Key should not have been used for encryption.\n"
" is_de_vs: Message was encrypted in compliance to the de-vs\n"
" mode.\n"
" is_mime: Message claims that the content is a MIME Message.\n"
" legacy_cipher_nomdc: The message was made by a legacy algorithm\n"
" without integrity protection.\n"
" String values:\n"
" file_name: The filename contained in the decrypt result.\n"
" symkey_algo: A string with the symmetric encryption algorithm and\n"
" mode using the format \"<algo>.<mode>\".\n"
" Array values:\n"
" recipients: The list of recipients (gpgme_recipient_t).\n"
" String values:\n"
" keyid: The keyid of the recipient.\n"
" pubkey_algo_name: gpgme_pubkey_algo_name of used algo.\n"
" status_string: The status code as localized gpg-error string\n"
" Number values:\n"
" status_code: The status as a number. (gpg_error_t)\n"
"info: Optional an object with verification information.\n"
" (gpgme_verify_result_t)\n"
" file_name: The filename contained in the verify result.\n"
" is_mime: The is_mime info contained in the verify result.\n"
" signatures: Array of signatures\n"
" summary: Object containing summary information.\n"
" Boolean values: (Check gpgme_sigsum_t doc for meaning)\n"
@ -1831,6 +1901,9 @@ op_decrypt (cjson_t request, cjson_t result)
if (decrypt_result->is_mime)
xjson_AddBoolToObject (result, "mime", 1);
xjson_AddItemToObject (result, "dec_info",
decrypt_result_to_json (decrypt_result));
verify_result = gpgme_op_verify_result (ctx);
if (verify_result && verify_result->signatures)
{