Commit fda5af05 authored by jan.koester's avatar jan.koester
Browse files

test

parent c4bb9cb0
Loading
Loading
Loading
Loading
Loading
+33 −0
Changes for src/admin.cpp: 33 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include <iostream>
#include <fstream>
#include <cstring>
#include <set>

#include <json-c/json.h>
#include <json-c/json_object.h>
@@ -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);
@@ -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()));
@@ -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);
@@ -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);