diff options
| author | Jesper Jensen <jesper@jnsn.dev> | 2026-02-18 18:34:02 +0100 |
|---|---|---|
| committer | Jesper Jensen <jesper@jnsn.dev> | 2026-02-18 18:34:02 +0100 |
| commit | 5fbbd990d6b42f5e7534cdb68fa5c368a4a69169 (patch) | |
| tree | 3db3b955fcceb71fbb8ea161643a3a1044b2e4f2 /test/http.c | |
| parent | 78745e06f4a4365e9caa8ee12fb0d9e15fb59300 (diff) | |
Generate secrets for clients
Diffstat (limited to 'test/http.c')
| -rw-r--r-- | test/http.c | 68 |
1 files changed, 58 insertions, 10 deletions
diff --git a/test/http.c b/test/http.c index fa7755d..8309d5e 100644 --- a/test/http.c +++ b/test/http.c @@ -6,6 +6,7 @@ #include <curl/curl.h> #include <stdlib.h> #include <string.h> +#include <cjson/cJSON.h> // @PASTE Stolen from libcurl documentation struct memory { @@ -83,6 +84,7 @@ int main(int argc, char **argv) { } + char client_secret[CLIENT_SECRET_LEN] = {0}; { curlRes = curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/api/client"); assert(curlRes == CURLE_OK); @@ -124,12 +126,18 @@ int main(int argc, char **argv) { assert(strcmp(ct, "application/json") == 0); assert(body.size >= 0); - assert(strcmp( - body.body, - "{ " - "\"id\": \"1\" " - "}" - ) == 0); + // Parse response to extract secret + cJSON *rootJson = cJSON_ParseWithLength(body.body, body.size); + assert(rootJson != NULL); + cJSON *idJson = cJSON_GetObjectItemCaseSensitive(rootJson, "id"); + assert(cJSON_IsString(idJson)); + assert(strcmp(idJson->valuestring, "1") == 0); + cJSON *secretJson = cJSON_GetObjectItemCaseSensitive(rootJson, "secret"); + assert(cJSON_IsString(secretJson)); + assert(strlen(secretJson->valuestring) == 32); + strncpy(client_secret, secretJson->valuestring, CLIENT_SECRET_LEN); + cJSON_Delete(rootJson); + free(body.body); body = (struct memory){0}; } @@ -146,9 +154,11 @@ int main(int argc, char **argv) { curlRes = curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_from_memory); assert(curlRes == CURLE_OK); + char req_buf[256]; + snprintf(req_buf, sizeof(req_buf), "{\"client\": \"client1\", \"secret\": \"%s\", \"event\": \"begin_backup\"}", client_secret); struct memory req_body = { - .body = "{\"client\": \"client1\", \"event\": \"begin_backup\"}", - .size = strlen(req_body.body), + .body = req_buf, + .size = strlen(req_buf), }; curlRes = curl_easy_setopt(curl, CURLOPT_READDATA, &req_body); assert(curlRes == CURLE_OK); @@ -192,9 +202,11 @@ int main(int argc, char **argv) { curlRes = curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_from_memory); assert(curlRes == CURLE_OK); + char req_buf[256]; + snprintf(req_buf, sizeof(req_buf), "{\"client\": \"client1\", \"secret\": \"%s\", \"event\": \"end_backup\"}", client_secret); struct memory req_body = { - .body = "{\"client\": \"client1\", \"event\": \"end_backup\"}", - .size = strlen(req_body.body), + .body = req_buf, + .size = strlen(req_buf), }; curlRes = curl_easy_setopt(curl, CURLOPT_READDATA, &req_body); assert(curlRes == CURLE_OK); @@ -223,5 +235,41 @@ int main(int argc, char **argv) { body = (struct memory){0}; } + // Test: wrong secret should return 401 + { + curlRes = curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/api/report"); + assert(curlRes == CURLE_OK); + + curlRes = curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); + assert(curlRes == CURLE_OK); + + curlRes = curl_easy_setopt(curl, CURLOPT_POST, 1L); + assert(curlRes == CURLE_OK); + + curlRes = curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_from_memory); + assert(curlRes == CURLE_OK); + + struct memory req_body = { + .body = "{\"client\": \"client1\", \"secret\": \"wrongsecret\", \"event\": \"begin_backup\"}", + .size = strlen("{\"client\": \"client1\", \"secret\": \"wrongsecret\", \"event\": \"begin_backup\"}"), + }; + curlRes = curl_easy_setopt(curl, CURLOPT_READDATA, &req_body); + assert(curlRes == CURLE_OK); + + curlRes = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_to_memory); + assert(curlRes == CURLE_OK); + + struct memory body = {0}; + curlRes = curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body); + assert(curlRes == CURLE_OK); + + curlRes = curl_easy_perform(curl); + assert(curlRes == CURLE_OK); + + long code; + curlRes = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &code); + assert(code == 401); // Unauthorized + } + web_join(&server); } |
