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

test

parent ad19b715
Loading
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -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);
@@ -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);
@@ -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) {
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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;
+13 −0
Original line number Diff line number Diff line
@@ -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){
@@ -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;