]> git.stg.codes - stg.git/blobdiff - projects/stargazer/plugins/configuration/sgconfig/parser_admins.cpp
Check if we can use C++17 with XMLRPC-C.
[stg.git] / projects / stargazer / plugins / configuration / sgconfig / parser_admins.cpp
index 0db867bb3e680e1132e59a7c7a1aaaac29a0891f..1de533d67f48868c6fe543860185943d58a02bfb 100644 (file)
@@ -22,6 +22,8 @@
 #include "parser_admins.h"
 
 #include "stg/admins.h"
+#include "stg/admin.h"
+#include "stg/admin_conf.h"
 
 #include <strings.h> // strcasecmp
 
@@ -37,29 +39,25 @@ const char * CHG_ADMIN::tag  = "ChgAdmin";
 
 void GET_ADMINS::CreateAnswer()
 {
-    const PRIV * priv = m_currAdmin.GetPriv();
-    if (!priv->adminChg)
+    const auto& priv = m_currAdmin.priv();
+    if (!priv.adminChg)
     {
         m_answer = "<Error Result=\"Error. Access denied.\"/>";
         return;
     }
 
     m_answer = "<Admins>";
-    ADMIN_CONF ac;
-    int h = m_admins.OpenSearch();
-
-    while (m_admins.SearchNext(h, &ac) == 0)
-    {
-        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);
-        m_answer += "<admin login=\"" + ac.login + "\" priv=\"" + x2str(p) + "\"/>";
-    }
-    m_admins.CloseSearch(h);
+    m_admins.fmap([this](const Admin& admin)
+                  {
+                      const unsigned int p = (admin.priv().userStat << 0) +
+                                             (admin.priv().userConf << 2) +
+                                             (admin.priv().userCash << 4) +
+                                             (admin.priv().userPasswd << 6) +
+                                             (admin.priv().userAddDel << 8) +
+                                             (admin.priv().adminChg << 10) +
+                                             (admin.priv().tariffChg << 12);
+                      m_answer += "<admin login=\"" + admin.login() + "\" priv=\"" + std::to_string(p) + "\"/>";
+                  });
     m_answer += "</Admins>";
 }
 
@@ -75,10 +73,10 @@ int DEL_ADMIN::Start(void *, const char * el, const char ** attr)
 
 void DEL_ADMIN::CreateAnswer()
 {
-    if (m_admins.Del(m_admin, &m_currAdmin) == 0)
+    if (m_admins.del(m_admin, m_currAdmin) == 0)
         m_answer = "<" + m_tag + " Result=\"Ok\"/>";
     else
-        m_answer = "<" + m_tag + " Result=\"Error. " + m_admins.GetStrError() + "\"/>";
+        m_answer = "<" + m_tag + " Result=\"Error. " + m_admins.strError() + "\"/>";
 }
 
 int ADD_ADMIN::Start(void *, const char *el, const char **attr)
@@ -93,10 +91,10 @@ int ADD_ADMIN::Start(void *, const char *el, const char **attr)
 
 void ADD_ADMIN::CreateAnswer()
 {
-    if (m_admins.Add(m_admin, &m_currAdmin) == 0)
+    if (m_admins.add(m_admin, m_currAdmin) == 0)
         m_answer = "<" + m_tag + " Result=\"Ok\"/>";
     else
-        m_answer = "<" + m_tag + " Result=\"Error. " + m_admins.GetStrError() + "\"/>";
+        m_answer = "<" + m_tag + " Result=\"Error. " + m_admins.strError() + "\"/>";
 }
 
 int CHG_ADMIN::Start(void *, const char * el, const char ** attr)
@@ -137,33 +135,33 @@ void CHG_ADMIN::CreateAnswer()
 {
     if (!login.empty())
     {
-        ADMIN * origAdmin = NULL;
+        Admin * origAdmin = NULL;
 
-        if (m_admins.Find(login, &origAdmin))
+        if (m_admins.find(login, &origAdmin))
         {
             m_answer = "<" + m_tag + " Result = \"Admin '" + login + "' is not found.\"/>";
             return;
         }
 
-        ADMIN_CONF conf(origAdmin->GetConf());
+        AdminConf conf(origAdmin->conf());
 
-        if (!password.empty())
-            conf.password = password.data();
+        if (password)
+            conf.password = password.value();
 
-        if (!privAsString.empty())
+        if (privAsString)
         {
             int p = 0;
-            if (str2x(privAsString.data().c_str(), p) < 0)
+            if (str2x(privAsString.value().c_str(), p) < 0)
             {
                 m_answer = "<" + m_tag + " Result = \"Incorrect parameter Priv.\"/>";
                 return;
             }
 
-            conf.priv.FromInt(p);
+            conf.priv = Priv(p);
         }
 
-        if (m_admins.Change(conf, &m_currAdmin) != 0)
-            m_answer = "<" + m_tag + " Result = \"" + m_admins.GetStrError() + "\"/>";
+        if (m_admins.change(conf, m_currAdmin) != 0)
+            m_answer = "<" + m_tag + " Result = \"" + m_admins.strError() + "\"/>";
         else
             m_answer = "<" + m_tag + " Result = \"Ok\"/>";
     }