2008-12-21 22:17:09 +01:00
|
|
|
/*
|
2010-02-28 01:08:10 +01:00
|
|
|
* This file is a part of Winix
|
2008-12-21 22:17:09 +01:00
|
|
|
* and is not publicly distributed
|
|
|
|
*
|
2010-02-28 22:33:06 +01:00
|
|
|
* Copyright (c) 2008-2010, Tomasz Sowa
|
2008-12-21 22:17:09 +01:00
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2010-08-10 18:12:50 +02:00
|
|
|
#include <arpa/inet.h>
|
2008-12-21 22:17:09 +01:00
|
|
|
#include "users.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Users::Users()
|
|
|
|
{
|
2010-08-10 18:12:50 +02:00
|
|
|
how_many_logged = 0;
|
2008-12-21 22:17:09 +01:00
|
|
|
Clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-08-10 18:12:50 +02:00
|
|
|
void Users::SetRequest(Request * prequest)
|
|
|
|
{
|
|
|
|
request = prequest;
|
|
|
|
}
|
|
|
|
|
2008-12-21 22:17:09 +01:00
|
|
|
|
|
|
|
void Users::Clear()
|
|
|
|
{
|
|
|
|
table.Clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-08-10 18:12:50 +02:00
|
|
|
void Users::ReadUsers(Db * db)
|
2008-12-21 22:17:09 +01:00
|
|
|
{
|
|
|
|
Clear();
|
2010-08-10 18:12:50 +02:00
|
|
|
db->GetUsers(table);
|
2008-12-21 22:17:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-02-28 01:08:10 +01:00
|
|
|
bool Users::AddUser(const User & user)
|
|
|
|
{
|
|
|
|
Table::Iterator i = table.PushBack(user);
|
|
|
|
|
|
|
|
return (i != table.End());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool Users::IsUser(const std::string & name)
|
|
|
|
{
|
|
|
|
return table.Is(name);
|
|
|
|
}
|
|
|
|
|
2008-12-21 22:17:09 +01:00
|
|
|
|
|
|
|
User * Users::GetUser(long user_id)
|
|
|
|
{
|
|
|
|
Table::Iterator i = table.FindId(user_id);
|
|
|
|
|
|
|
|
if( i == table.End() )
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
return &(*i);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
User * Users::GetUser(const std::string & name)
|
|
|
|
{
|
|
|
|
Table::Iterator i = table.FindName(name);
|
|
|
|
|
|
|
|
if( i == table.End() )
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
return &(*i);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long Users::GetUserId(const std::string & name)
|
|
|
|
{
|
|
|
|
User * puser = GetUser(name);
|
|
|
|
|
|
|
|
if( !puser )
|
|
|
|
return -1;
|
|
|
|
|
|
|
|
return puser->id;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Users::Iterator Users::Begin()
|
|
|
|
{
|
|
|
|
return table.Begin();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Users::Iterator Users::End()
|
|
|
|
{
|
|
|
|
return table.End();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Users::SizeType Users::Size()
|
|
|
|
{
|
|
|
|
return table.Size();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
User & Users::operator[](Users::SizeType pos)
|
|
|
|
{
|
|
|
|
return table[pos];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-08-10 18:12:50 +02:00
|
|
|
void Users::LoginUser(long user_id, bool remember_me)
|
|
|
|
{
|
|
|
|
if( !request->session )
|
|
|
|
return;
|
|
|
|
|
|
|
|
request->session->puser = GetUser(user_id);
|
|
|
|
request->session->spam_score = 0;
|
|
|
|
|
|
|
|
if( !request->session->puser )
|
|
|
|
{
|
|
|
|
log << log1 << "Users: user id: " << user_id << " is not in system.users table" << logend;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
request->session->remember_me = remember_me;
|
|
|
|
|
|
|
|
last.UserLogin(user_id, request->session->puser->name, inet_addr(request->env_remote_addr), request->session->id);
|
|
|
|
how_many_logged += 1;
|
|
|
|
|
|
|
|
log << log2 << "User " << request->session->puser->name << " (id: " << user_id << ") logged" << logend;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-12-21 22:17:09 +01:00
|
|
|
|
|
|
|
|
2010-08-10 18:12:50 +02:00
|
|
|
void Users::LogoutCurrentUser()
|
|
|
|
{
|
|
|
|
if( !request->session || !request->session->puser )
|
|
|
|
return;
|
2008-12-21 22:17:09 +01:00
|
|
|
|
2010-08-10 18:12:50 +02:00
|
|
|
log << log2 << "Users: user " << request->session->puser->name << ", id: "
|
|
|
|
<< request->session->puser->id << " logged out" << logend;
|
|
|
|
|
|
|
|
last.UserLogout(request->session->puser->id, request->session->id);
|
2008-12-21 22:17:09 +01:00
|
|
|
|
2010-08-10 18:12:50 +02:00
|
|
|
if( how_many_logged > 0 ) // for safety
|
|
|
|
how_many_logged -= 1;
|
|
|
|
|
|
|
|
request->session->puser = 0;
|
|
|
|
request->session->remember_me = 0;
|
|
|
|
}
|
2008-12-21 22:17:09 +01:00
|
|
|
|
|
|
|
|
2010-08-10 18:12:50 +02:00
|
|
|
void Users::IncrementLoggedUsers()
|
|
|
|
{
|
|
|
|
how_many_logged += 1;
|
|
|
|
}
|
|
|
|
|
2008-12-21 22:17:09 +01:00
|
|
|
|
2010-08-10 18:12:50 +02:00
|
|
|
long Users::HowManyLogged()
|
|
|
|
{
|
|
|
|
return how_many_logged;
|
|
|
|
}
|
2008-12-21 22:17:09 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|