85 lines
1.9 KiB
C++
Raw Normal View History

#include "StdAfx.h"
#include "connect.h"
#include "server.h"
static int CountPeerUser(TConnection& conn, void* pJolly)
{
const CString& strPeerUser = *(CString*)pJolly;
const int at = strPeerUser.Find('@');
const CString strUser = strPeerUser.Left(at);
const TPrassiConnection& c = (TPrassiConnection&)conn;
CString pu = c.User();
if (pu != strUser)
return 0;
pu += "@";
pu += c.PeerName();
return strPeerUser != pu;
}
BOOL TPrassiConnection::DoUserLogin(const CString& user,
const CString& pwd,
const CString& app)
{
BOOL ok = GetServer().SerialNumber() != 0xFFFF;
if (ok)
{
if (user != "******" && user != "GUEST")
{
CString security = GetIniString("Server", "Security", "0");
if (atoi(security) > 0)
{
CString strPeerUser = user; strPeerUser.MakeUpper();
strPeerUser += "@";
strPeerUser += PeerName();
int total = Server().ForEachConnection(CountPeerUser,
(void*)&strPeerUser);
ok = total == 0;
}
}
if (ok)
{
m_strUser = user; m_strUser.MakeUpper();
m_strApp = app; m_strApp.MakeUpper();
}
}
return ReturnBool(ok);
}
///////////////////////////////////////////////////////////
// BOOL UserLogin(CString user, CString pwd, CString app)
//
// Esegue il login dell'utente user con password opzionale
int f_UserLogin(TConnection& conn, void* pJolly)
{
CStringArray& argv = *(CStringArray*)pJolly;
const int argc = argv.GetSize();
if (argc > 3)
{
TPrassiConnection& c = (TPrassiConnection&)conn;
return c.DoUserLogin(argv[1], argv[2], argv[3]);
}
return FALSE;
}
///////////////////////////////////////////////////////////
// BOOL UserLogout()
int f_UserLogout(TConnection& conn, void* pJolly)
{
return ((TPrassiConnection&)conn).DoUserLogout();
}
BOOL TPrassiConnection::DoUserLogout()
{
ReturnBool(TRUE);
return TRUE;
}