X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/4271ab433cd55bbd2612292bcf39e4dc3d7274f1..0907aa4037b12b6b88ee24495d4577a064d4f8db:/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.h diff --git a/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.h b/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.h new file mode 100644 index 00000000..e7c800d5 --- /dev/null +++ b/projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.h @@ -0,0 +1,118 @@ +#pragma once + +#include "stg/plugin.h" +#include "stg/admin_conf.h" +#include "stg/module_settings.h" +#include "stg/logger.h" + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#define RPC_CONFIG_VERSION "Stargazer RPC v. 0.2" + +namespace STG +{ + +struct Admins; +struct Tariffs; +struct Users; +struct Store; + +} + +class RPC_CONFIG_SETTINGS +{ +public: + RPC_CONFIG_SETTINGS(); + virtual ~RPC_CONFIG_SETTINGS() {} + const std::string & GetStrError() const { return errorStr; } + int ParseSettings(const STG::ModuleSettings & s); + uint16_t GetPort() const { return port; } + double GetCookieTimeout() const { return cookieTimeout; } + +private: + std::string errorStr; + uint16_t port; + double cookieTimeout; +}; + +struct ADMIN_INFO +{ + ADMIN_INFO() + : admin(), + accessTime(0), + priviledges() + {} + + std::string admin; + time_t accessTime; + STG::Priv priviledges; +}; + +class RPC_CONFIG : public STG::Plugin +{ +public: + RPC_CONFIG(); + ~RPC_CONFIG() override; + + void SetUsers(STG::Users * u) override { users = u; } + void SetTariffs(STG::Tariffs * t) override { tariffs = t; } + void SetAdmins(STG::Admins * a) override { admins = a; } + void SetStore(STG::Store * s) override { store = s; } + void SetStgSettings(const STG::Settings * s) override; + void SetSettings(const STG::ModuleSettings & s) override { settings = s; } + int ParseSettings() override; + + int Start() override; + int Stop() override; + int Reload(const STG::ModuleSettings & /*ms*/) override { return 0; } + bool IsRunning() override { return running && !stopped; } + + const std::string & GetStrError() const override { return errorStr; } + std::string GetVersion() const override { return RPC_CONFIG_VERSION; } + uint16_t GetStartPosition() const override { return 20; } + uint16_t GetStopPosition() const override { return 20; } + + bool GetAdminInfo(const std::string & cookie, + ADMIN_INFO * info); + bool CheckAdmin(const std::string & login, + const std::string & password, + std::string * cookie); + bool LogoutAdmin(const std::string & cookie); + +private: + RPC_CONFIG(const RPC_CONFIG & rvalue); + RPC_CONFIG & operator=(const RPC_CONFIG & rvalue); + + static void * Run(void *); + std::string GetCookie() const; + void InitiateRegistry(); + + mutable std::string errorStr; + RPC_CONFIG_SETTINGS rpcConfigSettings; + STG::Users * users; + STG::Admins * admins; + STG::Tariffs * tariffs; + STG::Store * store; + STG::ModuleSettings settings; + int fd; + xmlrpc_c::registry rpcRegistry; + xmlrpc_c::serverAbyss * rpcServer; + bool running; + bool stopped; + pthread_t tid; + std::map cookies; + size_t dayFee; + std::vector dirNames; + STG::PluginLogger logger; +};