diff options
| author | frosty <gabriel@bwaaa.monster> | 2026-03-10 02:32:51 -0400 |
|---|---|---|
| committer | frosty <gabriel@bwaaa.monster> | 2026-03-10 02:32:51 -0400 |
| commit | a11bf8bb6c1baaef51c25d441f5348567280967b (patch) | |
| tree | f7ae4435e157dac9b024af0611fbdfa3ab8870e8 /src/Routes/ImageProxy.c | |
| parent | 24cec7a35072ac50e1fe902a925e69330866dbca (diff) | |
| download | omnisearch-a11bf8bb6c1baaef51c25d441f5348567280967b.tar.gz | |
Diffstat (limited to 'src/Routes/ImageProxy.c')
| -rw-r--r-- | src/Routes/ImageProxy.c | 92 |
1 files changed, 43 insertions, 49 deletions
diff --git a/src/Routes/ImageProxy.c b/src/Routes/ImageProxy.c index 10fbd19..c2d1a9a 100644 --- a/src/Routes/ImageProxy.c +++ b/src/Routes/ImageProxy.c @@ -16,9 +16,9 @@ typedef struct { static int is_allowed_domain(const char *url) { const char *protocol = strstr(url, "://"); if (!protocol) { - protocol = url; + protocol = url; } else { - protocol += 3; + protocol += 3; } const char *path = strchr(protocol, '/'); @@ -26,49 +26,46 @@ static int is_allowed_domain(const char *url) { char host[256] = {0}; if (host_len >= sizeof(host)) { - host_len = sizeof(host) - 1; + host_len = sizeof(host) - 1; } strncpy(host, protocol, host_len); - const char *allowed_domains[] = { - "mm.bing.net", - "th.bing.com", - NULL - }; + const char *allowed_domains[] = {"mm.bing.net", "th.bing.com", NULL}; for (int i = 0; allowed_domains[i] != NULL; i++) { - size_t domain_len = strlen(allowed_domains[i]); - size_t host_str_len = strlen(host); - - if (host_str_len >= domain_len) { - const char *suffix = host + host_str_len - domain_len; - if (strcmp(suffix, allowed_domains[i]) == 0) { - return 1; + size_t domain_len = strlen(allowed_domains[i]); + size_t host_str_len = strlen(host); + + if (host_str_len >= domain_len) { + const char *suffix = host + host_str_len - domain_len; + if (strcmp(suffix, allowed_domains[i]) == 0) { + return 1; + } } } - } return 0; } static size_t write_callback(void *contents, size_t size, size_t nmemb, - void *userp) { + void *userp) { size_t realsize = size * nmemb; MemoryBuffer *buf = (MemoryBuffer *)userp; if (buf->size + realsize > MAX_IMAGE_SIZE) { - return 0; + return 0; } if (buf->size + realsize > buf->capacity) { - size_t new_capacity = buf->capacity * 2; - if (new_capacity < buf->size + realsize) { - new_capacity = buf->size + realsize; - } - char *new_data = realloc(buf->data, new_capacity); - if (!new_data) return 0; - buf->data = new_data; - buf->capacity = new_capacity; + size_t new_capacity = buf->capacity * 2; + if (new_capacity < buf->size + realsize) { + new_capacity = buf->size + realsize; + } + char *new_data = realloc(buf->data, new_capacity); + if (!new_data) + return 0; + buf->data = new_data; + buf->capacity = new_capacity; } memcpy(buf->data + buf->size, contents, realsize); @@ -79,38 +76,34 @@ static size_t write_callback(void *contents, size_t size, size_t nmemb, int image_proxy_handler(UrlParams *params) { const char *url = NULL; for (int i = 0; i < params->count; i++) { - if (strcmp(params->params[i].key, "url") == 0) { - url = params->params[i].value; - break; - } + if (strcmp(params->params[i].key, "url") == 0) { + url = params->params[i].value; + break; + } } if (!url || strlen(url) == 0) { - send_response("Missing 'url' parameter"); - return 0; + send_response("Missing 'url' parameter"); + return 0; } if (!is_allowed_domain(url)) { - send_response("Domain not allowed"); - return 0; + send_response("Domain not allowed"); + return 0; } CURL *curl = curl_easy_init(); if (!curl) { - send_response("Failed to initialize curl"); - return 0; + send_response("Failed to initialize curl"); + return 0; } - MemoryBuffer buf = { - .data = malloc(8192), - .size = 0, - .capacity = 8192 - }; + MemoryBuffer buf = {.data = malloc(8192), .size = 0, .capacity = 8192}; if (!buf.data) { - curl_easy_cleanup(curl); - send_response("Memory allocation failed"); - return 0; + curl_easy_cleanup(curl); + send_response("Memory allocation failed"); + return 0; } curl_easy_setopt(curl, CURLOPT_URL, url); @@ -130,18 +123,19 @@ int image_proxy_handler(UrlParams *params) { char content_type[64] = {0}; if (content_type_ptr) { - strncpy(content_type, content_type_ptr, sizeof(content_type) - 1); + strncpy(content_type, content_type_ptr, sizeof(content_type) - 1); } curl_easy_cleanup(curl); if (res != CURLE_OK || response_code != 200) { - free(buf.data); - send_response("Failed to fetch image"); - return 0; + free(buf.data); + send_response("Failed to fetch image"); + return 0; } - const char *mime_type = strlen(content_type) > 0 ? content_type : "image/jpeg"; + const char *mime_type = + strlen(content_type) > 0 ? content_type : "image/jpeg"; serve_data(buf.data, buf.size, mime_type); free(buf.data); |
