added: new plugin message: WINIX_PREPARE_USER_TO_LOGIN
a user will be logged in set PluginInfo::res to false (it is by default) to prevent logging the user directly after this message (if you do not return false) a WINIX_USER_LOGGED is sent in p1 you have a pointer to User struct (if at least one plugin returns false then the user will not be logged) git-svn-id: svn://ttmath.org/publicrep/winix/trunk@820 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
|
||||
Users::Users()
|
||||
{
|
||||
how_many_logged = 0;
|
||||
how_many_logged = 0; // !! CHECK ME may it should be moved to Clear() method?
|
||||
Clear();
|
||||
}
|
||||
|
||||
@@ -146,17 +146,15 @@ return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// !! IMPROVE ME
|
||||
// this method is too long
|
||||
bool Users::LoginUser(long user_id, bool remember_me, bool use_ses_log)
|
||||
// private
|
||||
bool Users::LoginUserCheckSession(bool use_ses_log)
|
||||
{
|
||||
if( !cur->session )
|
||||
return false;
|
||||
|
||||
if( cur->session->id == 0 )
|
||||
{
|
||||
log << log1 << "Users: cannot login a user on a temporary session" << logend;
|
||||
log << log1 << "Users: I cannot login a user on a temporary session" << logend;
|
||||
|
||||
if( use_ses_log )
|
||||
slog << logerror << T(L"service_unavailable") << logend;
|
||||
@@ -164,6 +162,13 @@ bool Users::LoginUser(long user_id, bool remember_me, bool use_ses_log)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// private
|
||||
User * Users::LoginUserCheckStatus(long user_id, bool use_ses_log)
|
||||
{
|
||||
User * puser = GetUser(user_id);
|
||||
|
||||
if( !puser )
|
||||
@@ -173,7 +178,7 @@ bool Users::LoginUser(long user_id, bool remember_me, bool use_ses_log)
|
||||
if( use_ses_log )
|
||||
slog << logerror << T(L"service_unavailable") << logend;
|
||||
|
||||
return false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( puser->status != WINIX_ACCOUNT_READY )
|
||||
@@ -193,6 +198,29 @@ bool Users::LoginUser(long user_id, bool remember_me, bool use_ses_log)
|
||||
slog << logerror << T(L"account_banned") << logend;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return puser;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool Users::LoginUser(long user_id, bool remember_me, bool use_ses_log)
|
||||
{
|
||||
if( !LoginUserCheckSession(use_ses_log) )
|
||||
return false;
|
||||
|
||||
User * puser = LoginUserCheckStatus(user_id, use_ses_log);
|
||||
|
||||
if( !puser )
|
||||
return false;
|
||||
|
||||
plugin.Call(WINIX_PREPARE_USER_TO_LOGIN, puser);
|
||||
|
||||
if( plugin.False() > 0 )
|
||||
{
|
||||
log << log3 << "Users: login prevented by a plugin" << logend;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -204,11 +232,10 @@ bool Users::LoginUser(long user_id, bool remember_me, bool use_ses_log)
|
||||
cur->session->remember_me = remember_me;
|
||||
|
||||
last.UserLogin(user_id, cur->session->puser->name, inet_addr(cur->request->env_remote_addr), cur->session->id);
|
||||
|
||||
// !! jesli uzytkownik ponownie sie loguje ten sam na ta sama sesje to mozna nie zwiekszac licznika
|
||||
how_many_logged += 1;
|
||||
|
||||
log << log2 << "User " << cur->session->puser->name << " (id: " << user_id << ") logged" << logend;
|
||||
log << log2 << "Users: user " << cur->session->puser->name << " (id: " << user_id << ") logged" << logend;
|
||||
plugin.Call(WINIX_USER_LOGGED);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user