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:
2012-03-14 20:25:30 +00:00
parent 2712c57f15
commit b1b3cea64e
6 changed files with 61 additions and 31 deletions

View File

@@ -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;
}