Loading src/admin.cpp +33 −0 Changes for src/admin.cpp: 33 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <iostream> #include <fstream> #include <cstring> #include <set> #include <json-c/json.h> #include <json-c/json_object.h> Loading Loading @@ -1079,6 +1080,9 @@ namespace authdb { json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); std::set<std::string> seen_sids; // Local in-memory sessions for (const SessionData *curdat = AuthSession.firstData(); curdat; curdat = curdat->next()) { uuid::uuid sdid; curdat->getDid(sdid); Loading @@ -1088,6 +1092,8 @@ namespace authdb { uuid::uuid sid; curdat->getSid(sid); seen_sids.insert(std::string(sid.c_str())); json_object *jsess = json_object_new_object(); json_object_object_add(jsess, "sid", json_object_new_string(sid.c_str())); json_object_object_add(jsess, "did", json_object_new_string(sdid.c_str())); Loading @@ -1096,6 +1102,28 @@ namespace authdb { } } // Cluster sessions from all nodes (filtered by domain) if (g_Cluster && g_Cluster->isRunning()) { std::vector<Cluster::SessionInfo> csessions; g_Cluster->listAllSessions(csessions); for (const auto &cs : csessions) { std::string sidstr = cs.sid.c_str(); if (seen_sids.count(sidstr)) continue; if ((strcmp(cdid, "admin") == 0 && cs.did.empty()) || (!did.empty() && did == cs.did)) { seen_sids.insert(sidstr); json_object *jsess = json_object_new_object(); json_object_object_add(jsess, "sid", json_object_new_string(cs.sid.c_str())); json_object_object_add(jsess, "did", json_object_new_string(cs.did.c_str())); json_object_object_add(jsess, "username", json_object_new_string(cs.username.c_str())); json_object_array_add(jarr, jsess); } } } json_object_object_add(jobj, "sessions", jarr); sendJson(curreq, jobj); json_object_put(jobj); Loading @@ -1107,6 +1135,11 @@ namespace authdb { sid = csid; AuthSession.remSession(sid); // Also remove from cluster if (g_Cluster && g_Cluster->isRunning()) { g_Cluster->removeSessionBySid(sid); } json_object *jobj = json_object_new_object(); json_object_object_add(jobj, "status", json_object_new_string("ok")); sendJson(curreq, jobj); Loading Loading
src/admin.cpp +33 −0 Changes for src/admin.cpp: 33 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include <iostream> #include <fstream> #include <cstring> #include <set> #include <json-c/json.h> #include <json-c/json_object.h> Loading Loading @@ -1079,6 +1080,9 @@ namespace authdb { json_object *jobj = json_object_new_object(); json_object *jarr = json_object_new_array(); std::set<std::string> seen_sids; // Local in-memory sessions for (const SessionData *curdat = AuthSession.firstData(); curdat; curdat = curdat->next()) { uuid::uuid sdid; curdat->getDid(sdid); Loading @@ -1088,6 +1092,8 @@ namespace authdb { uuid::uuid sid; curdat->getSid(sid); seen_sids.insert(std::string(sid.c_str())); json_object *jsess = json_object_new_object(); json_object_object_add(jsess, "sid", json_object_new_string(sid.c_str())); json_object_object_add(jsess, "did", json_object_new_string(sdid.c_str())); Loading @@ -1096,6 +1102,28 @@ namespace authdb { } } // Cluster sessions from all nodes (filtered by domain) if (g_Cluster && g_Cluster->isRunning()) { std::vector<Cluster::SessionInfo> csessions; g_Cluster->listAllSessions(csessions); for (const auto &cs : csessions) { std::string sidstr = cs.sid.c_str(); if (seen_sids.count(sidstr)) continue; if ((strcmp(cdid, "admin") == 0 && cs.did.empty()) || (!did.empty() && did == cs.did)) { seen_sids.insert(sidstr); json_object *jsess = json_object_new_object(); json_object_object_add(jsess, "sid", json_object_new_string(cs.sid.c_str())); json_object_object_add(jsess, "did", json_object_new_string(cs.did.c_str())); json_object_object_add(jsess, "username", json_object_new_string(cs.username.c_str())); json_object_array_add(jarr, jsess); } } } json_object_object_add(jobj, "sessions", jarr); sendJson(curreq, jobj); json_object_put(jobj); Loading @@ -1107,6 +1135,11 @@ namespace authdb { sid = csid; AuthSession.remSession(sid); // Also remove from cluster if (g_Cluster && g_Cluster->isRunning()) { g_Cluster->removeSessionBySid(sid); } json_object *jobj = json_object_new_object(); json_object_object_add(jobj, "status", json_object_new_string("ok")); sendJson(curreq, jobj); Loading