]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/configuration/sgconfig/parser_admin.cpp
Fixed tests.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / parser_admin.cpp
index f232fb23289f509d0868693f0950187455039fe6..fef2efbad3434cd7a7411c38663b7766d1fcf631 100644 (file)
@@ -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\"/>");
-    }
+if (admins->Del(adminToDel, currAdmin) == 0)
+    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\"/>");
-    }
+if (admins->Add(adminToAdd, currAdmin) == 0)
+    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.\"/>";
 }
-//-----------------------------------------------------------------------------*/
-