aboutsummaryrefslogtreecommitdiff
path: root/src/Routes/ImageProxy.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Routes/ImageProxy.c')
-rw-r--r--src/Routes/ImageProxy.c92
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);