2021-12-25 22:36:38 +01:00
# include "core/stdafx.h"
# include "tier0/cvar.h"
# include "engine/sys_utils.h"
# include "server/server.h"
2022-03-27 23:50:35 +02:00
# include "engine/baseclient.h"
2021-12-25 22:36:38 +01:00
# include "networksystem/r5net.h"
# include "public/include/bansystem.h"
//-----------------------------------------------------------------------------
2021-12-26 22:58:28 +01:00
// Purpose: checks if particular client is banned on the comp server
2021-12-25 22:36:38 +01:00
//-----------------------------------------------------------------------------
void IsClientBanned ( R5Net : : Client * pR5net , const std : : string svIPAddr , std : : int64_t nNucleusID )
{
std : : string svError = std : : string ( ) ;
2022-01-09 14:35:43 +01:00
bool bCompBanned = pR5net - > GetClientIsBanned ( svIPAddr , nNucleusID , svError ) ;
2021-12-25 22:36:38 +01:00
if ( bCompBanned )
{
2022-01-09 14:35:43 +01:00
DevMsg ( eDLL_T : : SERVER , " \n " ) ;
DevMsg ( eDLL_T : : SERVER , " ______________________________________________________________ \n " ) ;
2022-04-02 02:48:54 +02:00
DevMsg ( eDLL_T : : SERVER , " ] PYLON_NOTICE ----------------------------------------------- \n " ) ;
2022-01-09 14:35:43 +01:00
DevMsg ( eDLL_T : : SERVER , " ] OriginID : | '%lld' IS PYLON BANNED. \n " , nNucleusID ) ;
DevMsg ( eDLL_T : : SERVER , " -------------------------------------------------------------- \n " ) ;
DevMsg ( eDLL_T : : SERVER , " \n " ) ;
g_pBanSystem - > AddConnectionRefuse ( svError , nNucleusID ) ; // Add to the vector.
2021-12-25 22:36:38 +01:00
}
}
//-----------------------------------------------------------------------------
// Purpose: client to server authentication
//-----------------------------------------------------------------------------
void * HCServer_Authenticate ( void * pServer , user_creds * pInpacket )
{
2022-04-02 02:48:54 +02:00
std : : string svIpAddress = pInpacket - > m_nAddr . GetAddress ( ) ;
2022-01-09 17:17:05 +01:00
if ( sv_showconnecting - > GetBool ( ) )
2021-12-25 22:36:38 +01:00
{
DevMsg ( eDLL_T : : SERVER , " \n " ) ;
DevMsg ( eDLL_T : : SERVER , " ______________________________________________________________ \n " ) ;
2022-04-02 02:48:54 +02:00
DevMsg ( eDLL_T : : SERVER , " ] AUTHENTICATION --------------------------------------------- \n " ) ;
DevMsg ( eDLL_T : : SERVER , " ] UID : | '%s' \n " , pInpacket - > m_nUserID ) ;
DevMsg ( eDLL_T : : SERVER , " ] OID : | '%lld' \n " , pInpacket - > m_nNucleusID ) ;
DevMsg ( eDLL_T : : SERVER , " ] ADR : | '%s' \n " , svIpAddress . c_str ( ) ) ;
2021-12-25 22:36:38 +01:00
DevMsg ( eDLL_T : : SERVER , " -------------------------------------------------------------- \n " ) ;
}
if ( g_pBanSystem - > IsBanListValid ( ) ) // Is the banlist vector valid?
{
if ( g_pBanSystem - > IsBanned ( svIpAddress , pInpacket - > m_nNucleusID ) ) // Is the client trying to connect banned?
{
CServer_RejectConnection ( pServer , * ( unsigned int * ) ( ( std : : uintptr_t ) pServer + 0xC ) , pInpacket , " You have been banned from this Server. " ) ; // RejectConnection for the client.
2022-01-09 17:17:05 +01:00
if ( sv_showconnecting - > GetBool ( ) )
2021-12-25 22:36:38 +01:00
{
2022-04-02 02:48:54 +02:00
Warning ( eDLL_T : : SERVER , " Connection rejected for '%s' ('%lld' is banned from this Server!) \n " , svIpAddress . c_str ( ) , pInpacket - > m_nNucleusID ) ;
2021-12-25 22:36:38 +01:00
}
return nullptr ;
}
}
2022-01-09 17:17:05 +01:00
if ( sv_showconnecting - > GetBool ( ) )
2021-12-25 22:36:38 +01:00
{
DevMsg ( eDLL_T : : SERVER , " \n " ) ;
}
if ( g_bCheckCompBanDB )
{
if ( g_pR5net )
{
std : : thread th ( IsClientBanned , g_pR5net , svIpAddress , pInpacket - > m_nNucleusID ) ;
th . detach ( ) ;
}
}
return CServer_Authenticate ( pServer , pInpacket ) ;
}
///////////////////////////////////////////////////////////////////////////////
void CServer_Attach ( )
{
DetourAttach ( ( LPVOID * ) & CServer_Authenticate , & HCServer_Authenticate ) ;
}
void CServer_Detach ( )
{
DetourDetach ( ( LPVOID * ) & CServer_Authenticate , & HCServer_Authenticate ) ;
}
///////////////////////////////////////////////////////////////////////////////
bool g_bCheckCompBanDB = true ;