added: 'remember me' flag when logging
added: the session file sessions can still be available between starting and stopping the cmslu system git-svn-id: svn://ttmath.org/publicrep/cmslu/trunk@529 e52654a7-88a9-db11-a3e9-0013d4bc506epull/3/head
parent
848afac803
commit
4827c116f0
@ -1 +1 @@
|
||||
o = acceptbaseparser.o compress.o config.o data.o db.o db_itemcolumns.o dircontainer.o dirs.o done.o error.o function.o functioncodeparser.o functionparser.o functions.o groups.o httpsimpleparser.o lastcontainer.o log.o misc.o mount.o mountparser.o mounts.o notify.o plugin.o rebus.o request.o requestcontroller.o session.o sessioncontainer.o sessionmanager.o users.o
|
||||
o = acceptbaseparser.o compress.o config.o data.o db.o db_itemcolumns.o dircontainer.o dirs.o done.o error.o function.o functioncodeparser.o functionparser.o functions.o groups.o httpsimpleparser.o lastcontainer.o log.o misc.o mount.o mountparser.o mounts.o notify.o plugin.o rebus.o request.o requestcontroller.o session.o sessioncontainer.o sessionmanager.o sessionparser.o users.o
|
||||
|
@ -0,0 +1,148 @@
|
||||
/*
|
||||
* This file is a part of CMSLU -- Content Management System like Unix
|
||||
* and is not publicly distributed
|
||||
*
|
||||
* Copyright (c) 2008-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "sessionparser.h"
|
||||
#include "log.h"
|
||||
#include "data.h"
|
||||
|
||||
|
||||
bool SessionParser::Parse(const std::string & path, SessionContainer & container)
|
||||
{
|
||||
return Parse(path.c_str(), container);
|
||||
}
|
||||
|
||||
|
||||
bool SessionParser::Parse(const char * path, SessionContainer & container)
|
||||
{
|
||||
container.Clear();
|
||||
file.open(path, std::ios_base::in | std::ios_base::binary);
|
||||
|
||||
if( !file )
|
||||
{
|
||||
log << log1 << "SP: cannot open the session file for reading (file: '" << path << "')" << logend;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool res = Parse(container);
|
||||
|
||||
file.close();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool SessionParser::Parse(SessionContainer & container)
|
||||
{
|
||||
/*
|
||||
file format, each rows:
|
||||
session_id(long) user_id(long) remember_me(0|1) time(long) last_time(long)
|
||||
*/
|
||||
|
||||
long user_id;
|
||||
|
||||
session.Clear();
|
||||
last = file.get();
|
||||
|
||||
log << log2 << "SP: reading sessions from the session file" << logend;
|
||||
|
||||
while( true )
|
||||
{
|
||||
session.id = ReadLong();
|
||||
|
||||
if( file.eof() )
|
||||
break;
|
||||
|
||||
user_id = ReadLong();
|
||||
session.remember_me = ReadLong();
|
||||
session.time = ReadLong();
|
||||
session.last_time = ReadLong();
|
||||
|
||||
if( MakeSession(user_id) )
|
||||
{
|
||||
container.PushBack(session);
|
||||
log << log2 << "SP: read session id: " << session.id << " for user: " << session.puser->name << logend;
|
||||
}
|
||||
|
||||
SkipLine();
|
||||
}
|
||||
|
||||
log << log2 << "SP: read " << container.Size() << " session(s)" << logend;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SessionParser::MakeSession(long user_id)
|
||||
{
|
||||
User * puser = data.users.GetUser(user_id);
|
||||
|
||||
if( !puser )
|
||||
{
|
||||
log << log1 << "SP: there is no a user with id: " << user_id << " (skipped)" << logend;
|
||||
return false;
|
||||
}
|
||||
|
||||
session.puser = puser;
|
||||
session.new_session = true;
|
||||
session.tm_time = *std::localtime(&session.time);
|
||||
session.tm_last_time = *std::localtime(&session.last_time);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SessionParser::IsWhite(int c)
|
||||
{
|
||||
if( c==' ' || c=='\t' || c==13 )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SessionParser::IsDigit(int c)
|
||||
{
|
||||
if( c>='0' && c<='9' )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void SessionParser::SkipWhite()
|
||||
{
|
||||
while( IsWhite(last) )
|
||||
last = file.get();
|
||||
}
|
||||
|
||||
|
||||
void SessionParser::SkipLine()
|
||||
{
|
||||
while( last != 10 )
|
||||
last = file.get();
|
||||
|
||||
last = file.get(); // first character from the new line
|
||||
}
|
||||
|
||||
|
||||
|
||||
long SessionParser::ReadLong()
|
||||
{
|
||||
long res = 0;
|
||||
|
||||
SkipWhite();
|
||||
|
||||
while( IsDigit(last) )
|
||||
{
|
||||
res = res*10 + (last-'0');
|
||||
last = file.get();
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* This file is a part of CMSLU -- Content Management System like Unix
|
||||
* and is not publicly distributed
|
||||
*
|
||||
* Copyright (c) 2008-2009, Tomasz Sowa
|
||||
* All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef headerfilecmslucoresessionparser
|
||||
#define headerfilecmslucoresessionparser
|
||||
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include "session.h"
|
||||
#include "sessioncontainer.h"
|
||||
|
||||
class SessionParser
|
||||
{
|
||||
public:
|
||||
|
||||
bool Parse(const char * path, SessionContainer & container);
|
||||
bool Parse(const std::string & path, SessionContainer & container);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
bool Parse(SessionContainer & container);
|
||||
bool MakeSession(long user_id);
|
||||
|
||||
bool IsWhite(int c);
|
||||
bool IsDigit(int c);
|
||||
void SkipWhite();
|
||||
void SkipLine();
|
||||
|
||||
long ReadLong();
|
||||
|
||||
std::ifstream file;
|
||||
int last; // last character
|
||||
Session session;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue