From: Nishi Date: Wed, 21 Aug 2024 01:12:44 +0000 (+0000) Subject: sqlite works X-Git-Url: https://git.chaotic.ninja/gitweb/nishi/?a=commitdiff_plain;h=ff41a1341a3876460cb4fb22366adf4edccc97d8;p=repoview.git sqlite works git-svn-id: file:///raid/svn-personal/repoview/trunk@7 7e8b2a19-8934-dd40-8cb3-db22cdd5a80f --- diff --git a/CGI/auth/cookie.c b/CGI/auth/cookie.c index 45b9548..04f48d1 100644 --- a/CGI/auth/cookie.c +++ b/CGI/auth/cookie.c @@ -84,6 +84,17 @@ char* rv_logged_in(void) { return NULL; } +void rv_logout(void) { + int i; + for(i = 0; cookie_entries[i] != NULL; i++) { + if(strcmp(cookie_entries[i]->key, "token") == 0) { + printf("Set-Cookie: token=; HttpOnly; Expires=0; SameSite=Strict\r\n"); + rv_remove_token(cookie_entries[i]->value); + break; + } + } +} + void rv_save_login(const char* username) { char* token = rv_new_token(username); printf("Set-Cookie: token=%s; HttpOnly; SameSite=Strict\r\n", token); diff --git a/CGI/db/sqlite.c b/CGI/db/sqlite.c index 2f3ec87..520b727 100644 --- a/CGI/db/sqlite.c +++ b/CGI/db/sqlite.c @@ -135,8 +135,6 @@ int sqlget(void* param, int ncol, char** row, char** col) { char* rv_who_has_token(const char* token) { char* err; - char cbuf[2]; - cbuf[1] = 0; count = 0; char* query = rv_strcat3("select * from tokens where token = '", token, "'"); int ret; @@ -152,11 +150,9 @@ char* rv_who_has_token(const char* token) { bool rv_has_token(const char* token) { char* err; - char cbuf[2]; - cbuf[1] = 0; - count = 0; char* query = rv_strcat3("select * from tokens where token = '", token, "'"); int ret; + count = 0; ret = sqlite3_exec(sql, query, sqlcount, NULL, &err); free(query); if(ret != SQLITE_OK) { @@ -165,10 +161,19 @@ bool rv_has_token(const char* token) { return count > 0; } +void rv_remove_token(const char* token) { + char* err; + char* query = rv_strcat3("delete from tokens where token = '", token, "'"); + int ret; + ret = sqlite3_exec(sql, query, sqlcount, NULL, &err); + free(query); + if(ret != SQLITE_OK) { + sqlite3_free(err); + } +} + bool rv_has_user(const char* username) { char* err; - char cbuf[2]; - cbuf[1] = 0; count = 0; char* esc = escape_sql(username); char* query = rv_strcat3("select * from users where user = '", esc, "'"); diff --git a/CGI/rv_auth.h b/CGI/rv_auth.h index 857b855..b3f81e2 100644 --- a/CGI/rv_auth.h +++ b/CGI/rv_auth.h @@ -9,5 +9,6 @@ char* rv_logged_in(void); void rv_free_auth(void); void rv_init_auth(void); void rv_save_login(const char* username); +void rv_logout(void); #endif diff --git a/CGI/rv_db.h b/CGI/rv_db.h index 1814222..37a68a3 100644 --- a/CGI/rv_db.h +++ b/CGI/rv_db.h @@ -12,5 +12,6 @@ bool rv_check_password(const char* username, const char* password); void rv_save_token(const char* username, const char* token); char* rv_who_has_token(const char* token); bool rv_has_token(const char* token); +void rv_remove_token(const char* token); #endif diff --git a/CGI/theme/modern.c b/CGI/theme/modern.c index 0ed184a..a0461e5 100644 --- a/CGI/theme/modern.c +++ b/CGI/theme/modern.c @@ -9,6 +9,7 @@ #include "../../config.h" +#include #include #include @@ -75,6 +76,17 @@ void render_page(void) { add_data(&page, "User does not exist."); } } + } else if(strcmp(query, "sendlogout") == 0) { + title = rv_strdup("Logout Result"); + page = rv_strdup(""); + if(user == NULL) { + add_data(&page, "You were not logged in.\n"); + } else { + rv_logout(); + add_data(&page, "Goodbye.\n"); + free(user); + user = NULL; + } } else if(strcmp(query, "mypage") == 0) { title = rv_strdup("My Page"); desc = rv_strdup("You manage your information here."); @@ -83,6 +95,22 @@ void render_page(void) { add_data(&page, INSTANCE_ROOT); add_data(&page, "/?page=login\">log in?\n"); } + } else if(strcmp(query, "logout") == 0) { + title = rv_strdup("Logout"); + desc = rv_strdup("You can log out from your account here."); + if(user == NULL) { + page = rv_strdup("It looks like you are not logged in.
Want to log in?\n"); + } else { + page = rv_strdup(""); + add_data(&page, "Are you sure you want to log out?\n"); + add_data(&page, "
\n"); + add_data(&page, " \n"); + add_data(&page, "
\n"); + } } if(title == NULL) title = rv_strdup(""); @@ -244,6 +272,12 @@ void render_stuff(void) { add_data(&buffer, INSTANCE_ROOT); add_data(&buffer, "/?page=login\">Login\n"); add_data(&buffer, " \n"); + } else { + add_data(&buffer, "
\n"); + add_data(&buffer, " Logout\n"); + add_data(&buffer, "
\n"); } if(user != NULL) { add_data(&buffer, "
You have logged in as