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

per domain config

parent 4934afa1
Loading
Loading
Loading
Loading
+199 −102

File changed.

Preview size limit exceeded, changes collapsed.

+15 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#include <memory>
#include <map>
#include <mutex>

#include <httppp//httpd.h>

@@ -40,11 +41,20 @@ namespace blogi {

    struct DomainContext {
        std::string                                     domainName;
        std::string                                     prefix;
        std::string                                     startPage;
        std::string                                     siteUrl;
        std::unique_ptr<PluginArgs>                     plgArgs;
        std::unique_ptr<blogi::Plugin>                  plugins;
        libhtmlpp::HtmlPage                             page, mPage;
        libhtmlpp::HtmlElement                          index, mIndex;
        libhtmlpp::HtmlElement                          cookieEl;

        std::string buildurl(const std::string &url) const {
            if (prefix.empty() || prefix == "/")
                return "/" + url;
            return prefix + "/" + url;
        }
    };

    class Blogi : public libhttppp::HttpEvent{
@@ -66,13 +76,16 @@ namespace blogi {
        // Reload SSL certificates at runtime (called after cert renewal)
        static bool reloadSSL(const std::string &certpath, const std::string &keypath, const std::string &password = "");

        // Reload configuration from disk and rebuild domain contexts
        bool reloadConfig();

        static std::unique_ptr<blogi::Config> Cfg;
        static libhttppp::HttpD *HttpServer;
    private:
        void initDomainContext(DomainContext &ctx, const DomainConfig &dcfg, bool debug);
        // Default domain (single-domain backward compat or fallback)
        std::unique_ptr<DomainContext>  _defaultCtx;
        bool _debug = false;
        // Multi-domain contexts keyed by domain name (lowercase)
        std::map<std::string, std::unique_ptr<DomainContext>> _domains;
        std::mutex _domainsMutex;
    };
};
+5 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@

#include "conf.h"

blogi::Config::Config(const std::string &path) : confplus::Config(path){
blogi::Config::Config(const std::string &path) : confplus::Config(path), _ConfigPath(path){
    for(size_t i =0; i<getElements(getKey("/BLOGI/PLUGINDIR")); ++i){
       _PlgDir.push_back(getValue(getKey("/BLOGI/PLUGINDIR"),i));
    }
@@ -354,6 +354,10 @@ const blogi::AuthSource *blogi::Config::findAuthSource(const std::string &domain
    return nullptr;
}

const std::string &blogi::Config::getConfigPath() const{
    return _ConfigPath;
}

const std::string blogi::DomainConfig::buildurl(const std::string &url) const {
    std::stringstream str;
    if (prefix.empty() || prefix == "/")
+2 −2
Original line number Diff line number Diff line
@@ -77,12 +77,11 @@ namespace blogi {
        Config(const std::string &path);
        ~Config();

        const std::string &getConfigPath() const;
        const std::string &getsiteurl() const;
        const std::vector<std::string> &getsiteurls() const;
        const std::string &getprefix() const;

        const std::string &getConfigPath() const;

        const std::string &gettemplate() const;

        const std::string &getstartpage() const;
@@ -123,6 +122,7 @@ namespace blogi {
        const DomainConfig *findDomainConfig(const std::string &hostname) const;

    private:
        std::string               _ConfigPath;
        std::vector<std::string>  _PlgDir;
        std::string               _DBDriver;
        std::string               _DBConnection;