summaryrefslogtreecommitdiffstats
path: root/database/sqlite
diff options
context:
space:
mode:
Diffstat (limited to 'database/sqlite')
-rw-r--r--database/sqlite/edb-sqlite.c45
1 files changed, 42 insertions, 3 deletions
diff --git a/database/sqlite/edb-sqlite.c b/database/sqlite/edb-sqlite.c
index 35c0460..2dd836b 100644
--- a/database/sqlite/edb-sqlite.c
+++ b/database/sqlite/edb-sqlite.c
@@ -1035,7 +1035,7 @@ int eDBadminValidateSession(eurephiaCTX *ctx, char *sesskey) {
res = sqlite_query(ctx,
"SELECT (strftime('%%s',CURRENT_TIMESTAMP)-strftime('%%s',last_action)) > %i"
" FROM eurephia_adminlog"
- " WHERE status = 1"
+ " WHERE status IN (1,2)"
" AND sessionkey = '%q'",
(60 * atoi_nullsafe(defaultValue(eGet_value(ctx->dbc->config,
"eurephiadmin_autologout"),
@@ -1054,7 +1054,7 @@ int eDBadminValidateSession(eurephiaCTX *ctx, char *sesskey) {
if( valid ) {
res = sqlite_query(ctx,
"UPDATE eurephia_adminlog"
- " SET last_action = CURRENT_TIMESTAMP"
+ " SET last_action = CURRENT_TIMESTAMP, status = 2"
" WHERE sessionkey = '%q'", sesskey);
if( res == NULL ) {
eurephia_log(ctx, LOG_ERROR, 0, "Could not register session activity");
@@ -1064,11 +1064,21 @@ int eDBadminValidateSession(eurephiaCTX *ctx, char *sesskey) {
// If not valid, register session as auto-logged out
res = sqlite_query(ctx,
"UPDATE eurephia_adminlog"
- " SET logout = CURRENT_TIMESTAMP, status = 3"
+ " SET logout = CURRENT_TIMESTAMP, status = 4"
" WHERE sessionkey = '%q'", sesskey);
if( res == NULL ) {
eurephia_log(ctx, LOG_ERROR, 0, "Could not register old session as logged out");
}
+
+ // Delete session variables
+ res = sqlite_query(ctx, "DELETE FROM openvpn_sessions WHERE sessionkey = '%q'",
+ sesskey);
+ if( res == NULL ) {
+ eurephia_log(ctx, LOG_ERROR, 0,
+ "Could not delete session variables (%s))", sesskey);
+ return 0;
+ }
+ sqlite_free_results(res);
}
return valid;
@@ -1106,6 +1116,35 @@ int eDBadminRegisterLogin(eurephiaCTX *ctx, eurephiaSESSION *session) {
return 1;
}
+int eDBadminLogout(eurephiaCTX *ctx, eurephiaSESSION *session) {
+ dbresult *res = NULL;
+
+ assert((ctx != NULL) && (session != NULL) && (session->sessionkey != NULL));
+
+ // Update session as logged out
+ res = sqlite_query(ctx,
+ "UPDATE eurephia_adminlog "
+ " SET logout = CURRENT_TIMESTAMP, status = 3"
+ " WHERE sessionkey = '%q'",
+ session->sessionkey);
+ if( !res ) {
+ eurephia_log(ctx, LOG_FATAL, 0, "Could not manage to register the session as logged out");
+ return 0;
+ }
+ sqlite_free_results(res);
+
+ // Delete session variables
+ res = sqlite_query(ctx, "DELETE FROM openvpn_sessions WHERE sessionkey = '%q'", session->sessionkey);
+ if( res == NULL ) {
+ eurephia_log(ctx, LOG_ERROR, 0,
+ "Could not delete session variables (%s))", session->sessionkey);
+ return 0;
+ }
+ sqlite_free_results(res);
+
+ return 1;
+}
+
eurephiaUSERLIST *eDBgetUserList(eurephiaCTX *ctx, const int sortkey) {
return NULL;
}