/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2008-2010, Tomasz Sowa * All rights reserved. * */ #include #include "users.h" Users::Users() { how_many_logged = 0; Clear(); } void Users::SetRequest(Request * prequest) { request = prequest; } void Users::Clear() { table.Clear(); } void Users::ReadUsers(Db * db) { Clear(); db->GetUsers(table); } 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); } 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]; } 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; } void Users::LogoutCurrentUser() { if( !request->session || !request->session->puser ) return; 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); if( how_many_logged > 0 ) // for safety how_many_logged -= 1; request->session->puser = 0; request->session->remember_me = 0; } void Users::IncrementLoggedUsers() { how_many_logged += 1; } long Users::HowManyLogged() { return how_many_logged; }