#include "rv_auth.h"
#include <stdlib.h>
+#include <string.h>
#include <time.h>
char* postdata;
rv_save_query('Q');
postdata = malloc(1);
postdata[0] = 0;
- char cbuf[2];
- cbuf[1] = 0;
- while(1) {
- fread(cbuf, 1, 1, stdin);
- if(feof(stdin)) break;
- char* tmp = postdata;
- postdata = rv_strcat(tmp, cbuf);
- free(tmp);
+ int hasauth = 0;
+ char* type = getenv("CONTENT_TYPE");
+ if(type == NULL) {
+ type = rv_strdup("");
+ } else {
+ type = rv_strdup(type);
+ }
+ if(strcmp(type, "application/x-www-form-urlencoded") == 0) {
+ char cbuf[2];
+ cbuf[1] = 0;
+ while(1) {
+ fread(cbuf, 1, 1, stdin);
+ if(feof(stdin)) break;
+ char* tmp = postdata;
+ postdata = rv_strcat(tmp, cbuf);
+ free(tmp);
+ }
+ } else {
+ int i;
+ for(i = 0; type[i] != 0; i++) {
+ if(type[i] == ';') {
+ type[i] = 0;
+ i++;
+ bool found = false;
+ rv_error_http();
+ for(; type[i] != 0; i++) {
+ if(type[i] != ' ' && type[i] != '\t') {
+ printf("%s\n", type + i);
+ break;
+ }
+ }
+ if(!found) {
+ printf("Bad multipart/form-data. Parsing fail.");
+ goto freeall;
+ }
+ break;
+ }
+ }
}
rv_parse_query(postdata);
rv_save_query('P');
rv_init_auth();
+ hasauth = 1;
rv_process_page();
printf("Content-Type: text/html\r\n");
printf("\r\n");
rv_print_page();
- rv_load_query('Q');
- rv_free_query();
rv_load_query('P');
rv_free_query();
+freeall:
+ rv_load_query('Q');
+ rv_free_query();
rv_close_db();
- rv_free_auth();
+ if(hasauth) rv_free_auth();
+ free(type);
}
#include "rv_enscript.h"
#endif
+#ifdef USE_AVATAR
+#include "rv_avatar.h"
+#endif
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
extern char* buffer;
void add_data(char** data, const char* txt);
free(urlpath);
}
+void generate_avatar(void) {
+ if(user != NULL) {
+ char* tmp = rv_strcat3(AVATAR_ROOT, "/", user);
+ char* path = rv_strcat(tmp, ".png");
+ free(tmp);
+ if(access(path, F_OK) != 0) {
+ rv_avatar_generate(path, user);
+ }
+ free(path);
+ }
+}
+
void render_page(void) {
rv_load_query('Q');
char* query = rv_get_query("page");
if(query == NULL) query = "welcome";
+#ifdef USE_AVATAR
+ generate_avatar();
+#endif
+
if(strcmp(query, "welcome") == 0) {
title = rv_strdup("Welcome");
desc = rv_strdup("Welcome to " INSTANCE_NAME ".");
page = rv_strdup("It looks like you are not logged in.<br>Want to <a href=\"");
add_data(&page, INSTANCE_ROOT);
add_data(&page, "/?page=login\">log in</a>?\n");
+ } else {
+ page = rv_strdup("");
+ add_data(&page, "<h2 id=\"youricon\">Your Icon</h2>\n");
+ add_data(&page, "<a href=\"");
+ add_data(&page, WWW_AVATAR_ROOT);
+ add_data(&page, "/");
+ add_data(&page, user);
+ add_data(&page, ".png\"><img src=\"");
+ add_data(&page, WWW_AVATAR_ROOT);
+ add_data(&page, "/");
+ add_data(&page, user);
+ add_data(&page, ".png\" alt=\"Your Icon\"></a>");
+ add_data(&page, "<form action=\"");
+ add_data(&page, INSTANCE_ROOT);
+ add_data(&page, "/?page=uploadpfp\" method=\"POST\" enctype=\"multipart/form-data\">\n");
+ add_data(&page, " <input type=\"file\" name=\"pfp\">\n");
+ add_data(&page, " <input type=\"submit\" value=\"Upload\">\n");
+ add_data(&page, "</form>\n");
}
#endif
} else if(strcmp(query, "myrepo") == 0) {
if(desc == NULL) desc = rv_strdup("");
if(page == NULL) page = rv_strdup("");
if(nav == NULL) nav = rv_strdup("");
+
+#ifdef USE_AVATAR
+ generate_avatar();
+#endif
+
render_stuff();
freeall:
free(page);