#include "parser_auth_by.h"

#include "stg/users.h"
#include "stg/user.h"

int PARSER_AUTH_BY::ParseStart(void * /*data*/, const char *el, const char **attr)
{
if (strcasecmp(el, "GetUserAuthBy") == 0)
    {
    if (attr[0] && attr[1])
        login = attr[1];
    else
        {
        login.erase(login.begin(), login.end());
        return -1;
        }
    return 0;
    }
return -1;
}

int PARSER_AUTH_BY::ParseEnd(void * /*data*/, const char *el)
{
if (strcasecmp(el, "GetUserAuthBy") == 0)
    {
    CreateAnswer();
    return 0;
    }
return -1;
}

void PARSER_AUTH_BY::CreateAnswer()
{
USER_PTR u;
if (users->FindByName(login, &u))
    {
    answer = "<AuthorizedBy result=\"error\" reason=\"User not found.\"/>";
    return;
    }

answer.clear();
answer += "<AuthorizedBy result=\"ok\">";
std::vector<std::string> list(u->GetAuthorizers());
for (std::vector<std::string>::const_iterator it = list.begin(); it != list.end(); ++it)
    answer += "<Auth name=\"" + *it + "\"/>";
answer += "</AuthorizedBy>";
}