]> Git repositories of Nishi - repoview.git/commitdiff
trying to add multipart
authorNishi <nishi@nishi.boats>
Thu, 22 Aug 2024 03:38:21 +0000 (03:38 +0000)
committerNishi <nishi@nishi.boats>
Thu, 22 Aug 2024 03:38:21 +0000 (03:38 +0000)
git-svn-id: file:///raid/svn-personal/repoview/trunk@39 7e8b2a19-8934-dd40-8cb3-db22cdd5a80f

CGI/main.c
CGI/theme/modern.c

index 8cf9f8ea0f35d6c86a58f6e7ab6b5bccae2b552d..f1b2803c1e14af4cdec0ed00e8c4661ee58e601f 100644 (file)
@@ -12,6 +12,7 @@
 #include "rv_auth.h"
 
 #include <stdlib.h>
+#include <string.h>
 #include <time.h>
 
 char* postdata;
@@ -24,26 +25,59 @@ int main() {
        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);
 }
index ac01979213d5f468e7d18adac6805eef4be08fe6..df0bd9bc73a21e526b0e1bd23048909c708bfe27 100644 (file)
 #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);
@@ -208,11 +213,27 @@ void list_files(const char* pathname) {
        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 ".");
@@ -356,6 +377,24 @@ void render_page(void) {
                        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) {
@@ -694,6 +733,11 @@ void render_page(void) {
        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);