@ -5,7 +5,7 @@
*/
/*
* Copyright ( c ) 2008 - 20 18 , Tomasz Sowa
* Copyright ( c ) 2008 - 20 2 1, Tomasz Sowa
* All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
@ -35,6 +35,7 @@
# include <arpa/inet.h>
# include "users.h"
# include "sessionmanager.h"
# include "slog.h"
namespace Winix
@ -45,29 +46,38 @@ namespace Winix
Users : : Users ( )
{
how_many_logged = 0 ; // !! CHECK ME may it should be moved to Clear() method?
table . set_dependency ( this ) ;
// table.set_dependency(this);
Clear ( ) ;
}
void Users : : set_dependency ( WinixModelDeprecated * winix_model )
void Users : : fields ( )
{
WinixModelDeprecated : : set_dependency ( winix_model ) ;
table . set_dependency ( winix_model ) ;
last . set_dependency ( winix_model ) ;
field ( L " users " , table . table ) ;
}
void Users : : SetCur ( Cur * pcur )
{
cur = pcur ;
}
void Users : : SetSessionManager ( SessionManager * sm )
{
session_manager = sm ;
}
//void Users::set_dependency(WinixModelDeprecated * winix_model)
//{
// WinixModelDeprecated::set_dependency(winix_model);
// table.set_dependency(winix_model);
// last.set_dependency(winix_model);
//}
//void Users::SetCur(Cur * pcur)
//{
// cur = pcur;
//}
//void Users::SetSessionManager(SessionManager * sm)
//{
// session_manager = sm;
//}
void Users : : Clear ( )
@ -89,7 +99,7 @@ void Users::ReadUsers(Db * db)
for ( User & user : users_tmp )
{
table . PushBack ( user );
table . PushBack ( user , user . login );
}
}
@ -98,7 +108,7 @@ void Users::ReadUsers(Db * db)
bool Users : : AddUser ( const User & user )
{
Table : : Iterator i = table . PushBack ( user );
Table : : Iterator i = table . PushBack ( user , user . login );
return ( i ! = table . End ( ) ) ;
}
@ -173,11 +183,11 @@ bool Users::Remove(long user_id)
if ( puser )
{
LogoutUser ( user_id ) ;
plugin - > Call ( WINIX_PREPARE_TO_REMOVE_USER , puser ) ;
// plugin->Call(WINIX_PREPARE_TO_REMOVE_USER, puser); FIXME
result = table . Remove ( user_id ) ;
if ( result )
plugin - > Call ( WINIX_USER_REMOVED , user_id ) ;
// if( result )
// plugin->Call(WINIX_USER_REMOVED, user_id); FIXME
}
return result ;
@ -187,15 +197,20 @@ return result;
// private
bool Users : : LoginUserCheckSession ( bool use_ses_log )
{
if ( ! cur - > session )
Session * session = get_session ( ) ;
Log * log = get_logger ( ) ;
SLog * slog = get_session_logger ( ) ;
if ( ! session )
return false ;
if ( cur - > session - > id = = 0 )
if ( session- > id = = 0 )
{
log < < log1 < < " Users: I cannot login a user on a temporary session " < < logend ;
if ( log )
( * log ) < < log1 < < " Users: I cannot login a user on a temporary session " < < logend ;
// if( use_ses_log )
// slog << logerror << T(L"service_unavailable") << logend;
if ( slog & & use_ses_log )
( * slog) < < logerror < < T ( L " service_unavailable " ) < < logend ;
return false ;
}
@ -208,34 +223,35 @@ return true;
User * Users : : LoginUserCheckStatus ( long user_id , bool use_ses_log )
{
User * puser = GetUser ( user_id ) ;
Log * log = get_logger ( ) ;
SLog * slog = get_session_logger ( ) ;
if ( ! puser )
{
log < < log1 < < " Users: user id: " < < user_id < < " is not in system.users table " < < logend ;
if ( log )
( * log ) < < log1 < < " Users: user id: " < < user_id < < " is not in system.users table " < < logend ;
// if( use_ses_log )
// slog << logerror << T(L"service_unavailable") << logend;
if ( slog & & use_ses_log )
( * slog) < < logerror < < T ( L " service_unavailable " ) < < logend ;
return 0 ;
}
if ( puser - > status ! = WINIX_ACCOUNT_READY )
{
log < < log1 < < " Users: user id: " < < user_id < < " is not ready for logging in (status: "
( * log ) < < log1 < < " Users: user id: " < < user_id < < " is not ready for logging in (status: "
< < puser - > status < < " ) " < < logend ;
if ( use_ses_log )
if ( slog & & use_ses_log )
{
/*
if ( puser - > status = = WINIX_ACCOUNT_NOT_ACTIVATED )
slog < < logerror < < T ( L " account_not_activated " ) < < logend ;
( * slog ) < < logerror < < T ( L " account_not_activated " ) < < logend ;
else
if ( puser - > status = = WINIX_ACCOUNT_SUSPENDED )
slog < < logerror < < T ( L " account_suspended " ) < < logend ;
( * slog ) < < logerror < < T ( L " account_suspended " ) < < logend ;
else
if ( puser - > status = = WINIX_ACCOUNT_BLOCKED )
slog < < logerror < < T ( L " account_banned " ) < < logend ;
*/
( * slog ) < < logerror < < T ( L " account_banned " ) < < logend ;
}
return 0 ;
@ -252,34 +268,43 @@ bool Users::LoginUser(long user_id, bool remember_me, bool use_ses_log)
return false ;
User * puser = LoginUserCheckStatus ( user_id , use_ses_log ) ;
Log * log = get_logger ( ) ;
Session * session = get_session ( ) ;
SessionManager * session_manager = get_session_manager ( ) ;
Request * request = get_request ( ) ;
if ( ! puser )
if ( ! puser | | ! session | | ! session_manager | | ! request )
return false ;
PluginRes res = plugin - > Call ( WINIX_PREPARE_USER_TO_LOGIN , puser ) ;
PluginRes res ;
//PluginRes res = plugin->Call(WINIX_PREPARE_USER_TO_LOGIN, puser); FIXME
if ( res . res_false > 0 )
{
log < < log3 < < " Users: login prevented by a plugin " < < logend ;
if ( log )
( * log ) < < log3 < < " Users: login prevented by a plugin " < < logend ;
return false ;
}
if ( cur- > session- > puser )
if ( session- > puser )
LogoutCurrentUser ( ) ;
cur- > session- > puser = puser ;
cur- > session- > spam_score = 0 ;
cur- > session- > remember_me = remember_me ;
session- > puser = puser ;
session- > spam_score = 0 ;
session- > remember_me = remember_me ;
// change session id before last.UserLogin()
if ( ! cur- > session- > new_session )
session_manager - > ChangeSessionId ( cur- > session- > id ) ;
if ( ! session- > new_session )
session_manager - > ChangeSessionId ( session- > id ) ;
last . UserLogin ( user_id , cur- > session- > puser - > name , cur- > request- > ip , cur - > session - > id ) ;
last . UserLogin ( user_id , session- > puser - > logi n, request- > ip , session - > id ) ;
how_many_logged + = 1 ;
log < < log2 < < " Users: user " < < cur - > session - > puser - > name < < " (id: " < < user_id < < " ) logged " < < logend ;
plugin - > Call ( WINIX_USER_LOGGED ) ;
if ( log )
( * log ) < < log2 < < " Users: user " < < session - > puser - > login < < " (id: " < < user_id < < " ) logged " < < logend ;
//plugin->Call(WINIX_USER_LOGGED); FIXME
return true ;
}
@ -289,18 +314,26 @@ size_t Users::LogoutUser(long user_id)
{
size_t how_many = 0 ;
User * puser = GetUser ( user_id ) ;
Log * log = get_logger ( ) ;
SessionManager * session_manager = get_session_manager ( ) ;
if ( puser )
if ( puser & & session_manager )
{
log < < log2 < < " Users: logging out user " < < puser - > name < < " , id: "
< < puser - > id < < " from all sessions " < < logend ;
if ( log )
{
( * log ) < < log2 < < " Users: logging out user " < < puser - > login < < " , id: "
< < puser - > id < < " from all sessions " < < logend ;
}
// WINIX_PREPARE_USER_TO_LOGOUT will be sent by MarkAllSessionsToRemove()
how_many = session_manager - > MarkAllSessionsToRemove ( user_id ) ;
how_many_logged - = how_many ;
if ( how_many )
log < < log3 < < " Users: " < < how_many < < " user(s) were logged out " < < logend ;
{
if ( log )
( * log ) < < log3 < < " Users: " < < how_many < < " user(s) were logged out " < < logend ;
}
}
return how_many ;
@ -310,20 +343,26 @@ return how_many;
void Users : : LogoutCurrentUser ( )
{
if ( ! cur - > session | | ! cur - > session - > puser )
Log * log = get_logger ( ) ;
Session * session = get_session ( ) ;
if ( ! session | | ! session - > puser )
return ;
log < < log2 < < " Users: user " < < cur - > session - > puser - > name < < " , id: "
< < cur - > session - > puser - > id < < " logged out " < < logend ;
if ( log )
{
( * log ) < < log2 < < " Users: user " < < session - > puser - > login < < " , id: "
< < session - > puser - > id < < " logged out " < < logend ;
}
plugin - > Call ( WINIX_PREPARE_USER_TO_LOGOUT , cur - > session - > puser ) ;
last . UserLogout ( cur - > session - > puser - > id , cur - > session - > id ) ;
//plugin->Call(WINIX_PREPARE_USER_TO_LOGOUT, cur->session->puser); // FIXME
last . UserLogout ( session- > puser - > id , session - > id ) ;
if ( how_many_logged > 0 ) // for safety
how_many_logged - = 1 ;
cur- > session- > puser = 0 ;
cur- > session- > remember_me = false ;
session- > puser = 0 ;
session- > remember_me = false ;
}