Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void CcError(VString module, VString err){
- HLString ls;
- MTime mt;
- ls + mt.date("[d.m.y. H:i:s] ") + "CcError: " + module + ": " + err + "\r\n";
- print(ls.String());
- SaveFileAppend("error.log", ls.String());
- return ;
- }
- class CcUserSess{
- public:
- CcUserSess *_p, *_n;
- unsigned int sid;
- //unsigned int uid;
- unsigned char sess[32];
- int FindFound(unsigned int l){
- return sid == l;
- }
- };
- class CcUser{
- public:
- CcUser *_p, *_n;
- unsigned int uid;
- unsigned int lsid;
- // login & pass
- VString login, pass;
- MString data;
- // Sessions
- AList<AListAllocOList<CcUserSess>, CcUserSess> sess;
- CcUser(){
- lsid = rand();
- }
- void SetLoginPass(VString l, VString p){
- login = l;
- pass = p;
- data.AddR(login, pass);
- }
- int FindFound(VString l){
- return login == l;
- }
- int FindFound(unsigned int l){
- return uid == l;
- }
- int NewSess(int &ruid, int &rsid, TString &rsess){
- CcUserSess *s = sess.New();
- if(!s)
- return 0;
- TString r = RandGetUniqLine();
- ruid = uid;
- s->sid = rsid = ++ lsid;
- memcpy(s->sess, r, sizeof(s->sess));
- rsess = r.str(0, sizeof(s->sess));
- // Fix!!! Add delete old sess!
- return 1;
- }
- int TestSess(int &ruid, int &rsid, TString &rsess){
- CcUserSess *s = sess.Find(rsid);
- if(!s)
- return 0;
- if(VString(s->sess, sizeof(s->sess)) == rsess)
- return 1;
- return 0;
- }
- int DelSess(int &ruid, int &rsid, TString &rsess){
- CcUserSess *s = sess.Find(rsid);
- if(!s)
- return 0;
- if(VString(s->sess, sizeof(s->sess)) == rsess){
- sess.Free(s);
- return 1;
- }
- return 0;
- }
- };
- class CcUsers : public TLock{
- AList<AListAllocOList<CcUser>, CcUser> list;
- unsigned int luid;
- public:
- CcUsers(){
- luid = 0;
- }
- // Load
- int LoadUser(VString login, VString pass){
- CcUser *user = list.New();
- user->SetLoginPass(login, pass);
- }
- int LoadUsers(){
- Readdir rd;
- rd.ReadDir("users/");
- VString login, pass;
- for(int i = 0; i < rd.size(); i++){
- TString data = LoadFile(HLString() + "users/" + rd[i].key);
- if(!data){
- CcError("CcUsers::LoadUsers()", HLString() + "Data is null in " + "'users/" + rd[i].key + "'");
- continue;
- }
- CjxCont cc;
- cc.Read(data);
- if((login = cc.GetValue("login")) && (pass = cc.GetValue("pass"))){
- LoadUser(login, pass);
- } else{
- CcError("CcUsers::LoadUsers()", HLString() + "Login or pass is null in " + "'users/" + rd[i].key + "'");
- }
- }
- return 1;
- }
- int Login(VString login, VString pass, int &uid, int &sid, TString &sess){
- UGLOCK(this);
- CcUser *user = list.Find(login);
- if(user && user->pass == pass)
- return user->NewSess(uid, sid, sess);
- return 0;
- }
- int LoginSess(int &uid, int &sid, TString &sess){
- UGLOCK(this);
- CcUser *user = list.Find(uid);
- if(user)
- return user->TestSess(uid, sid, sess);
- return 0;
- }
- int LogOut(int &uid, int &sid, TString &sess){
- UGLOCK(this);
- CcUser *user = list.Find(uid);
- if(user)
- return user->DelSess(uid, sid, sess);
- return 0;
- }
- } users;
- int ApiLogin(VString name, VString pass, int &uid, int &sid, TString &sess){
- return users.Login(name, pass, uid, sid, sess);
- }
- int ApiLoginSess(int &uid, int &sid, TString &sess){
- return users.LoginSess(uid, sid, sess);
- }
- int ApiLogOut(int &uid, int &sid, TString &sess){
- return users.LogOut(uid, sid, sess);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement