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);
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;
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) {
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, "'");
#include "../../config.h"
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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.");
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("");
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=\"");