Example #1
0
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;
}
Example #2
0
Response *responseNewRedirect(char *location)
{
    Response *response = responseNew();

    responseSetStatus(response, FOUND);
    responseAddHeader(response, "Location", location);

    return response;
}
Example #3
0
void responseAddCookie(Response *response, char *key, char *value,
                       char *domain, char *path, int duration)
{
    char cbuff[512];
    char sbuff[100];
    time_t t = time(NULL) + duration;

    strftime(sbuff, 100, "%c GMT", gmtime(&t));
    sprintf(cbuff, "%s=%s; Expires=%s", key, value, sbuff);

    if (domain) {
        sprintf(sbuff, "; Domain=%s", domain);
        strcat(cbuff, sbuff);
    }

    if (path) {
        sprintf(sbuff, "; Path=%s", path);
        strcat(cbuff, sbuff);
    } else {
        strcat(cbuff, "; Path=/");
    }

    responseAddHeader(response, "Set-Cookie", cbuff);
}