Advertisement
Guest User

MikelSV / CodeCore / api_login

a guest
Nov 14th, 2015
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.39 KB | None | 0 0
  1. void CcError(VString module, VString err){
  2.     HLString ls;
  3.     MTime mt;
  4.  
  5.     ls + mt.date("[d.m.y. H:i:s] ") + "CcError: " + module + ": " + err + "\r\n";
  6.  
  7.     print(ls.String());
  8.     SaveFileAppend("error.log", ls.String());
  9.     return ;
  10. }
  11.  
  12. class CcUserSess{
  13. public:
  14.     CcUserSess *_p, *_n;
  15.     unsigned int sid;
  16.     //unsigned int uid;
  17.     unsigned char sess[32];
  18.  
  19.     int FindFound(unsigned int l){
  20.         return sid == l;
  21.     }
  22.  
  23. };
  24.  
  25. class CcUser{
  26. public:
  27.     CcUser *_p, *_n;
  28.     unsigned int uid;
  29.     unsigned int lsid;
  30.  
  31.     // login & pass
  32.     VString login, pass;
  33.     MString data;
  34.  
  35.     // Sessions
  36.     AList<AListAllocOList<CcUserSess>, CcUserSess> sess;
  37.  
  38.     CcUser(){
  39.         lsid = rand();
  40.     }
  41.  
  42.     void SetLoginPass(VString l, VString p){
  43.         login = l;
  44.         pass = p;
  45.         data.AddR(login, pass);
  46.     }
  47.  
  48.     int FindFound(VString l){
  49.         return login == l;
  50.     }
  51.  
  52.     int FindFound(unsigned int l){
  53.         return uid == l;
  54.     }
  55.  
  56.     int NewSess(int &ruid, int &rsid, TString &rsess){
  57.         CcUserSess *s = sess.New();
  58.         if(!s)
  59.             return 0;
  60.  
  61.         TString r = RandGetUniqLine();
  62.  
  63.         ruid = uid;
  64.         s->sid = rsid = ++ lsid;
  65.         memcpy(s->sess, r, sizeof(s->sess));
  66.         rsess = r.str(0, sizeof(s->sess));
  67.  
  68.         // Fix!!! Add delete old sess!
  69.  
  70.         return 1;
  71.     }
  72.  
  73.     int TestSess(int &ruid, int &rsid, TString &rsess){
  74.         CcUserSess *s = sess.Find(rsid);
  75.         if(!s)
  76.             return 0;
  77.  
  78.         if(VString(s->sess, sizeof(s->sess)) == rsess)
  79.             return 1;
  80.  
  81.         return 0;
  82.     }
  83.  
  84.     int DelSess(int &ruid, int &rsid, TString &rsess){
  85.         CcUserSess *s = sess.Find(rsid);
  86.         if(!s)
  87.             return 0;
  88.  
  89.         if(VString(s->sess, sizeof(s->sess)) == rsess){
  90.             sess.Free(s);
  91.             return 1;
  92.         }
  93.  
  94.         return 0;
  95.     }
  96.  
  97. };
  98.  
  99. class CcUsers : public TLock{
  100.     AList<AListAllocOList<CcUser>, CcUser> list;
  101.     unsigned int luid;
  102.  
  103. public:
  104.     CcUsers(){
  105.         luid = 0;
  106.     }
  107.  
  108.     // Load
  109.     int LoadUser(VString login, VString pass){
  110.         CcUser *user = list.New();
  111.         user->SetLoginPass(login, pass);
  112.     }
  113.  
  114.     int LoadUsers(){
  115.         Readdir rd;
  116.         rd.ReadDir("users/");
  117.  
  118.         VString login, pass;
  119.  
  120.         for(int i = 0; i < rd.size(); i++){
  121.             TString data = LoadFile(HLString() + "users/" + rd[i].key);
  122.             if(!data){
  123.                 CcError("CcUsers::LoadUsers()", HLString() + "Data is null in " + "'users/" + rd[i].key + "'");
  124.                 continue;
  125.             }
  126.  
  127.             CjxCont cc;
  128.             cc.Read(data);
  129.  
  130.             if((login = cc.GetValue("login")) && (pass = cc.GetValue("pass"))){
  131.                 LoadUser(login, pass);
  132.             } else{
  133.                 CcError("CcUsers::LoadUsers()", HLString() + "Login or pass is null in " + "'users/" + rd[i].key + "'");
  134.             }
  135.         }
  136.  
  137.         return 1;
  138.     }
  139.  
  140.     int Login(VString login, VString pass, int &uid, int &sid, TString &sess){
  141.         UGLOCK(this);
  142.  
  143.         CcUser *user = list.Find(login);
  144.         if(user && user->pass == pass)
  145.             return user->NewSess(uid, sid, sess);
  146.        
  147.  
  148.         return 0;
  149.     }
  150.  
  151.     int LoginSess(int &uid, int &sid, TString &sess){
  152.         UGLOCK(this);
  153.  
  154.         CcUser *user = list.Find(uid);
  155.         if(user)
  156.             return user->TestSess(uid, sid, sess);
  157.  
  158.         return 0;
  159.     }
  160.  
  161.     int LogOut(int &uid, int &sid, TString &sess){
  162.         UGLOCK(this);
  163.  
  164.         CcUser *user = list.Find(uid);
  165.         if(user)
  166.             return user->DelSess(uid, sid, sess);
  167.  
  168.         return 0;
  169.     }
  170.  
  171. } users;
  172.  
  173.  
  174. int ApiLogin(VString name, VString pass, int &uid, int &sid, TString &sess){
  175.     return users.Login(name, pass, uid, sid, sess);
  176. }
  177.  
  178. int ApiLoginSess(int &uid, int &sid, TString &sess){
  179.     return users.LoginSess(uid, sid, sess);
  180. }
  181.  
  182. int ApiLogOut(int &uid, int &sid, TString &sess){
  183.     return users.LogOut(uid, sid, sess);
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement