#ifndef CONFIG_H #define CONFIG_H #include #include #include #include #include "permissions.h" #include "utils.h" class WikiGeneralConfig { std::string wikiname; std::string anon_username; int max_pagename_length; int query_limit; }; struct ConfigUrls { std::string linkindex; std::string linkrecent; std::string linkallpages; std::string linkallcats; std::string linkshere; std::string linkpage; std::string linkrevision ; std::string linkhistory ; std::string linkedit ; std::string linksettings; std::string linkdelete ; std::string linklogout ; std::string linkcategory; std::string loginurl; std::string linkrecentsort; std::string actionurl; std::string settingsurl; std::string deletionurl; std::string linkhistorysort; std::string adminregisterurl; std::string userchangepwurl; }; class ConfigVariableResolver { private: const std::map *configmap; public: ConfigVariableResolver() { } ConfigVariableResolver(const std::map &configmap) { this->configmap = &configmap; } std::string getConfig(const std::string &key) const { return utils::getKeyOrEmpty(*configmap, key); } }; class Config { private: std::map configmap; std::string required(const std::string &key); std::string optional(const std::string &key, std::string defaultvalue = ""); int optional(const std::string &key, int defaulvalue); uint64_t optional(const std::string &key, uint64_t defaultvalue); public: ConfigUrls urls; ConfigVariableResolver configVarResolver; Config(const std::map &map ); //TODO: these could be references!? std::string wikiname; std::string wikipath; std::string templatepath; std::string templateprefix; std::string logfile; std::string anon_username; std::string connectionstring; int query_limit; int session_max_lifetime; int max_pagename_length; int threadscount; uint64_t max_payload_length; Permissions anon_permissions; }; class ConfigReader { private: std::string path; public: ConfigReader(const std::string &file); Config readConfig(); }; #endif // CONFIG_H