summaryrefslogtreecommitdiffstats
path: root/database/sqlite/edb-sqlite.c
diff options
context:
space:
mode:
Diffstat (limited to 'database/sqlite/edb-sqlite.c')
-rw-r--r--database/sqlite/edb-sqlite.c45
1 files changed, 44 insertions, 1 deletions
diff --git a/database/sqlite/edb-sqlite.c b/database/sqlite/edb-sqlite.c
index c137a3f..35c0460 100644
--- a/database/sqlite/edb-sqlite.c
+++ b/database/sqlite/edb-sqlite.c
@@ -1020,6 +1020,8 @@ int eDBadminAuth(eurephiaCTX *ctx, const char *uname, const char *pwd) {
}
int eDBadminValidateSession(eurephiaCTX *ctx, char *sesskey) {
+ dbresult *res = NULL;
+ int valid = 0;
assert( (ctx != NULL) && (sesskey != NULL) );
@@ -1028,7 +1030,48 @@ int eDBadminValidateSession(eurephiaCTX *ctx, char *sesskey) {
eurephia_log(ctx, LOG_ERROR, 0, "Wrong eurephia context type (0x%04x)", ctx->context_type);
return 0;
}
- return 0;
+
+ // Check if the session is still valid.
+ res = sqlite_query(ctx,
+ "SELECT (strftime('%%s',CURRENT_TIMESTAMP)-strftime('%%s',last_action)) > %i"
+ " FROM eurephia_adminlog"
+ " WHERE status = 1"
+ " AND sessionkey = '%q'",
+ (60 * atoi_nullsafe(defaultValue(eGet_value(ctx->dbc->config,
+ "eurephiadmin_autologout"),
+ "10")
+ )),
+ sesskey);
+ if( (res == NULL) || (sqlite_get_numtuples(res) != 1) ) {
+ eurephia_log(ctx, LOG_FATAL, 0, "Could not validate session");
+ return 0;
+ }
+
+ valid = (atoi_nullsafe(sqlite_get_value(res, 0, 0)) == 0);
+ sqlite_free_results(res);
+
+ // If still valid, update last_action
+ if( valid ) {
+ res = sqlite_query(ctx,
+ "UPDATE eurephia_adminlog"
+ " SET last_action = CURRENT_TIMESTAMP"
+ " WHERE sessionkey = '%q'", sesskey);
+ if( res == NULL ) {
+ eurephia_log(ctx, LOG_ERROR, 0, "Could not register session activity");
+ }
+ sqlite_free_results(res);
+ } else {
+ // If not valid, register session as auto-logged out
+ res = sqlite_query(ctx,
+ "UPDATE eurephia_adminlog"
+ " SET logout = CURRENT_TIMESTAMP, status = 3"
+ " WHERE sessionkey = '%q'", sesskey);
+ if( res == NULL ) {
+ eurephia_log(ctx, LOG_ERROR, 0, "Could not register old session as logged out");
+ }
+ }
+
+ return valid;
}
int eDBadminRegisterLogin(eurephiaCTX *ctx, eurephiaSESSION *session) {