X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/641204dfbdb9fc870cdd2e7f9e3169a44693e7bf..8b8075db3ee961f42ce0eeb278c840aa8062d881:/projects/sgconf/common_sg.cpp diff --git a/projects/sgconf/common_sg.cpp b/projects/sgconf/common_sg.cpp index 77d7476f..d197e982 100644 --- a/projects/sgconf/common_sg.cpp +++ b/projects/sgconf/common_sg.cpp @@ -24,6 +24,10 @@ $Date: 2009/06/08 10:02:28 $ */ +#include "stg/common.h" +#include "sg_error_codes.h" +#include "common_sg.h" +#include "version_sg.h" #include #include @@ -34,11 +38,6 @@ #include #include -#include "common_sg.h" -#include "version_sg.h" -#include "common.h" -#include "sg_error_codes.h" - using namespace std; const int usageConf = 0; @@ -52,6 +51,12 @@ struct GetUserCbData void * data; bool * result; }; +//----------------------------------------------------------------------------- +struct AuthByCbData +{ + void * data; + bool * result; +}; //--------------------------------------------------------------------------- struct HelpParams { @@ -81,9 +86,10 @@ HelpParams hp[] = { {"set tariff", "get tariff", "-t", ""}, {"set credit", "get credit", "-r", ""}, + {"set credit expire", "get credit expire", "-E", ""}, {"set password", "get password", "-o", ""}, {"set prepaid traffic", "get prepaid traffic", "-e", ""}, - {"set IP-addresses", "get IP-addresses", "-I", "<*|ip_addr[,ip_addr...]>"}, + {"set IP-addresses", "get IP-addresses", "-I", "<*|ip_addr[,ip_addr...]>"}, {"set name", "get name", "-A", ""}, {"set note", "get note", "-N", ""}, {"set street address", "get street address", "-D", "
"}, @@ -121,6 +127,9 @@ printf("sgconf set -s -p -a -w -u -- printf("To get userdata<0...9> use:\n"); printf("sgconf get -s -p -a -w -u --ud0 [--ud1 ...]\n\n"); +printf("To get user's authorizers list use:\n"); +printf("sgconf get -s -p -a -w -u --authorized-by\n\n"); + printf("To send message use:\n"); printf("sgconf set -s -p -a -w -u -m \n\n"); @@ -148,6 +157,7 @@ for (int i = 0; i < (int)strlen(login); i++) if (!(( login[i] >= 'a' && login[i] <= 'z') || (login[i] >= 'A' && login[i] <= 'Z') || (login[i] >= '0' && login[i] <= '9') + || login[i] == '.' || login[i] == '_' || login[i] == '-')) { @@ -202,13 +212,6 @@ return usr; void ConvertKOI8(const string & src, string * dst, int encType) { iconv_t cd; -char * ob = new char[src.size() * 2 + 1]; -char * ib = new char[src.size() + 1]; - -strcpy(ib, src.c_str()); - -char * outbuf = ob; -char * inbuf = ib; setlocale(LC_ALL, ""); @@ -218,21 +221,16 @@ char charsetT[100]; if (encType == TO_KOI8) { strcpy(charsetF, nl_langinfo(CODESET)); - strcpy(charsetT, "koi8-r"); + strcpy(charsetT, "koi8-ru"); } else { strcpy(charsetT, nl_langinfo(CODESET)); - strcpy(charsetF, "koi8-r"); + strcpy(charsetF, "koi8-ru"); } size_t nconv = 1; -size_t insize = strlen(ib); -size_t outsize = insize * 2 + 1; - -insize = src.size(); - cd = iconv_open(charsetT, charsetF); if (cd == (iconv_t) -1) { @@ -248,7 +246,20 @@ if (cd == (iconv_t) -1) exit(ICONV_ERR_CODE); } -#if defined(FREE_BSD) || defined(FREE_BSD5) +char * ob = new char[src.size() * 2 + 1]; +char * ib = new char[src.size() + 1]; + +strcpy(ib, src.c_str()); + +char * outbuf = ob; +char * inbuf = ib; + +size_t insize = strlen(ib); +size_t outsize = insize * 2 + 1; + +insize = src.size(); + +#if defined(CONST_ICONV) nconv = iconv(cd, (const char **)&inbuf, &insize, &outbuf, &outsize); #else nconv = iconv(cd, &inbuf, &insize, &outbuf, &outsize); @@ -279,21 +290,12 @@ void ConvertFromKOI8(const string & src, string * dst) ConvertKOI8(src, dst, FROM_KOI8); } //----------------------------------------------------------------------------- -void ConvertToKOI8(const string & src, string * dst) -{ -ConvertKOI8(src, dst, TO_KOI8); -} -//----------------------------------------------------------------------------- int RecvSetUserAnswer(const char * ans, void * d) { -GetUserCbData * gucbd; -gucbd = (GetUserCbData *)d; +GetUserCbData * gucbd = static_cast(d); bool * result = gucbd->result; -//REQUEST * req = (REQUEST *)gucbd->data; - -//printf("ans=%s\n", ans); if (strcasecmp("Ok", ans) == 0) *result = true; else @@ -311,8 +313,7 @@ struct StringReqParams //----------------------------------------------------------------------------- void RecvUserData(USERDATA * ud, void * d) { -GetUserCbData * gucbd; -gucbd = (GetUserCbData *)d; +GetUserCbData * gucbd = static_cast(d); bool * result = gucbd->result; @@ -324,38 +325,58 @@ if (ud->login == "") return; } -if (!req->cash.res_empty()) +if (!req->cash.empty()) cout << "cash=" << ud->cash << endl; -if (!req->credit.res_empty()) +if (!req->credit.empty()) cout << "credit=" << ud->credit << endl; -if (!req->down.res_empty()) +if (!req->creditExpire.empty()) + { + char buf[32]; + struct tm brokenTime; + time_t tt = ud->creditExpire; + + brokenTime.tm_wday = 0; + brokenTime.tm_yday = 0; + brokenTime.tm_isdst = 0; + brokenTime.tm_hour = 0; + brokenTime.tm_min = 0; + brokenTime.tm_sec = 0; + + gmtime_r(&tt, &brokenTime); + + strftime(buf, 32, "%Y-%m-%d", &brokenTime); + + cout << "creditExpire=" << buf << endl; + } + +if (!req->down.empty()) cout << "down=" << ud->down << endl; -if (!req->passive.res_empty()) +if (!req->passive.empty()) cout << "passive=" << ud->passive << endl; -if (!req->disableDetailStat.res_empty()) +if (!req->disableDetailStat.empty()) cout << "disableDetailStat=" << ud->disableDetailStat << endl; -if (!req->alwaysOnline.res_empty()) +if (!req->alwaysOnline.empty()) cout << "alwaysOnline=" << ud->alwaysOnline << endl; -if (!req->prepaidTraff.res_empty()) +if (!req->prepaidTraff.empty()) cout << "prepaidTraff=" << ud->prepaidTraff << endl; for (int i = 0; i < DIR_NUM; i++) { - if (!req->u[i].res_empty()) + if (!req->u[i].empty()) cout << "u" << i << "=" << ud->stat.mu[i] << endl; - if (!req->d[i].res_empty()) + if (!req->d[i].empty()) cout << "d" << i << "=" << ud->stat.md[i] << endl; } for (int i = 0; i < USERDATA_NUM; i++) { - if (!req->ud[i].res_empty()) + if (!req->ud[i].empty()) { string str; ConvertFromKOI8(ud->userData[i], &str); @@ -373,17 +394,30 @@ StringReqParams strReqParams[] = {"group", req->group, &ud->group}, {"tariff", req->tariff, &ud->tariff}, {"password", req->usrPasswd, &ud->password}, - {"ip", req->ips, &ud->ips} // IP-address of user + {"ip", req->ips, &ud->ips} // IP-address of user }; for (unsigned i = 0; i < sizeof(strReqParams) / sizeof(StringReqParams); i++) { - if (!strReqParams[i].reqParam.res_empty()) + if (!strReqParams[i].reqParam.empty()) { string str; ConvertFromKOI8(*strReqParams[i].value, &str); cout << strReqParams[i].name << "=" << str << endl; } } +*result = true; +} +//----------------------------------------------------------------------------- +void RecvAuthByData(const std::vector & list, void * d) +{ +AuthByCbData * abcbd = static_cast(d); + +bool * result = abcbd->result; + +for (std::vector::const_iterator it = list.begin(); it != list.end(); ++it) + cout << *it << "\n"; +cout << endl; + *result = true; } //----------------------------------------------------------------------------- @@ -475,5 +509,42 @@ else return 0; } //----------------------------------------------------------------------------- +int ProcessAuthBy(const std::string &server, + int port, + const std::string &admLogin, + const std::string &admPasswd, + const std::string &login, + void * data) +{ +SERVCONF sc; +bool result = false; +sc.SetServer(server.c_str()); // õÓÔÁÎÁ×ÌÉ×ÁÅÍ ÉÍÑ ÓÅÒ×ÅÒÁ Ó ËÏÔÏÒÇÏ ÚÁÂÉÒÁÔØ ÉÎÆÕ +sc.SetPort(port); // ÁÄÍÉÎÓËÉÊ ÐÏÒÔ ÓÅÒ×ÅÒÁÐÏÒÔ +sc.SetAdmLogin(admLogin.c_str()); // ÷ÙÓÔÁ×ÌÑÅÍ ÌÏÇÉÎ É ÐÁÒÏÌØ ÁÄÍÉÎÁ +sc.SetAdmPassword(admPasswd.c_str()); + +// TODO Good variable name :) +AuthByCbData abcbd; + +abcbd.data = data; +abcbd.result = &result; + +sc.SetGetUserAuthByRecvCb(RecvAuthByData, &abcbd); +sc.GetUserAuthBy(login.c_str()); + +if (result) + { + printf("Ok\n"); + return 0; + } +else + { + printf("Error\n"); + return -1; + } + +return 0; +} +//-----------------------------------------------------------------------------