]> Git repositories of Nishi - repoview.git/commitdiff
sqlite works
authorNishi <nishi@nishi.boats>
Wed, 21 Aug 2024 01:12:44 +0000 (01:12 +0000)
committerNishi <nishi@nishi.boats>
Wed, 21 Aug 2024 01:12:44 +0000 (01:12 +0000)
git-svn-id: file:///raid/svn-personal/repoview/trunk@7 7e8b2a19-8934-dd40-8cb3-db22cdd5a80f

CGI/auth/cookie.c
CGI/db/sqlite.c
CGI/rv_auth.h
CGI/rv_db.h
CGI/theme/modern.c

index 45b9548bba601a967a34be7deca5c455104221cd..04f48d128666671d95b1f7d9135b4e5e1780f6ee 100644 (file)
@@ -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);
index 2f3ec87ee1ec1afb502587f840a83cc4cfbbd53f..520b72781a4fed58771178dadd0a2531226c3e8a 100644 (file)
@@ -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, "'");
index 857b855d2d409f6b21ba60a0238b90b3e06857f1..b3f81e221fc2a5e818a35aad3acde8d8d6423c36 100644 (file)
@@ -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
index 181422232909901491067ae3007fa6e26698870a..37a68a3067f67f7ae9f31b9bd19f100521f71fce 100644 (file)
@@ -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
index 0ed184a6200c66d0613f17c94f4a19b8d84efc81..a0461e553652b73dea347f269062c5da6dfd3dd4 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "../../config.h"
 
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -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</a>?\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.<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, "Are you sure you want to log out?\n");
+                       add_data(&page, "<form method=\"POST\" action=\"");
+                       add_data(&page, INSTANCE_ROOT);
+                       add_data(&page, "/?page=sendlogout\">\n");
+                       add_data(&page, "       <input type=\"submit\" value=\"Yes\">\n");
+                       add_data(&page, "</form>\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</a>\n");
                add_data(&buffer, "                     </div>\n");
+       } else {
+               add_data(&buffer, "                     <div>\n");
+               add_data(&buffer, "                             <a href=\"");
+               add_data(&buffer, INSTANCE_ROOT);
+               add_data(&buffer, "/?page=logout\">Logout</a>\n");
+               add_data(&buffer, "                     </div>\n");
        }
        if(user != NULL) {
                add_data(&buffer, "<div style=\"float: right;font-size: 10px;padding-top: 36px;padding-right: 0;font-style: italic;\">You have logged in as <a href=\"");