urlencode base64
authorSchanzenbach, Martin <mschanzenbach@posteo.de>
Mon, 1 Oct 2018 15:27:14 +0000 (17:27 +0200)
committerSchanzenbach, Martin <mschanzenbach@posteo.de>
Mon, 1 Oct 2018 15:27:14 +0000 (17:27 +0200)
src/rest-plugins/plugin_rest_openid_connect.c

index 2bcf576fb2847e9a88dd3cfe6c2162ee828c6e44..2e68b7f99d820fed366452e51438154600f8d800 100644 (file)
@@ -648,7 +648,7 @@ return_userinfo_response (void *cls)
 }
 
 /**
- * Returns base64 encoded string without padding
+ * Returns base64 encoded string urlencoded
  *
  * @param string the string to encode
  * @return base64 encoded string
@@ -657,12 +657,27 @@ static char*
 base_64_encode(const char *s)
 {
   char *enc;
+  char *enc_urlencode;
   char *tmp;
+  int i;
+  int num_pads = 0;
 
   GNUNET_STRINGS_base64_encode(s, strlen(s), &enc);
-  tmp = strrchr (enc, '=');
-  *tmp = '\0';
-  return enc;
+  tmp = strchr (enc, '=');
+  num_pads = strlen (enc) - (tmp - enc);
+  GNUNET_assert ((3 > num_pads) && (0 <= num_pads));
+  if (0 == num_pads)
+    return enc;
+  enc_urlencode = GNUNET_malloc (strlen (enc) + num_pads*2);
+  strcpy (enc_urlencode, enc);
+  GNUNET_free (enc);
+  tmp = strchr (enc_urlencode, '=');
+  for (i = 0; i < num_pads; i++)
+  {
+    strcpy (tmp, "%3D"); //replace '=' with '%3D'
+    tmp += 3;
+  }
+  return enc_urlencode;
 }
 
 /**