json: Add sender and file name to encrypt
authorAndre Heinecke <aheinecke@intevation.de>
Thu, 23 Aug 2018 18:49:26 +0000 (20:49 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Thu, 23 Aug 2018 18:50:18 +0000 (20:50 +0200)
* src/gpgme-json.c (hlp_encrypt, op_encrypt): Support sender
and file_name.

src/gpgme-json.c

index d636ddb..9358269 100644 (file)
@@ -1607,6 +1607,8 @@ static const char hlp_encrypt[] =
   "protocol:      Either \"openpgp\" (default) or \"cms\".\n"
   "signing_keys:  Similar to the keys parameter for added signing.\n"
   "               (openpgp only)"
+  "file_name:     The file name associated with the data.\n"
+  "sender:        Sender info to embed in a signature.\n"
   "\n"
   "Optional boolean flags (default is false):\n"
   "base64:        Input data is base64 encoded.\n"
@@ -1634,12 +1636,14 @@ op_encrypt (cjson_t request, cjson_t result)
   char **signing_patterns = NULL;
   int opt_mime;
   char *keystring = NULL;
+  char *file_name = NULL;
   gpgme_data_t input = NULL;
   gpgme_data_t output = NULL;
   int abool;
   gpgme_encrypt_flags_t encrypt_flags = 0;
   gpgme_ctx_t keylist_ctx = NULL;
   gpgme_key_t key = NULL;
+  cjson_t j_tmp = NULL;
 
   if ((err = get_protocol (request, &protocol)))
     goto leave;
@@ -1676,6 +1680,17 @@ op_encrypt (cjson_t request, cjson_t result)
   if (abool)
     encrypt_flags |= GPGME_ENCRYPT_WANT_ADDRESS;
 
+  j_tmp = cJSON_GetObjectItem (request, "file_name");
+  if (j_tmp && cjson_is_string (j_tmp))
+    {
+      file_name = j_tmp->valuestring;
+    }
+
+  j_tmp = cJSON_GetObjectItem (request, "sender");
+  if (j_tmp && cjson_is_string (j_tmp))
+    {
+      gpgme_set_sender (ctx, j_tmp->valuestring);
+    }
 
   /* Get the keys.  */
   err = get_keys (request, "keys", &keystring);
@@ -1724,6 +1739,10 @@ op_encrypt (cjson_t request, cjson_t result)
   if (opt_mime)
     gpgme_data_set_encoding (input, GPGME_DATA_ENCODING_MIME);
 
+  if (file_name)
+    {
+      gpgme_data_set_file_name (input, file_name);
+    }
 
   /* Create an output data object.  */
   err = gpgme_data_new (&output);
@@ -1765,6 +1784,8 @@ op_encrypt (cjson_t request, cjson_t result)
   xfree_array (signing_patterns);
   xfree (keystring);
   release_onetime_context (keylist_ctx);
+  /* Reset sender in case the context is reused */
+  gpgme_set_sender (ctx, NULL);
   gpgme_key_unref (key);
   gpgme_signers_clear (ctx);
   release_context (ctx);