static Response *staticHandler(Request *req) { ROUTE(req, "/static/"); // EXIT ON SHENANIGANS if (strstr(req->uri, "../")) return NULL; char *filename = req->uri + 1; // EXIT ON DIRS struct stat sbuff; if (stat(filename, &sbuff) < 0 || S_ISDIR(sbuff.st_mode)) return NULL; // EXIT ON NOT FOUND FILE *file = fopen(filename, "r"); if (!file) return NULL; // GET LENGTH char *buff; char lens[25]; size_t len; fseek(file, 0, SEEK_END); len = ftell(file); sprintf(lens, "%ld", (long int) len); rewind(file); // SET BODY Response *response = responseNew(); buff = malloc(sizeof(char) * len); fread(buff, sizeof(char), len, file); responseSetBody(response, bsNewLen(buff, len)); fclose(file); free(buff); // MIME TYPE char *mimeType = "text/plain"; len = bsGetLen(req->uri); if (!strncmp(req->uri + len - 4, "html", 4)) mimeType = "text/html"; else if (!strncmp(req->uri + len - 4, "json", 4)) mimeType = "application/json"; else if (!strncmp(req->uri + len - 4, "jpeg", 4)) mimeType = "image/jpeg"; else if (!strncmp(req->uri + len - 3, "jpg", 3)) mimeType = "image/jpeg"; else if (!strncmp(req->uri + len - 3, "gif", 3)) mimeType = "image/gif"; else if (!strncmp(req->uri + len - 3, "png", 3)) mimeType = "image/png"; else if (!strncmp(req->uri + len - 3, "css", 3)) mimeType = "text/css"; else if (!strncmp(req->uri + len - 2, "js", 2)) mimeType = "application/javascript"; // RESPOND responseSetStatus(response, OK); responseAddHeader(response, "Content-Type", mimeType); responseAddHeader(response, "Content-Length", lens); responseAddHeader(response, "Cache-Control", "max-age=2592000"); return response; }
void do_response(Request *req, Response ** response, sqlite3 *db) { if (req->account) { *response = responseNewRedirect("/dashboard"); return; } *response = responseNew(); Template *template = templateNew("../web/public/html/login.html");
Response *responseNewRedirect(char *location) { Response *response = responseNew(); responseSetStatus(response, FOUND); responseAddHeader(response, "Location", location); return response; }