From: Maxim Mamontov Date: Tue, 8 Oct 2013 11:51:42 +0000 (+0300) Subject: Added CHG/ADD/DEL_ADMIN parsers. X-Git-Url: https://git.stg.codes/stg.git/commitdiff_plain/a7b9b4dfbeb7d84f1c393f7197b017a1e65192b4 Added CHG/ADD/DEL_ADMIN parsers. --- diff --git a/include/stg/admin_conf.h b/include/stg/admin_conf.h index c13160ee..8b1a988e 100644 --- a/include/stg/admin_conf.h +++ b/include/stg/admin_conf.h @@ -78,7 +78,10 @@ struct ADMIN_CONF //----------------------------------------------------------------------------- struct ADMIN_CONF_RES { - ADMIN_CONF_RES() + ADMIN_CONF_RES(const ADMIN_CONF & conf) + : priv(conf.priv), + login(conf.login), + password(conf.password) {} ADMIN_CONF_RES(const ADMIN_CONF_RES & rhs) : priv(rhs.priv), diff --git a/stglibs/srvconf.lib/Makefile b/stglibs/srvconf.lib/Makefile index 974bf843..09111f1b 100644 --- a/stglibs/srvconf.lib/Makefile +++ b/stglibs/srvconf.lib/Makefile @@ -12,6 +12,9 @@ SRCS = parsers/property.cpp \ parsers/server_info.cpp \ parsers/get_admins.cpp \ parsers/get_admin.cpp \ + parsers/chg_admin.cpp \ + parsers/add_admin.cpp \ + parsers/del_admin.cpp \ parsers/auth_by.cpp \ parsers/check_user.cpp \ parsers/get_user.cpp \ diff --git a/stglibs/srvconf.lib/include/stg/servconf.h b/stglibs/srvconf.lib/include/stg/servconf.h index f893addd..d4ab651c 100644 --- a/stglibs/srvconf.lib/include/stg/servconf.h +++ b/stglibs/srvconf.lib/include/stg/servconf.h @@ -48,7 +48,7 @@ public: int GetAdmins(GET_ADMINS::CALLBACK f, void * data); int GetAdmin(const std::string & login, GET_ADMIN::CALLBACK f, void * data); - int ChgAdmin(const std::string & login, const ADMIN_CONF_RES & conf, CHG_ADMIN::CALLBACK f, void * data); + int ChgAdmin(const ADMIN_CONF_RES & conf, CHG_ADMIN::CALLBACK f, void * data); int AddAdmin(const std::string & login, const ADMIN_CONF & conf, ADD_ADMIN::CALLBACK f, void * data); int DelAdmin(const std::string & login, DEL_ADMIN::CALLBACK f, void * data); diff --git a/stglibs/srvconf.lib/parsers/add_admin.cpp b/stglibs/srvconf.lib/parsers/add_admin.cpp new file mode 100644 index 00000000..786fc1e5 --- /dev/null +++ b/stglibs/srvconf.lib/parsers/add_admin.cpp @@ -0,0 +1,57 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Author : Boris Mikhailenko + * Author : Maxim Mamontov + */ + +#include "add_admin.h" + +#include + +using namespace STG; + +ADD_ADMIN::PARSER::PARSER(CALLBACK f, void * d) + : callback(f), + data(d), + depth(0) +{ +} +//----------------------------------------------------------------------------- +int ADD_ADMIN::PARSER::ParseStart(const char *el, const char **attr) +{ +depth++; +if (depth == 1) + if (strcasecmp(el, "AddAdmin") == 0) + ParseAnswer(el, attr); +return 0; +} +//----------------------------------------------------------------------------- +void ADD_ADMIN::PARSER::ParseEnd(const char *) +{ +depth--; +} +//----------------------------------------------------------------------------- +void ADD_ADMIN::PARSER::ParseAnswer(const char * /*el*/, const char ** attr) +{ +if (!callback) + return; +if (attr && attr[0] && attr[1]) + callback(strcasecmp(attr[1], "ok") == 0, attr[2] && attr[3] ? attr[3] : "", data); +else + callback(false, "Invalid response.", data); +} diff --git a/stglibs/srvconf.lib/parsers/add_admin.h b/stglibs/srvconf.lib/parsers/add_admin.h new file mode 100644 index 00000000..a1349d97 --- /dev/null +++ b/stglibs/srvconf.lib/parsers/add_admin.h @@ -0,0 +1,51 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Author : Maxim Mamontov + */ + +#ifndef __STG_STGLIBS_SRVCONF_PARSER_ADD_ADMIN_H__ +#define __STG_STGLIBS_SRVCONF_PARSER_ADD_ADMIN_H__ + +#include "base.h" + +#include "stg/servconf_types.h" + +namespace STG +{ +namespace ADD_ADMIN +{ + +class PARSER: public STG::PARSER +{ +public: + PARSER(CALLBACK f, void * data); + int ParseStart(const char * el, const char ** attr); + void ParseEnd(const char * el); + +private: + CALLBACK callback; + void * data; + int depth; + + void ParseAnswer(const char * el, const char ** attr); +}; + +} // namespace ADD_ADMIN +} // namespace STG + +#endif diff --git a/stglibs/srvconf.lib/parsers/chg_admin.cpp b/stglibs/srvconf.lib/parsers/chg_admin.cpp new file mode 100644 index 00000000..6edcec1c --- /dev/null +++ b/stglibs/srvconf.lib/parsers/chg_admin.cpp @@ -0,0 +1,71 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Author : Maxim Mamontov + */ + +#include "chg_admin.h" + +#include "stg/admin_conf.h" +#include "stg/common.h" + +#include + +using namespace STG; + +CHG_ADMIN::PARSER::PARSER(CALLBACK f, void * d) + : callback(f), + data(d), + depth(0) +{ +} +//----------------------------------------------------------------------------- +int CHG_ADMIN::PARSER::ParseStart(const char *el, const char **attr) +{ +depth++; +if (depth == 1) + if (strcasecmp(el, "SetAdmin") == 0) + ParseAnswer(el, attr); +return 0; +} +//----------------------------------------------------------------------------- +void CHG_ADMIN::PARSER::ParseEnd(const char *) +{ +depth--; +} +//----------------------------------------------------------------------------- +void CHG_ADMIN::PARSER::ParseAnswer(const char * /*el*/, const char ** attr) +{ +if (!callback) + return; +if (attr && attr[0] && attr[1]) + callback(strcasecmp(attr[1], "ok") == 0, attr[2] && attr[3] ? attr[3] : "", data); +else + callback(false, "Invalid response.", data); +} + +std::string CHG_ADMIN::Serialize(const ADMIN_CONF_RES & conf) +{ +std::string params; +if (!conf.login.empty()) + params += " login=\"" + conf.login.data() + "\""; +if (!conf.password.empty()) + params += " password=\"" + conf.password.data() + "\""; +if (!conf.priv.empty()) + params += " priv=\"" + x2str(conf.priv.data().ToInt()) + "\""; +return params; +} diff --git a/stglibs/srvconf.lib/parsers/chg_admin.h b/stglibs/srvconf.lib/parsers/chg_admin.h new file mode 100644 index 00000000..03da22c3 --- /dev/null +++ b/stglibs/srvconf.lib/parsers/chg_admin.h @@ -0,0 +1,57 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Author : Maxim Mamontov + */ + +#ifndef __STG_STGLIBS_SRVCONF_PARSER_CHG_ADMIN_H__ +#define __STG_STGLIBS_SRVCONF_PARSER_CHG_ADMIN_H__ + +#include "base.h" + +#include "stg/servconf_types.h" + +#include + +struct ADMIN_CONF_RES; + +namespace STG +{ +namespace CHG_ADMIN +{ + +class PARSER: public STG::PARSER +{ +public: + PARSER(CALLBACK f, void * data); + int ParseStart(const char * el, const char ** attr); + void ParseEnd(const char * el); + +private: + CALLBACK callback; + void * data; + int depth; + + void ParseAnswer(const char * el, const char ** attr); +}; + +std::string Serialize(const ADMIN_CONF_RES & conf); + +} // namespace CHG_ADMIN +} // namespace STG + +#endif diff --git a/stglibs/srvconf.lib/parsers/del_admin.cpp b/stglibs/srvconf.lib/parsers/del_admin.cpp new file mode 100644 index 00000000..2357cbc4 --- /dev/null +++ b/stglibs/srvconf.lib/parsers/del_admin.cpp @@ -0,0 +1,57 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Author : Boris Mikhailenko + * Author : Maxim Mamontov + */ + +#include "del_admin.h" + +#include + +using namespace STG; + +DEL_ADMIN::PARSER::PARSER(CALLBACK f, void * d) + : callback(f), + data(d), + depth(0) +{ +} +//----------------------------------------------------------------------------- +int DEL_ADMIN::PARSER::ParseStart(const char *el, const char **attr) +{ +depth++; +if (depth == 1) + if (strcasecmp(el, "DelAdmin") == 0) + ParseAnswer(el, attr); +return 0; +} +//----------------------------------------------------------------------------- +void DEL_ADMIN::PARSER::ParseEnd(const char *) +{ +depth--; +} +//----------------------------------------------------------------------------- +void DEL_ADMIN::PARSER::ParseAnswer(const char * /*el*/, const char ** attr) +{ +if (!callback) + return; +if (attr && attr[0] && attr[1]) + callback(strcasecmp(attr[1], "ok") == 0, attr[2] && attr[3] ? attr[3] : "", data); +else + callback(false, "Invalid response.", data); +} diff --git a/stglibs/srvconf.lib/parsers/del_admin.h b/stglibs/srvconf.lib/parsers/del_admin.h new file mode 100644 index 00000000..ec44ef62 --- /dev/null +++ b/stglibs/srvconf.lib/parsers/del_admin.h @@ -0,0 +1,51 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* + * Author : Maxim Mamontov + */ + +#ifndef __STG_STGLIBS_SRVCONF_PARSER_DEL_ADMIN_H__ +#define __STG_STGLIBS_SRVCONF_PARSER_DEL_ADMIN_H__ + +#include "base.h" + +#include "stg/servconf_types.h" + +namespace STG +{ +namespace DEL_ADMIN +{ + +class PARSER: public STG::PARSER +{ +public: + PARSER(CALLBACK f, void * data); + int ParseStart(const char * el, const char ** attr); + void ParseEnd(const char * el); + +private: + CALLBACK callback; + void * data; + int depth; + + void ParseAnswer(const char * el, const char ** attr); +}; + +} // namespace DEL_ADMIN +} // namespace STG + +#endif diff --git a/stglibs/srvconf.lib/servconf.cpp b/stglibs/srvconf.lib/servconf.cpp index f8d737a0..d2241b0e 100644 --- a/stglibs/srvconf.lib/servconf.cpp +++ b/stglibs/srvconf.lib/servconf.cpp @@ -26,9 +26,9 @@ #include "parsers/get_admins.h" #include "parsers/get_admin.h" -/*#include "parsers/chg_admin.h" +#include "parsers/chg_admin.h" #include "parsers/add_admin.h" -#include "parsers/del_admin.h"*/ +#include "parsers/del_admin.h" #include "parsers/auth_by.h" #include "parsers/check_user.h" @@ -119,9 +119,9 @@ int SERVCONF::GetAdmin(const std::string & login, GET_ADMIN::CALLBACK f, void * return pImpl->Exec("", f, data); } -/*int SERVCONF::ChgAdmin(const std::string & login, const ADMIN_CONF_RES & conf, CHG_ADMIN::CALLBACK f, void * data) +int SERVCONF::ChgAdmin(const ADMIN_CONF_RES & conf, CHG_ADMIN::CALLBACK f, void * data) { -return pImpl->Exec("" + CHG_ADMIN::Serialize(conf) + "", f, data); +return pImpl->Exec("", f, data); } int SERVCONF::AddAdmin(const std::string & login, const ADMIN_CONF & conf, ADD_ADMIN::CALLBACK f, void * data) @@ -129,13 +129,13 @@ int SERVCONF::AddAdmin(const std::string & login, const ADMIN_CONF & conf, ADD_A int res = pImpl->Exec("", f, data); if (res != st_ok) return res; -return pImpl->Exec("" + CHG_ADMIN::Serialize(conf) + "", f, data); +return pImpl->Exec("", f, data); } int SERVCONF::DelAdmin(const std::string & login, DEL_ADMIN::CALLBACK f, void * data) { return pImpl->Exec("", f, data); -}*/ +} // -- Users --