From d10af1037babd3ec4be10f500b6643cf4be6035b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Tue, 7 Jan 2025 07:18:01 +0100 Subject: [PATCH] relay/api: use cjson lib to build JSON body of handshake request --- .../relay/api/remote/relay-remote-network.c | 33 ++++++++++++------- .../api/remote/test-relay-remote-network.cpp | 17 +++++----- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/plugins/relay/api/remote/relay-remote-network.c b/src/plugins/relay/api/remote/relay-remote-network.c index 245092e1a..9b52fde36 100644 --- a/src/plugins/relay/api/remote/relay-remote-network.c +++ b/src/plugins/relay/api/remote/relay-remote-network.c @@ -1385,26 +1385,35 @@ relay_remote_network_url_handshake_cb (const void *pointer, char * relay_remote_network_get_handshake_request () { - char **body; + cJSON *json, *json_algos; + char *result; int i; - body = weechat_string_dyn_alloc (256); - if (!body) + json = cJSON_CreateObject (); + if (!json) return NULL; - weechat_string_dyn_concat (body, "{\"password_hash_algo\": [", -1); + json_algos = cJSON_CreateArray (); + if (!json_algos) + { + cJSON_Delete (json); + return NULL; + } + /* all password hash algorithms are supported */ for (i = 0; i < RELAY_NUM_PASSWORD_HASH_ALGOS; i++) { - if (i > 0) - weechat_string_dyn_concat (body, ", ", -1); - weechat_string_dyn_concat (body, "\"", -1); - weechat_string_dyn_concat (body, - relay_auth_password_hash_algo_name[i], -1); - weechat_string_dyn_concat (body, "\"", -1); + cJSON_AddItemToArray ( + json_algos, + cJSON_CreateString (relay_auth_password_hash_algo_name[i])); } - weechat_string_dyn_concat (body, "]}", -1); - return weechat_string_dyn_free (body, 0); + + cJSON_AddItemToObject (json, "password_hash_algo", json_algos); + result = cJSON_PrintUnformatted (json); + + cJSON_Delete (json); + + return result; } /* diff --git a/tests/unit/plugins/relay/api/remote/test-relay-remote-network.cpp b/tests/unit/plugins/relay/api/remote/test-relay-remote-network.cpp index 0aed215b0..924474c2b 100644 --- a/tests/unit/plugins/relay/api/remote/test-relay-remote-network.cpp +++ b/tests/unit/plugins/relay/api/remote/test-relay-remote-network.cpp @@ -232,17 +232,16 @@ TEST(RelayRemoteNetwork, UrlHandshakeCb) TEST(RelayRemoteNetwork, GetHandshakeRequest) { - const char *str_start = "{\"password_hash_algo\": [\""; char *str; - int i; - str = relay_remote_network_get_handshake_request (); - CHECK(str); - STRNCMP_EQUAL(str_start, str, strlen (str_start)); - for (i = 0; i < RELAY_NUM_PASSWORD_HASH_ALGOS; i++) - { - CHECK(strstr (str, relay_auth_password_hash_algo_name[i])); - } + WEE_TEST_STR("{\"password_hash_algo\":[" + "\"plain\"," + "\"sha256\"," + "\"sha512\"," + "\"pbkdf2+sha256\"," + "\"pbkdf2+sha512\"" + "]}", + relay_remote_network_get_handshake_request ()); } /*