Commit 62de6222 authored by jan.koester's avatar jan.koester
Browse files

test

parent 4020af1e
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -826,6 +826,8 @@ namespace blogi {

        void initPlugin(){
            _mdbUrl = Args->config->getMediaDBUrl();
            _mdbTlsVerify = Args->config->getMediaTlsVerify();
            _mdbTrustPolicy.verifyPeer = _mdbTlsVerify;

            _loadStores(0);

@@ -841,10 +843,10 @@ namespace blogi {
            // the synchronous dispatch path.
            _mdbGetImagePool = std::make_unique<CheckoutPool<mediadb::Client>>(
                static_cast<size_t>(Args->maxthreads),
                [url = _mdbUrl]() { return std::make_unique<mediadb::Client>(url, false, false); });
                [url = _mdbUrl, verify = _mdbTlsVerify]() { return std::make_unique<mediadb::Client>(url, verify, false); });
            _mdbStreamPool = std::make_unique<CheckoutPool<libhttppp::HttpClient>>(
                static_cast<size_t>(Args->maxthreads),
                [this]() { return std::make_unique<libhttppp::HttpClient>(*_mdbHttpUrl, 0); });
                [this]() { return std::make_unique<libhttppp::HttpClient>(*_mdbHttpUrl, 0, 60, _mdbTrustPolicy); });

            for (int i = 0; i < Args->maxthreads; ++i)
                _dbAvailableIdx.push_back(i);
@@ -1005,7 +1007,7 @@ namespace blogi {
                    // returning it to the pool for reuse.
                    std::cerr << "media: upstream GetStream failed, retrying with fresh connection" << std::endl;
                    streamClient = CheckoutPool<libhttppp::HttpClient>::Handle(
                        *_mdbStreamPool, std::make_unique<libhttppp::HttpClient>(*_mdbHttpUrl, true));
                        *_mdbStreamPool, std::make_unique<libhttppp::HttpClient>(*_mdbHttpUrl, true, 60, _mdbTrustPolicy));
                    try {
                        dataResPtr = std::make_unique<libhttppp::HttpResponse>(streamClient->GetStream(dataReq));
                    } catch(std::exception &e2) {
@@ -1670,7 +1672,7 @@ namespace blogi {
        void _ensureMdbReady(int tid, const std::string &token = ""){
            if(!_mdb[tid]){
                try {
                    _mdb[tid] = std::make_unique<mediadb::Client>(_mdbUrl, false, false);
                    _mdb[tid] = std::make_unique<mediadb::Client>(_mdbUrl, _mdbTlsVerify, false);
                } catch(std::exception &e) {
                    std::cerr << "media: _ensureMdbReady: new Client failed: " << e.what() << std::endl;
                    throw;
@@ -1683,7 +1685,7 @@ namespace blogi {
                    // Connection broken — recreate client and retry
                    std::cerr << "media: _ensureMdbReady: set_token failed, reconnecting: " << e.what() << std::endl;
                    try {
                        _mdb[tid] = std::make_unique<mediadb::Client>(_mdbUrl, false, false);
                        _mdb[tid] = std::make_unique<mediadb::Client>(_mdbUrl, _mdbTlsVerify, false);
                        _mdb[tid]->set_token(token);
                    } catch(std::exception &e2) {
                        std::cerr << "media: _ensureMdbReady: reconnect failed: " << e2.what() << std::endl;
@@ -1693,7 +1695,7 @@ namespace blogi {
                } catch(...) {
                    std::cerr << "media: _ensureMdbReady: set_token unknown error, reconnecting" << std::endl;
                    try {
                        _mdb[tid] = std::make_unique<mediadb::Client>(_mdbUrl, false, false);
                        _mdb[tid] = std::make_unique<mediadb::Client>(_mdbUrl, _mdbTlsVerify, false);
                        _mdb[tid]->set_token(token);
                    } catch(...) {
                        _mdb[tid].reset();
@@ -1919,6 +1921,11 @@ namespace blogi {
        // ---- member state ----

        std::string _mdbUrl;
        // MEDIA_TLS_VERIFY-controlled; see DomainConfig::mediaTlsVerify. Kept as a member
        // so all mediadb::Client/HttpClient (re)construction sites (initPlugin, the
        // retry-with-fresh-connection path, and _ensureMdbReady) apply the same policy.
        bool _mdbTlsVerify = false;
        netplus::TlsTrustPolicy _mdbTrustPolicy;
        std::vector<std::string> _mdbStores;
        std::map<std::string, std::string> _mdbStoreIds;
        std::vector<std::unique_ptr<mediadb::Client>> _mdb;
+4 −0
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@ blogi::Auth::Auth(std::vector<std::unique_ptr<dbpp::ReplicatedDatabase>> &pcon,c
            authcon.setUrl(src.url);
            authcon.setClientName(src.clientName);
            authcon.setClientSecret(src.clientSecret);
            authcon.setTlsVerify(src.tlsVerify);

            authdb::client::Client clt(authcon);

@@ -105,6 +106,7 @@ void blogi::Auth::_doLogin(const AuthSource &src, const char *username, const ch
    authcon.setUrl(src.url);
    authcon.setClientName(src.clientName);
    authcon.setClientSecret(src.clientSecret);
    authcon.setTlsVerify(src.tlsVerify);

    authdb::client::Client clt(authcon);

@@ -257,6 +259,7 @@ bool blogi::Auth::isLoggedIn(const int tid,const uuid::uuid &authid){
              authcon.setUrl(src.url);
              authcon.setClientName(src.clientName);
              authcon.setClientSecret(src.clientSecret);
              authcon.setTlsVerify(src.tlsVerify);
              authcon.setSessionID(authid);

              std::unique_ptr<authdb::client::Client> clt;
@@ -307,6 +310,7 @@ std::string blogi::Auth::getAuthorId(const int tid, const uuid::uuid &authid) {
            authcon.setUrl(src.url);
            authcon.setClientName(src.clientName);
            authcon.setClientSecret(src.clientSecret);
            authcon.setTlsVerify(src.tlsVerify);
            authcon.setSessionID(authid);

            authdb::client::Client clt(authcon);
+1 −0
Original line number Diff line number Diff line
@@ -1206,6 +1206,7 @@ void blogi::Blogi::logoutPage(libhttppp::HttpRequest &curreq, const int tid, con
    authcon.setUrl(PlgArgs->config->getAuthUrl());
    authcon.setClientName(PlgArgs->config->getClientName());
    authcon.setClientSecret(PlgArgs->config->getClientSecret());
    authcon.setTlsVerify(PlgArgs->config->getAuthTlsVerify());
    authcon.setSessionID(sessid);

    authdb::client::Client clt(authcon);
+19 −0
Original line number Diff line number Diff line
@@ -113,6 +113,10 @@ blogi::Config::Config(const std::string &path) : confplus::Config(path), _Config
            try { dc.authUrl = getValue(getKey((base + "/AUTH_URL").c_str()), 0); } catch(...) {}
            try { dc.clientName = getValue(getKey((base + "/AUTH_CLIENTNAME").c_str()), 0); } catch(...) {}
            try { dc.clientSecret = getValue(getKey((base + "/AUTH_CLIENTSECRET").c_str()), 0); } catch(...) {}
            try {
                std::string v = getValue(getKey((base + "/AUTH_TLS_VERIFY").c_str()), 0);
                dc.authTlsVerify = !(v == "false" || v == "0" || v == "no");
            } catch(...) {}
            try { dc.siteUrl = getValue(getKey((base + "/URL").c_str()), 0); } catch(...) {}
            dc.siteUrls.clear();
            if (!dc.siteUrl.empty()) dc.siteUrls.push_back(dc.siteUrl);
@@ -121,6 +125,10 @@ blogi::Config::Config(const std::string &path) : confplus::Config(path), _Config
            try { dc.templatePath = getValue(getKey((base + "/TEMPLATE").c_str()), 0); } catch(...) {}
            try { dc.startPage = getValue(getKey((base + "/STARTPAGE").c_str()), 0); } catch(...) {}
            try { dc.mediaDBUrl = getValue(getKey((base + "/MEDIA_URL").c_str()), 0); } catch(...) {}
            try {
                std::string v = getValue(getKey((base + "/MEDIA_TLS_VERIFY").c_str()), 0);
                dc.mediaTlsVerify = (v == "true" || v == "1" || v == "yes");
            } catch(...) {}
            try { dc.tmpDir = getValue(getKey((base + "/TMPDIR").c_str()), 0); } catch(...) { dc.tmpDir = "/tmp/blogi"; }

            try {
@@ -140,6 +148,7 @@ blogi::Config::Config(const std::string &path) : confplus::Config(path), _Config
                src.url = dc.authUrl;
                src.clientName = dc.clientName;
                src.clientSecret = dc.clientSecret;
                src.tlsVerify = dc.authTlsVerify;
                src.domain = dc.names[0];
                dc.authSources.push_back(std::move(src));
            }
@@ -162,6 +171,7 @@ void blogi::Config::applyDomain(const DomainConfig &dc){
    _AuthUrl      = dc.authUrl;
    _ClientName   = dc.clientName;
    _ClientSecret = dc.clientSecret;
    _AuthTlsVerify = dc.authTlsVerify;
    _AuthSources  = dc.authSources;
    _HttpUrl      = dc.siteUrl;
    _HttpUrls     = dc.siteUrls;
@@ -172,6 +182,7 @@ void blogi::Config::applyDomain(const DomainConfig &dc){
    _StartPage    = dc.startPage;
    _PlgDir       = dc.plgDirs;
    _MediaDBUrl   = dc.mediaDBUrl;
    _MediaTlsVerify = dc.mediaTlsVerify;
    _TmpDir       = dc.tmpDir;
}

@@ -220,6 +231,10 @@ const std::string & blogi::Config::getClientSecret() const {
    return _ClientSecret;
}

bool blogi::Config::getAuthTlsVerify() const {
    return _AuthTlsVerify;
}

const std::string & blogi::Config::gethttpaddr() const {
    return _HttpBind;
}
@@ -273,6 +288,10 @@ const std::string & blogi::Config::getMediaDBUrl() const{
    return _MediaDBUrl;
}

bool blogi::Config::getMediaTlsVerify() const {
    return _MediaTlsVerify;
}

size_t blogi::Config::getAuthSourceCount() const {
    return _AuthSources.size();
}
+12 −0
Original line number Diff line number Diff line
@@ -44,6 +44,8 @@ namespace blogi {
        std::string clientName;
        std::string clientSecret;
        std::string domain;
        // See DomainConfig::authTlsVerify.
        bool tlsVerify = true;
    };

    struct ReplicaConfig {
@@ -59,6 +61,9 @@ namespace blogi {
        std::string               authUrl;
        std::string               clientName;
        std::string               clientSecret;
        // Peer verification for the authdb connection (AUTH_TLS_VERIFY). Defaults to on;
        // set false for an authdb endpoint reached by bare IP whose cert SAN doesn't cover it.
        bool                      authTlsVerify = true;
        std::vector<AuthSource>   authSources;
        std::string               siteUrl;
        std::vector<std::string>  siteUrls;
@@ -67,6 +72,9 @@ namespace blogi {
        std::string               startPage;
        std::vector<std::string>  plgDirs;
        std::string               mediaDBUrl;
        // Peer verification for the mediadb connection (MEDIA_TLS_VERIFY). Defaults to off,
        // matching mediadb's typical same-host/self-signed deployment.
        bool                      mediaTlsVerify = false;
        std::string               tmpDir;

        const std::string buildurl(const std::string &url) const;
@@ -99,6 +107,7 @@ namespace blogi {
        const std::string &getAuthUrl() const;
        const std::string &getClientName() const;
        const std::string &getClientSecret() const;
        bool               getAuthTlsVerify() const;

        size_t              getAuthSourceCount() const;
        const AuthSource   &getAuthSource(size_t idx) const;
@@ -115,6 +124,7 @@ namespace blogi {
        const std::string &getTmpDir() const;

        const std::string &getMediaDBUrl() const;
        bool               getMediaTlsVerify() const;

        // Multi-domain support
        size_t getDomainCount() const;
@@ -140,6 +150,7 @@ namespace blogi {
        std::string               _AuthUrl;
        std::string               _ClientName;
        std::string               _ClientSecret;
        bool                      _AuthTlsVerify = true;
        std::vector<AuthSource>   _AuthSources;
        std::string               _HttpHost;
        std::string               _HttpBind;
@@ -155,6 +166,7 @@ namespace blogi {
        std::string               _SSLPassword;
        std::string               _TmpDir;
        std::string               _MediaDBUrl;
        bool                      _MediaTlsVerify = false;
        std::vector<DomainConfig> _Domains;
    };

Loading