X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/e767204dbf56ac466489c142f0acdaebd5d0b935..0fdb3f546ec7cb206f664f5240ac6ba3e52e8832:/projects/stargazer/plugins/configuration/sgconfig/parser_admin.cpp diff --git a/projects/stargazer/plugins/configuration/sgconfig/parser_admin.cpp b/projects/stargazer/plugins/configuration/sgconfig/parser_admin.cpp index a87c1dbf..fef2efba 100644 --- a/projects/stargazer/plugins/configuration/sgconfig/parser_admin.cpp +++ b/projects/stargazer/plugins/configuration/sgconfig/parser_admin.cpp @@ -1,8 +1,10 @@ -#include <stdio.h> -#include <string.h> - #include "parser.h" +#include "stg/admins.h" +#include "stg/common.h" + +#include <strings.h> // strcasecmp + //----------------------------------------------------------------------------- // GET ADMINS //----------------------------------------------------------------------------- @@ -30,37 +32,29 @@ void PARSER_GET_ADMINS::CreateAnswer() const PRIV * priv = currAdmin->GetPriv(); if (!priv->adminChg) { - //answerList->clear(); - answerList->erase(answerList->begin(), answerList->end()); - - answerList->push_back("<Error Result=\"Error. Access denied.\"/>"); + answer = "<Error Result=\"Error. Access denied.\"/>"; return; } -string s; -//answerList->clear(); -answerList->erase(answerList->begin(), answerList->end()); +answer.clear(); -answerList->push_back("<Admins>"); +answer += "<Admins>"; ADMIN_CONF ac; int h = admins->OpenSearch(); -unsigned int p; while (admins->SearchNext(h, &ac) == 0) { - //memcpy(&p, &ac.priv, sizeof(unsigned int)); - p = (ac.priv.userStat << 0) + - (ac.priv.userConf << 2) + - (ac.priv.userCash << 4) + - (ac.priv.userPasswd << 6) + - (ac.priv.userAddDel << 8) + - (ac.priv.adminChg << 10) + - (ac.priv.tariffChg << 12); - strprintf(&s, "<admin login=\"%s\" priv=\"%d\"/>", ac.login.c_str(), p); - answerList->push_back(s); + unsigned int p = (ac.priv.userStat << 0) + + (ac.priv.userConf << 2) + + (ac.priv.userCash << 4) + + (ac.priv.userPasswd << 6) + + (ac.priv.userAddDel << 8) + + (ac.priv.adminChg << 10) + + (ac.priv.tariffChg << 12); + answer += "<admin login=\"" + ac.login + "\" priv=\"" + x2str(p) + "\"/>"; } admins->CloseSearch(h); -answerList->push_back("</Admins>"); +answer += "</Admins>"; } //----------------------------------------------------------------------------- @@ -90,33 +84,10 @@ return -1; //----------------------------------------------------------------------------- void PARSER_DEL_ADMIN::CreateAnswer() { -//answerList->clear(); -answerList->erase(answerList->begin(), answerList->end()); - if (admins->Del(adminToDel, currAdmin) == 0) - { - answerList->push_back("<DelAdmin Result=\"Ok\"/>"); - } + answer = "<DelAdmin Result=\"Ok\"/>"; else - { - string s; - strprintf(&s, "<DelAdmin Result=\"Error. %s\"/>", admins->GetStrError().c_str()); - answerList->push_back(s); - } -} -//----------------------------------------------------------------------------- -int PARSER_DEL_ADMIN::CheckAttr(const char **attr) -{ -/* <DelAdmin login=\"admin\"> - * attr[0] = "login" (word login) - * attr[1] = login, value of login - * attr[2] = NULL */ - -if (strcasecmp(attr[0], "login") == 0 && attr[1] && !attr[2]) - { - return 0; - } -return -1; + answer = "<DelAdmin Result=\"Error. " + admins->GetStrError() + "\"/>"; } //----------------------------------------------------------------------------- // ADD ADMIN @@ -133,9 +104,6 @@ return -1; //----------------------------------------------------------------------------- int PARSER_ADD_ADMIN::ParseEnd(void *, const char *el) { -//answerList->clear(); -answerList->erase(answerList->begin(), answerList->end()); - if (strcasecmp(el, "AddAdmin") == 0) { CreateAnswer(); @@ -146,19 +114,10 @@ return -1; //----------------------------------------------------------------------------- void PARSER_ADD_ADMIN::CreateAnswer() { -//answerList->clear(); -answerList->erase(answerList->begin(), answerList->end()); - if (admins->Add(adminToAdd, currAdmin) == 0) - { - answerList->push_back("<AddAdmin Result=\"Ok\"/>"); - } + answer = "<AddAdmin Result=\"Ok\"/>"; else - { - string s; - strprintf(&s, "<AddAdmin Result=\"Error. %s\"/>", admins->GetStrError().c_str()); - answerList->push_back(s); - } + answer = "<AddAdmin Result=\"Error. " + admins->GetStrError() + "\"/>"; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- @@ -210,56 +169,38 @@ return -1; //----------------------------------------------------------------------------- void PARSER_CHG_ADMIN::CreateAnswer() { -answerList->erase(answerList->begin(), answerList->end()); - -ADMIN_CONF conf; -conf.login = login; -if (!login.res_empty()) +if (!login.empty()) { - string s; - //if (admins->FindAdmin(login.data()) != NULL) - // { - if (!password.res_empty()) - conf.password = password.data(); + ADMIN * origAdmin = NULL; - if (!privAsString.res_empty()) - { - int p = 0; - if (str2x(privAsString.data().c_str(), p) < 0) - { - strprintf(&s, "<ChgAdmin Result = \"Incorrect parameter Priv.\"/>" ); - answerList->push_back(s); - return; - } - //memcpy(&conf.priv, &p, sizeof(conf.priv)); - conf.priv.userStat = (p & 0x0003) >> 0x00; // 1+2 - conf.priv.userConf = (p & 0x000C) >> 0x02; // 4+8 - conf.priv.userCash = (p & 0x0030) >> 0x04; // 10+20 - conf.priv.userPasswd = (p & 0x00C0) >> 0x06; // 40+80 - conf.priv.userAddDel = (p & 0x0300) >> 0x08; // 100+200 - conf.priv.adminChg = (p & 0x0C00) >> 0x0A; // 400+800 - conf.priv.tariffChg = (p & 0x3000) >> 0x0C; // 1000+2000 - } + if (admins->Find(login.data(), &origAdmin)) + { + answer = "<ChgAdmin Result = \"Admin '" + login.data() + "' is not found.\"/>"; + return; + } - if (admins->Change(conf, currAdmin) != 0) - { - strprintf(&s, "<ChgAdmin Result = \"%s\"/>", admins->GetStrError().c_str()); - answerList->push_back(s); - } - else + ADMIN_CONF conf(origAdmin->GetConf()); + + if (!password.empty()) + conf.password = password.data(); + + if (!privAsString.empty()) + { + int p = 0; + if (str2x(privAsString.data().c_str(), p) < 0) { - answerList->push_back("<ChgAdmin Result = \"Ok\"/>"); + answer = "<ChgAdmin Result = \"Incorrect parameter Priv.\"/>"; + return; } - return; - // } - //strprintf(&s, "<ChgAdmin Result = \"%s\"/>", admins->GetStrError().c_str()); - //answerList->push_back(s); - //return; + + conf.priv.FromInt(p); + } + + if (admins->Change(conf, currAdmin) != 0) + answer = "<ChgAdmin Result = \"" + admins->GetStrError() + "\"/>"; + else + answer = "<ChgAdmin Result = \"Ok\"/>"; } else - { - answerList->push_back("<ChgAdmin Result = \"Incorrect parameter login.\"/>"); - } + answer = "<ChgAdmin Result = \"Incorrect parameter login.\"/>"; } -//-----------------------------------------------------------------------------*/ -