Loading src/admin.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,10 @@ namespace authdb { _DomainResolver = std::move(resolver); } void setDomainCacheEvictor(std::function<void(const char*)> evictor) { _DomainCacheEvictor = std::move(evictor); } /* ---- JSON API: List Users ---- */ void apiListUsers(libhttppp::HttpRequest &curreq, const char *cdid) { AuthBackend *backend = getDomain(cdid); Loading Loading @@ -891,6 +895,10 @@ namespace authdb { Domain domain; domain.remove(_AdminBackend, uuid); // Evict from domain cache so stale backend is not reused if (_DomainCacheEvictor) _DomainCacheEvictor(cdid); json_object *jobj = json_object_new_object(); json_object_object_add(jobj, "status", json_object_new_string("ok")); sendJson(curreq, jobj); Loading Loading @@ -2179,6 +2187,7 @@ namespace authdb { std::shared_ptr<libhtmlpp::HtmlPage> _Loginpage; std::vector<char> _AdminHtml; std::function<AuthBackend*(const char*)> _DomainResolver; std::function<void(const char*)> _DomainCacheEvictor; }; AdminInterface::AdminInterface(AuthBackend &bck, std::vector<netplus::socket*> ssock) : _bck(bck) { Loading @@ -2193,6 +2202,10 @@ namespace authdb { _ctl->setDomainResolver(std::move(resolver)); } void AdminInterface::setDomainCacheEvictor(std::function<void(const char*)> evictor) { _ctl->setDomainCacheEvictor(std::move(evictor)); } void AdminInterface::Request(libhttppp::HttpRequest &curreq, const int tid, ULONG_PTR args) { if (curreq.getRequestURL().compare(0, 9, "/settings", 9) == 0) { _ctl->SettingsController(curreq, tid, args); Loading src/admin.h +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ namespace authdb { ~AdminInterface(); void Request(libhttppp::HttpRequest &curreq, const int tid, ULONG_PTR args); void setDomainResolver(std::function<AuthBackend*(const char*)> resolver); void setDomainCacheEvictor(std::function<void(const char*)> evictor); public: AdminController * _ctl; AuthBackend &_bck; Loading src/authdb.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -114,6 +114,13 @@ namespace authdb { return nullptr; return getDomainBackend(did); }); _AdminInterface.setDomainCacheEvictor([this](const char *cdid) { uuid::uuid did; if (did.parse(cdid) != 0) return; evictDomainCache(did); }); }; void WizzardEvent(libhttppp::HttpRequest &curreq, const int tid, ULONG_PTR args){ Loading Loading @@ -552,6 +559,12 @@ namespace authdb { std::cerr << "[AUTHDB] domain cache warmed: " << dids.size() << " domain(s)" << std::endl; } void evictDomainCache(const ::uuid::uuid &did) { std::unique_lock<std::shared_mutex> wl(_DomainCacheMtx); auto key = std::string(did.value, did.value+16); _DomainCache.erase(key); } private: AuthBackend &_AdminBackend; std::unique_ptr<Session> _Session; Loading Loading
src/admin.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -142,6 +142,10 @@ namespace authdb { _DomainResolver = std::move(resolver); } void setDomainCacheEvictor(std::function<void(const char*)> evictor) { _DomainCacheEvictor = std::move(evictor); } /* ---- JSON API: List Users ---- */ void apiListUsers(libhttppp::HttpRequest &curreq, const char *cdid) { AuthBackend *backend = getDomain(cdid); Loading Loading @@ -891,6 +895,10 @@ namespace authdb { Domain domain; domain.remove(_AdminBackend, uuid); // Evict from domain cache so stale backend is not reused if (_DomainCacheEvictor) _DomainCacheEvictor(cdid); json_object *jobj = json_object_new_object(); json_object_object_add(jobj, "status", json_object_new_string("ok")); sendJson(curreq, jobj); Loading Loading @@ -2179,6 +2187,7 @@ namespace authdb { std::shared_ptr<libhtmlpp::HtmlPage> _Loginpage; std::vector<char> _AdminHtml; std::function<AuthBackend*(const char*)> _DomainResolver; std::function<void(const char*)> _DomainCacheEvictor; }; AdminInterface::AdminInterface(AuthBackend &bck, std::vector<netplus::socket*> ssock) : _bck(bck) { Loading @@ -2193,6 +2202,10 @@ namespace authdb { _ctl->setDomainResolver(std::move(resolver)); } void AdminInterface::setDomainCacheEvictor(std::function<void(const char*)> evictor) { _ctl->setDomainCacheEvictor(std::move(evictor)); } void AdminInterface::Request(libhttppp::HttpRequest &curreq, const int tid, ULONG_PTR args) { if (curreq.getRequestURL().compare(0, 9, "/settings", 9) == 0) { _ctl->SettingsController(curreq, tid, args); Loading
src/admin.h +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ namespace authdb { ~AdminInterface(); void Request(libhttppp::HttpRequest &curreq, const int tid, ULONG_PTR args); void setDomainResolver(std::function<AuthBackend*(const char*)> resolver); void setDomainCacheEvictor(std::function<void(const char*)> evictor); public: AdminController * _ctl; AuthBackend &_bck; Loading
src/authdb.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -114,6 +114,13 @@ namespace authdb { return nullptr; return getDomainBackend(did); }); _AdminInterface.setDomainCacheEvictor([this](const char *cdid) { uuid::uuid did; if (did.parse(cdid) != 0) return; evictDomainCache(did); }); }; void WizzardEvent(libhttppp::HttpRequest &curreq, const int tid, ULONG_PTR args){ Loading Loading @@ -552,6 +559,12 @@ namespace authdb { std::cerr << "[AUTHDB] domain cache warmed: " << dids.size() << " domain(s)" << std::endl; } void evictDomainCache(const ::uuid::uuid &did) { std::unique_lock<std::shared_mutex> wl(_DomainCacheMtx); auto key = std::string(did.value, did.value+16); _DomainCache.erase(key); } private: AuthBackend &_AdminBackend; std::unique_ptr<Session> _Session; Loading