changed: added Cur structure

we have there two pointers: 
 Request * request;
 Session * session;
these are the current request and the current session


the session GC was moved to SessionManager (was in SessionContainer)



git-svn-id: svn://ttmath.org/publicrep/winix/trunk@708 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2011-01-23 14:15:30 +00:00
parent 61ac29b2de
commit 915cabdf97
171 changed files with 2822 additions and 2650 deletions

View File

@@ -15,9 +15,9 @@
void System::SetRequest(Request * prequest)
void System::SetCur(Cur * pcur)
{
request = prequest;
cur = pcur;
}
@@ -44,26 +44,26 @@ void System::SetSynchro(Synchro * psynchro)
void System::Init()
{
dirs.SetDb(db);
dirs.SetRequest(request);
dirs.SetCur(cur);
dirs.SetNotify(&notify);
dirs.ReadDirs();
mounts.SetDirs(&dirs);
mounts.SetDb(db);
mounts.SetRequest(request);
mounts.SetCur(cur);
mounts.CreateMounts();
mounts.ReadMounts();
users.SetRequest(request);
users.SetCur(cur);
users.ReadUsers(db);
users.SetTimeZoneOffset(config->time_zone_offset);
groups.ReadGroups(db); // !! chwilowe przekazanie argumentu, db bedzie zmienione
rebus.SetRequest(request);
rebus.SetCur(cur);
rebus.Init();
notify.SetSynchro(synchro);
notify.SetRequest(request);
notify.SetCur(cur);
notify.SetConfig(config);
notify.SetUsers(&users);
notify.SetDirs(&dirs);
@@ -80,35 +80,35 @@ void System::Init()
// !! moze zwracac jakas wartosc?
void System::RedirectTo(const Item & item, const wchar_t * postfix)
{
request->redirect_to = config->base_url;
cur->request->redirect_to = config->base_url;
if( item.type == Item::dir )
{
// item_id is pointing to a directory
dirs.MakePath(item.id, request->redirect_to, false);
dirs.MakePath(item.id, cur->request->redirect_to, false);
}
else
{
// item_id is pointing to a file or a symlink
if( dirs.MakePath(item.parent_id, request->redirect_to, false) )
request->redirect_to += item.url;
if( dirs.MakePath(item.parent_id, cur->request->redirect_to, false) )
cur->request->redirect_to += item.url;
}
if( postfix )
request->redirect_to += postfix;
cur->request->redirect_to += postfix;
}
void System::RedirectTo(long item_id, const wchar_t * postfix)
{
request->redirect_to = config->base_url;
cur->request->redirect_to = config->base_url;
Item * pdir = dirs.GetDir(item_id);
if( pdir )
{
// item_id is pointing to a directory
dirs.MakePath(pdir->id, request->redirect_to, false);
dirs.MakePath(pdir->id, cur->request->redirect_to, false);
}
else
{
@@ -122,8 +122,8 @@ void System::RedirectTo(long item_id, const wchar_t * postfix)
if( db->GetItem(item_temp, iq) == WINIX_ERR_OK )
{
if( dirs.MakePath(item_temp.parent_id, request->redirect_to, false) )
request->redirect_to += item_temp.url;
if( dirs.MakePath(item_temp.parent_id, cur->request->redirect_to, false) )
cur->request->redirect_to += item_temp.url;
}
else
{
@@ -132,31 +132,31 @@ void System::RedirectTo(long item_id, const wchar_t * postfix)
}
if( postfix )
request->redirect_to += postfix;
cur->request->redirect_to += postfix;
}
void System::RedirectTo(const std::wstring & url)
{
request->redirect_to = config->base_url;
cur->request->redirect_to = config->base_url;
if( !url.empty() && url[0] == '/' )
{
// absolute path
request->redirect_to += url;
cur->request->redirect_to += url;
}
else
{
// relative path
if( !request->dir_tab.empty() )
if( !cur->request->dir_tab.empty() )
{
if( dirs.MakePath(request->dir_tab.back()->id, request->redirect_to, false) )
request->redirect_to += url;
if( dirs.MakePath(cur->request->dir_tab.back()->id, cur->request->redirect_to, false) )
cur->request->redirect_to += url;
}
else
{
request->redirect_to += '/';
request->redirect_to += url;
cur->request->redirect_to += '/';
cur->request->redirect_to += url;
}
}
}
@@ -186,38 +186,38 @@ void System::RedirectWithFunctionAndParamsTo(const std::wstring & url)
{
RedirectTo(url);
if( !request->function )
if( !cur->request->function )
return;
request->redirect_to += '/';
request->redirect_to += request->function->fun.url;
cur->request->redirect_to += '/';
cur->request->redirect_to += cur->request->function->fun.url;
AddParams(request->param_tab, request->redirect_to, false);
AddParams(cur->request->param_tab, cur->request->redirect_to, false);
}
void System::RedirectToLastDir()
{
if( !request->dir_tab.empty() )
RedirectTo( *request->dir_tab.back() );
if( !cur->request->dir_tab.empty() )
RedirectTo( *cur->request->dir_tab.back() );
}
void System::RedirectToLastItem()
{
if( request->last_item )
RedirectTo( *request->last_item );
if( cur->request->last_item )
RedirectTo( *cur->request->last_item );
}
bool System::CanChangeUser(const Item & item, long new_user_id)
{
if( !request->session )
if( !cur->session )
// session must be set
return false;
if( request->session->puser && request->session->puser->super_user )
if( cur->session->puser && cur->session->puser->super_user )
// super user is allowed everything
return true;
@@ -233,11 +233,11 @@ return true;
bool System::CanChangeGroup(const Item & item, long new_group_id)
{
if( !request->session )
if( !cur->session )
// session must be set
return false;
if( request->session->puser && request->session->puser->super_user )
if( cur->session->puser && cur->session->puser->super_user )
// super user is allowed everything
return true;
@@ -246,16 +246,16 @@ bool System::CanChangeGroup(const Item & item, long new_group_id)
// user is allowed to change the group only if he is an owner of the item
// he can change only into a group in which he is a member of, or into a 'no_group'
if( !request->session->puser )
if( !cur->session->puser )
return false;
if( request->session->puser->id != item.user_id )
if( cur->session->puser->id != item.user_id )
return false;
if( new_group_id == -1 )
return true;
if( !request->session->puser->IsMemberOf(new_group_id) )
if( !cur->session->puser->IsMemberOf(new_group_id) )
return false;
// is logged, is the owner of the item, is the member of the new group
@@ -267,11 +267,11 @@ return true;
bool System::CanChangePrivileges(const Item & item, int new_priv)
{
if( !request->session )
if( !cur->session )
// session must be set
return false;
if( request->session->puser && request->session->puser->super_user )
if( cur->session->puser && cur->session->puser->super_user )
// super user is allowed everything
return true;
@@ -279,10 +279,10 @@ bool System::CanChangePrivileges(const Item & item, int new_priv)
{
// the owner of an item is allowed to change the privileges
if( !request->session->puser )
if( !cur->session->puser )
return false;
if( request->session->puser->id != item.user_id )
if( cur->session->puser->id != item.user_id )
return false;
}
@@ -293,21 +293,21 @@ return true;
bool System::HasAccess(const Item & item, int mask)
{
if( !request->session )
if( !cur->session )
// session must be set
return false;
if( request->session->puser && request->session->puser->super_user )
if( cur->session->puser && cur->session->puser->super_user )
// super user is allowed everything
return true;
if( request->session->puser && request->session->puser->id == item.user_id )
if( cur->session->puser && cur->session->puser->id == item.user_id )
{
// the owner
return ((item.privileges >> 6) & mask) == mask;
}
if( request->session->puser && request->session->puser->IsMemberOf(item.group_id) )
if( cur->session->puser && cur->session->puser->IsMemberOf(item.group_id) )
{
// group
return ((item.privileges >> 3) & mask) == mask;
@@ -339,7 +339,7 @@ bool System::HasReadWriteAccess(const Item & item)
bool System::HasReadExecAccess(const Item & item)
{
if( request->session && request->session->puser && request->session->puser->super_user )
if( cur->session && cur->session->puser && cur->session->puser->super_user )
{
// there must be at least one 'x' (for the root)
@@ -387,7 +387,7 @@ return true;
bool System::DirsHaveReadExecPerm()
{
return HasReadExecAccessToPath(request->dir_tab);
return HasReadExecAccessToPath(cur->request->dir_tab);
}
@@ -642,10 +642,10 @@ Error System::EditFile(Item & item, bool with_url, int notify_code)
if( item.type != Item::file )
return WINIX_ERR_FILE_EXPECTED;
if( request->session && request->session->puser )
request->item.modification_user_id = request->session->puser->id;
if( cur->session && cur->session->puser )
cur->request->item.modification_user_id = cur->session->puser->id;
else
request->item.modification_user_id = -1;
cur->request->item.modification_user_id = -1;
item.SetDateModifyToNow();
Error status = db->EditItemById(item, with_url);
@@ -669,8 +669,8 @@ time_t System::LocalTime(time_t gmt_time)
{
int time_offset;
if( request->session && request->session->puser )
time_offset = request->session->puser->time_zone_offset;
if( cur->session && cur->session->puser )
time_offset = cur->session->puser->time_zone_offset;
else
time_offset = config->time_zone_offset_guest;
@@ -909,40 +909,40 @@ int System::FollowAllLinks(const std::wstring & link_to,
// the same as FollowAllLinks but operates on request->dir_tab and request->item
// the same as FollowAllLinks but operates on cur->request->dir_tab and cur->request->item
// and returns bool
// the method is making a redirection if needed
bool System::FollowAllLinks(const std::wstring & link_to,
bool follow_dir_default, bool stop_on_link_redirect, bool check_access)
{
int res = FollowAllLinks(request->dir_tab, link_to, temp_follow_dir_tab, temp_follow_item,
int res = FollowAllLinks(cur->request->dir_tab, link_to, temp_follow_dir_tab, temp_follow_item,
follow_dir_default, stop_on_link_redirect, check_access);
bool ok = (res == 0 || res == 1);
if( ok )
{
request->dir_tab = temp_follow_dir_tab;
cur->request->dir_tab = temp_follow_dir_tab;
if( res == 0 )
{
request->is_item = false;
request->item.Clear();
request->last_item = request->dir_tab.back();
cur->request->is_item = false;
cur->request->item.Clear();
cur->request->last_item = cur->request->dir_tab.back();
if( !request->dir_tab.back()->link_to.empty() )
RedirectTo(request->dir_tab.back()->link_to);
if( !cur->request->dir_tab.back()->link_to.empty() )
RedirectTo(cur->request->dir_tab.back()->link_to);
log << log3 << "System: current directory changed" << logend;
}
else
{
request->is_item = true;
request->item = temp_follow_item;
request->last_item = &request->item;
cur->request->is_item = true;
cur->request->item = temp_follow_item;
cur->request->last_item = &cur->request->item;
if( request->item.type == Item::symlink )
RedirectTo(request->item.link_to); // request->item.link_to is not empty
if( cur->request->item.type == Item::symlink )
RedirectTo(cur->request->item.link_to); // cur->request->item.link_to is not empty
log << log3 << "System: current directory changed and the new file loaded" << logend;
}
@@ -952,9 +952,9 @@ bool System::FollowAllLinks(const std::wstring & link_to,
else
{
if( res == 5 || res == 6 )
request->status = WINIX_ERR_PERMISSION_DENIED;
cur->request->status = WINIX_ERR_PERMISSION_DENIED;
else
request->status = WINIX_ERR_NO_ITEM;
cur->request->status = WINIX_ERR_NO_ITEM;
}
return ok;