From 1571f3f121e2ae7fd78ad73a700bfe41c6fd4046 Mon Sep 17 00:00:00 2001 From: tokslaw7 Date: Sun, 18 Jun 2023 05:13:54 +0000 Subject: [PATCH] Fix urldecoding on stripe side --- wrenchboard/src/shared_tool/stripe.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/wrenchboard/src/shared_tool/stripe.cc b/wrenchboard/src/shared_tool/stripe.cc index af76a8c9..809a280d 100644 --- a/wrenchboard/src/shared_tool/stripe.cc +++ b/wrenchboard/src/shared_tool/stripe.cc @@ -2,6 +2,9 @@ #include #include +#include +#include + #include #include #include @@ -686,6 +689,14 @@ long stripe_create_customer_parse(char *json, char *id, size_t id_size) return res; } +bool replace(std::string& str, const std::string& from, const std::string& to) { + size_t start_pos = str.find(from); + if(start_pos == std::string::npos) + return false; + str.replace(start_pos, from.length(), to); + return true; +} + /* curl https://api.stripe.com/v1/customers \ -u sk_test_MJYII1vrGGr7RrGw1lhYMiTq: \ @@ -712,9 +723,13 @@ long stripe_create_customer(const char *key, char *token, const char *email, con if(curl) { bzero(post_fields, sizeof(post_fields)); + // Patch email + std::string patched_email = email; + replace(patched_email, "+", "%2B"); // replace all '+' to '%2B' to avoid "urldecoding" on strip side + snprintf(post_fields, sizeof(post_fields), "email=%s&description=%s&metadata[customer_id]=%s&source=%s", - email, description, metadata, token); + patched_email.c_str(), description, metadata, token); /* Now specify the POST data */ curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_fields);