From: Nishi Date: Thu, 22 Aug 2024 05:51:35 +0000 (+0000) Subject: kinda works X-Git-Url: https://git.chaotic.ninja/gitweb/nishi/?a=commitdiff_plain;h=929570f437a434d9fdba6713c5982ee376a75db2;p=repoview.git kinda works git-svn-id: file:///raid/svn-personal/repoview/trunk@43 7e8b2a19-8934-dd40-8cb3-db22cdd5a80f --- diff --git a/CGI/theme/modern.c b/CGI/theme/modern.c index e6ba41b..db581f4 100644 --- a/CGI/theme/modern.c +++ b/CGI/theme/modern.c @@ -23,6 +23,7 @@ #include "rv_magick.h" #endif +#include #include #include #include @@ -37,9 +38,17 @@ char* title = NULL; char* desc = NULL; char* page = NULL; char* nav = NULL; +char* logo = NULL; char* grepouser; extern char* user; +bool invalid_char(char c) { + if(c >= '0' && c <= '9') return false; + if(c >= 'a' && c <= 'z') return false; + if(c >= 'A' && c <= 'Z') return false; + if(c == '_' && c == '-' && c == '.') return false; +} + char* url_escape(const char* input) { const char hex[] = "0123456789ABCDEF"; char* r = malloc(1); @@ -272,7 +281,7 @@ void render_page(void) { cbuf[1] = 0; add_data(&page, "Username cannot contain '"); add_data(&page, cbuf); - add_data(&page, "', '#', '\\', and '/'.
"); + add_data(&page, "'.
"); add_data(&page, " \n"); add_data(&page, "\n"); } else if(strcmp(query, "sendsignup") == 0) { @@ -295,7 +304,7 @@ void render_page(void) { bool reject = false; char* name = rv_get_query("username"); for(i = 0; name[i] != 0; i++) { - if(name[i] == REPO_USER_DELIM || name[i] == '#' || name[i] == '\\' || name[i] == '/' || name[i] == ':' || name[i] == '\n' || name[i] == '\r') { + if(name[i] == REPO_USER_DELIM || invalid_char(name[i])) { char cbuf[2]; cbuf[0] = REPO_USER_DELIM; cbuf[1] = 0; @@ -385,8 +394,14 @@ void render_page(void) { add_data(&page, "/?page=login\">log in?\n"); } else { page = rv_strdup(""); - add_data(&page, "

Your Icon

\n"); - add_data(&page, "Your Icon\n"); + add_data(&nav, "
  • Bio
  • \n"); + add_data(&page, "
    \n"); + add_data(&page, "

    Your Icon

    \n"); + add_data(&page, " "); - add_data(&page, "\n"); + add_data(&page, "\" alt=\"Your Icon\" width=\"50%\">
    "); add_data(&page, " \n"); - add_data(&page, " \n"); + add_data(&page, "

    Bio

    \n"); + add_data(&page, " \n"); + add_data(&page, " \n"); add_data(&page, "
    \n"); } #endif #ifdef USE_AVATAR - } else if(strcmp(query, "uploadpfp") == 0) { - title = rv_strdup("Uploading Profile Picture Result"); + } else if(strcmp(query, "upload") == 0) { + title = rv_strdup("Uploading My Page Result"); page = rv_strdup(""); if(user == NULL) { add_data(&page, "It looks like you are not logged in.
    Want to log in?\n"); - } else if(rv_get_multipart("pfp") == NULL) { - add_data(&page, "Invalid Form."); } else { struct multipart_entry* entry = rv_get_multipart("pfp"); - char* tmp = rv_strcat3(AVATAR_ROOT, "/", user); - char* path = rv_strcat(tmp, ".tmp"); - char* outpath = rv_strcat(tmp, ".png"); - free(tmp); - FILE* f = fopen(path, "wb"); - fwrite(entry->data, 1, entry->length, f); - fclose(f); - char* reason; - if(rv_resize_picture(path, outpath, &reason)) { - add_data(&page, "Uploaded the profile picture successfully.\n"); - } else { - add_data(&page, "Failed to upload the profile picture.
    \n"); - char* esc = html_escape(reason); - add_data(&page, esc); - free(esc); - add_data(&page, "\n"); - free(reason); + if(entry != NULL && entry->length > 0) { + char* tmp = rv_strcat3(AVATAR_ROOT, "/", user); + char* path = rv_strcat(tmp, ".tmp"); + char* outpath = rv_strcat(tmp, ".png"); + free(tmp); + FILE* f = fopen(path, "wb"); + fwrite(entry->data, 1, entry->length, f); + fclose(f); + char* reason; + if(rv_resize_picture(path, outpath, &reason)) { + add_data(&page, "Uploaded the profile picture successfully.\n"); + } else { + add_data(&page, "Failed to upload the profile picture.
    \n"); + char* esc = html_escape(reason); + add_data(&page, esc); + free(esc); + add_data(&page, "\n"); + free(reason); + } + free(path); + free(outpath); + } + entry = rv_get_multipart("bio"); + if(entry != NULL) { + char* path = rv_strcat3(BIO_ROOT, "/", user); + FILE* f = fopen(path, "w"); + fwrite(entry->data, 1, entry->length, f); + fclose(f); + free(path); + add_data(&page, "Uploaded the bio successfully.\n"); } - free(path); - free(outpath); } #endif } else if(strcmp(query, "myrepo") == 0) { @@ -469,7 +510,7 @@ void render_page(void) { add_data(&page, " \n"); add_data(&page, "Repository name cannot contain '"); add_data(&page, cbuf); - add_data(&page, "', '#', '\\', and '/'."); + add_data(&page, "'."); add_data(&page, "\n"); add_data(&page, "

    Repository List

    \n"); add_data(&page, "\n"); @@ -493,7 +534,7 @@ void render_page(void) { bool reject = false; char* name = rv_get_query("name"); for(i = 0; name[i] != 0; i++) { - if(name[i] == REPO_USER_DELIM || name[i] == '#' || name[i] == '\\' || name[i] == '/' || name[i] == ':' || name[i] == '\n' || name[i] == '\r') { + if(name[i] == REPO_USER_DELIM || invalid_char(name[i])) { char cbuf[2]; cbuf[0] = REPO_USER_DELIM; cbuf[1] = 0; @@ -657,7 +698,7 @@ void render_page(void) { add_data(&page, esc); free(esc); free(readme); - add_data(&page, " \n"); + add_data(&page, "\n"); add_data(&page, " \n"); add_data(&page, " \n"); add_data(&page, "
    \n"); @@ -732,6 +773,39 @@ void render_page(void) { add_data(&page, "Repository does not exist.
    \n"); } } + } else if(strcmp(query, "person") == 0) { + title = rv_strdup("Person"); + page = rv_strdup(""); + + rv_load_query('Q'); + if(rv_get_query("username") == NULL) { + add_data(&page, "Invalid Form.\n"); + } else { + if(rv_has_user(rv_get_query("username"))) { + add_data(&title, " - "); + add_data(&title, rv_get_query("username")); + char* path = rv_strcat3(BIO_ROOT, "/", rv_get_query("username")); + FILE* f = fopen(path, "r"); + if(f != NULL) { + struct stat s; + stat(path, &s); + char* buf = malloc(s.st_size + 1); + fread(buf, 1, s.st_size, f); + buf[s.st_size] = 0; + + desc = html_escape_nl_to_br(buf); + + char* tmp = rv_strcat3(WWW_AVATAR_ROOT, "/", rv_get_query("username")); + logo = rv_strcat(tmp, ".png"); + free(tmp); + + fclose(f); + } + free(path); + } else { + add_data(&page, "User does not exist.\n"); + } + } } else if(strcmp(query, "sendmanrepo") == 0) { title = rv_strdup("Modifying Repository Result"); page = rv_strdup(""); @@ -786,6 +860,7 @@ freeall: free(desc); free(title); free(nav); + if(logo != NULL) free(logo); } char* escape(const char* str) { @@ -978,7 +1053,24 @@ void render_stuff(void) { add_data(&buffer, " \n"); } if(user != NULL) { - add_data(&buffer, "\n"); add_data(&buffer, "
    \n"); diff --git a/check.c b/check.c index cec7445..e499263 100644 --- a/check.c +++ b/check.c @@ -103,6 +103,10 @@ int check_mypage(void) { #if defined(USE_MYPAGE) && !defined(USE_AVATAR) fprintf(stderr, "USE_MYPAGE is defined, but USE_AVATAR is not defined.\n"); st = 1; +#endif +#if defined(USE_MYPAGE) && !defined(BIO_ROOT) + fprintf(stderr, "USE_MYPAGE is defined, but BIO_ROOT is not defined.\n"); + st = 1; #endif return st; } diff --git a/config.h.tmpl b/config.h.tmpl index d3f7d6e..6b7dc5a 100644 --- a/config.h.tmpl +++ b/config.h.tmpl @@ -80,6 +80,9 @@ /* Avatar filesystem root. */ #define AVATAR_ROOT "/www/avatar" +/* Bio root. */ +#define BIO_ROOT "/www/bio" + /* Subversion root on the HTTP. */ #define WWW_SVN_ROOT "/svn/"