]> git.stg.codes - stg.git/blobdiff - stglibs/srvconf.lib/parser_auth_by.cpp
Moved CHECK_USER parser from global scope.
[stg.git] / stglibs / srvconf.lib / parser_auth_by.cpp
index 877ca3e4e083fff7a03a2fce2aed43552b4b4891..34e490ca0f3b90736398c0694b89e657b8bf2c1e 100644 (file)
  *    Author : Maxim Mamontov <faust@stargazer.dp.ua>
  */
 
-#include "stg/parser_auth_by.h"
+#include "parser_auth_by.h"
 
 #include <cstddef>
 
 #include <strings.h> // strcasecmp
 
-PARSER_AUTH_BY::PARSER_AUTH_BY()
+using namespace STG;
+
+AUTH_BY::PARSER::PARSER()
     : callback(NULL),
       data(NULL),
-      depth(0)
+      depth(0),
+      parsingAnswer(false)
 {
 }
 //-----------------------------------------------------------------------------
-int PARSER_AUTH_BY::ParseStart(const char *el, const char **attr)
+int AUTH_BY::PARSER::ParseStart(const char *el, const char **attr)
 {
 depth++;
 if (depth == 1)
     {
-    if (strcasecmp(el, "AuthorizedBy") != 0)
-        info.clear();
+    if (strcasecmp(el, "AuthorizedBy") == 0)
+        if (attr && attr[0] && attr[1])
+            {
+            if (strcasecmp(attr[1], "error") == 0)
+                {
+                if (attr[2] && attr[3])
+                    error = attr[3];
+                else
+                    error = "User not found.";
+                }
+            else
+                parsingAnswer = true;
+            }
     }
 else
     {
     if (depth == 2)
         {
-        if (strcasecmp(el, "Auth") == 0)
+        if (parsingAnswer && strcasecmp(el, "Auth") == 0)
             {
             if (attr && attr[0] && attr[1] && strcasecmp(attr[0], "name") == 0)
                 info.push_back(attr[1]);
@@ -54,14 +68,19 @@ else
 return 0;
 }
 //-----------------------------------------------------------------------------
-void PARSER_AUTH_BY::ParseEnd(const char * /*el*/)
+void AUTH_BY::PARSER::ParseEnd(const char * /*el*/)
 {
 depth--;
-if (depth == 0 && callback)
-    callback(info, data);
+if (depth == 0)
+    {
+    if (callback)
+        callback(error.empty(), error, info, data);
+    info.clear();
+    error.clear();
+    }
 }
 //-----------------------------------------------------------------------------
-void PARSER_AUTH_BY::SetCallback(CALLBACK f, void * d)
+void AUTH_BY::PARSER::SetCallback(CALLBACK f, void * d)
 {
 callback = f;
 data = d;