added: a new mount type: static
some path in winix can be redirected to a specified static directory git-svn-id: svn://ttmath.org/publicrep/winix/trunk@738 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
fb4742e165
commit
c49c35cfbd
65
core/app.cpp
65
core/app.cpp
|
@ -211,9 +211,10 @@ void App::ProcessRequestThrow()
|
||||||
|
|
||||||
plugin.Call(WINIX_SESSION_CHANGED);
|
plugin.Call(WINIX_SESSION_CHANGED);
|
||||||
|
|
||||||
functions.Parse();
|
functions.Parse(); // parsing directories,files,functions and parameters
|
||||||
system.mounts.CalcCurMount();
|
system.mounts.CalcCurMount();
|
||||||
|
|
||||||
|
if( system.mounts.pmount->type != system.mounts.MountTypeStatic() )
|
||||||
Make();
|
Make();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -539,6 +540,59 @@ void App::PrepareSessionCookie()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void App::SendHeadersStatic()
|
||||||
|
{
|
||||||
|
if( PathHasUpDir(cur.request->env_request_uri) )
|
||||||
|
{
|
||||||
|
log << log1 << "App: incorrect path for a static file" << logend;
|
||||||
|
SendHeadersForbidden();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::wstring & index_str = system.mounts.pmount->FirstArg(system.mounts.MountParStatic());
|
||||||
|
size_t index = Toi(index_str);
|
||||||
|
|
||||||
|
if( index >= config.static_dirs.size() )
|
||||||
|
{
|
||||||
|
log << log1 << "App: static dir with index " << index << " is not defined in the config" << logend;
|
||||||
|
SendHeadersForbidden();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ezc::WideToUTF8(config.http_header_send_file, sendheadersstatic_t);
|
||||||
|
Ezc::WideToUTF8(config.static_dirs[index], sendheadersstatic_t2);
|
||||||
|
|
||||||
|
Item * dir = system.dirs.GetDir(system.mounts.pmount->dir_id);
|
||||||
|
|
||||||
|
if( !dir )
|
||||||
|
{
|
||||||
|
log << log1 << "App: cannot find the mount directory" << logend;
|
||||||
|
SendHeadersForbidden();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t how_many_dirs = system.dirs.DirLevel(dir->id);
|
||||||
|
const char * path = SkipDirs(cur.request->env_request_uri, how_many_dirs);
|
||||||
|
|
||||||
|
// the path begins with a slash only if how_many_dirs is zero
|
||||||
|
while( *path == '/' )
|
||||||
|
path += 1;
|
||||||
|
|
||||||
|
FCGX_FPrintF(fcgi_request.out, "%s: %s/%s\r\n", sendheadersstatic_t.c_str(), sendheadersstatic_t2.c_str(), path);
|
||||||
|
FCGX_PutS("Status: 200 OK\r\n", fcgi_request.out);
|
||||||
|
log << log2 << "Sending file from a static mountpoint: " << sendheadersstatic_t2 << "/" << path << logend;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void App::SendHeadersForbidden()
|
||||||
|
{
|
||||||
|
FCGX_PutS("Status: 403 Forbidden\r\n", fcgi_request.out);
|
||||||
|
FCGX_PutS("Content-Type: text/html\r\n", fcgi_request.out);
|
||||||
|
log << log2 << "Request: response: 403 Forbidden" << logend;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void App::SendHeaders(bool compressing, int compress_encoding, Header header)
|
void App::SendHeaders(bool compressing, int compress_encoding, Header header)
|
||||||
{
|
{
|
||||||
|
@ -555,6 +609,11 @@ void App::SendHeaders(bool compressing, int compress_encoding, Header header)
|
||||||
log << log2 << "Redirect to: " << cur.request->aredirect_to << logend;
|
log << log2 << "Redirect to: " << cur.request->aredirect_to << logend;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
if( system.mounts.pmount->type == system.mounts.MountTypeStatic() )
|
||||||
|
{
|
||||||
|
SendHeadersStatic();
|
||||||
|
}
|
||||||
|
else
|
||||||
if( !cur.request->x_sendfile.empty() )
|
if( !cur.request->x_sendfile.empty() )
|
||||||
{
|
{
|
||||||
static std::string temp, temp2; // !! wrzucic gdzies to
|
static std::string temp, temp2; // !! wrzucic gdzies to
|
||||||
|
@ -577,9 +636,7 @@ void App::SendHeaders(bool compressing, int compress_encoding, Header header)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case h_403:
|
case h_403:
|
||||||
FCGX_PutS("Status: 403 Forbidden\r\n", fcgi_request.out);
|
SendHeadersForbidden();
|
||||||
FCGX_PutS("Content-Type: text/html\r\n", fcgi_request.out);
|
|
||||||
log << log2 << "Request: response: 403 Forbidden" << logend;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -130,6 +130,7 @@ private:
|
||||||
pthread_t signal_thread;
|
pthread_t signal_thread;
|
||||||
std::string url_to_fetch_on_exit;
|
std::string url_to_fetch_on_exit;
|
||||||
std::string source_a;
|
std::string source_a;
|
||||||
|
std::string sendheadersstatic_t, sendheadersstatic_t2;
|
||||||
|
|
||||||
void ProcessRequestThrow();
|
void ProcessRequestThrow();
|
||||||
void ProcessRequest();
|
void ProcessRequest();
|
||||||
|
@ -154,6 +155,8 @@ private:
|
||||||
void PrepareSessionCookie();
|
void PrepareSessionCookie();
|
||||||
void AddDebugInfo(std::wstring & out);
|
void AddDebugInfo(std::wstring & out);
|
||||||
void FilterCompressSend(bool compressing, int compress_encoding, const std::wstring & source_ref);
|
void FilterCompressSend(bool compressing, int compress_encoding, const std::wstring & source_ref);
|
||||||
|
void SendHeadersStatic();
|
||||||
|
void SendHeadersForbidden();
|
||||||
void SendHeaders(bool compressing, int compress_encoding, Header header);
|
void SendHeaders(bool compressing, int compress_encoding, Header header);
|
||||||
int SelectDeflateVersion();
|
int SelectDeflateVersion();
|
||||||
void SelectCompression(size_t source_len, bool & compression_allowed, int & compression_encoding);
|
void SelectCompression(size_t source_len, bool & compression_allowed, int & compression_encoding);
|
||||||
|
|
|
@ -116,6 +116,8 @@ void Config::AssignValues(bool stdout_is_closed)
|
||||||
upload_dir = Text(L"upload_dir");
|
upload_dir = Text(L"upload_dir");
|
||||||
upload_dirs_chmod = Int(L"upload_dirs_chmod", 0750);
|
upload_dirs_chmod = Int(L"upload_dirs_chmod", 0750);
|
||||||
upload_files_chmod = Int(L"upload_files_chmod", 0640);
|
upload_files_chmod = Int(L"upload_files_chmod", 0640);
|
||||||
|
ListText(L"static_dirs", static_dirs);
|
||||||
|
dont_use_static_dirs = Bool(L"dont_use_static_dirs", false);
|
||||||
create_thumb = Bool(L"create_thumb", true);
|
create_thumb = Bool(L"create_thumb", true);
|
||||||
thumb_mode = Int(L"thumb_mode", 2);
|
thumb_mode = Int(L"thumb_mode", 2);
|
||||||
thumb_cx = Size(L"thumb_cx", 150);
|
thumb_cx = Size(L"thumb_cx", 150);
|
||||||
|
@ -215,6 +217,9 @@ void Config::SetAdditionalVariables()
|
||||||
else
|
else
|
||||||
html_filter_orphans_mode = HTMLFilter::orphan_nbsp;
|
html_filter_orphans_mode = HTMLFilter::orphan_nbsp;
|
||||||
|
|
||||||
|
for(size_t i=0 ; i<static_dirs.size() ; ++i)
|
||||||
|
NoLastSlash(static_dirs[i]);
|
||||||
|
|
||||||
CheckLocale();
|
CheckLocale();
|
||||||
CheckPasswd();
|
CheckPasswd();
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,6 +206,24 @@ public:
|
||||||
// directory for static files
|
// directory for static files
|
||||||
std::wstring upload_dir;
|
std::wstring upload_dir;
|
||||||
|
|
||||||
|
// additional static directories *not* managed by winix
|
||||||
|
// you can refer to this directories by using 'static' mount point
|
||||||
|
// e.g.
|
||||||
|
// let we say in the config you have:
|
||||||
|
// static_dirs = ("/home/a", "/home/b", "/home/c")
|
||||||
|
// and in /etc/fstab (in winix) you have such a line:
|
||||||
|
// "static /my/dir simplefs static(2)"
|
||||||
|
// above line in /etc/fstab means that when a user enters http://domain.com/my/dir/file.txt
|
||||||
|
// then "file.txt" will be taken from "/home/c/file.txt"
|
||||||
|
// this is useful for some javascript files which are protected from running from other domains
|
||||||
|
std::vector<std::wstring> static_dirs;
|
||||||
|
|
||||||
|
// sometimes you can have trouble when you have set an incorrect static path in /etc/fstab
|
||||||
|
// in such a case set dont_use_static_dirs to true
|
||||||
|
// and winix will behave as there are not any static directories
|
||||||
|
// so you can correct your mistake and then set this value to false
|
||||||
|
bool dont_use_static_dirs;
|
||||||
|
|
||||||
// chmod of newly created directories (under upload_dir)
|
// chmod of newly created directories (under upload_dir)
|
||||||
// default: 0750
|
// default: 0750
|
||||||
int upload_dirs_chmod;
|
int upload_dirs_chmod;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This file is a part of Winix
|
* This file is a part of Winix
|
||||||
* and is not publicly distributed
|
* and is not publicly distributed
|
||||||
*
|
*
|
||||||
* Copyright (c) 2008-2010, Tomasz Sowa
|
* Copyright (c) 2008-2011, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -196,6 +196,30 @@ DirContainer::Iterator i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size_t Dirs::DirLevel(long id)
|
||||||
|
{
|
||||||
|
DirContainer::Iterator i;
|
||||||
|
size_t level = 0;
|
||||||
|
|
||||||
|
while( true )
|
||||||
|
{
|
||||||
|
i = dir_tab.FindId(id);
|
||||||
|
|
||||||
|
if( i == dir_tab.End() ||
|
||||||
|
i->parent_id == id ) // means a loop (something wrong in the db)
|
||||||
|
{
|
||||||
|
// we don't change path if there is no such a directory
|
||||||
|
return level;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( i->parent_id == -1 )
|
||||||
|
return level;
|
||||||
|
|
||||||
|
id = i->parent_id;
|
||||||
|
level += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Dirs::ChangeParent(long dir_id, long new_parent_id)
|
bool Dirs::ChangeParent(long dir_id, long new_parent_id)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This file is a part of Winix
|
* This file is a part of Winix
|
||||||
* and is not publicly distributed
|
* and is not publicly distributed
|
||||||
*
|
*
|
||||||
* Copyright (c) 2008-2010, Tomasz Sowa
|
* Copyright (c) 2008-2011, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -77,6 +77,12 @@ public:
|
||||||
// !! jak juz wczesniejsze nazwy beda zmienione to tutaj damy AddDir() /AddDir() juz istnieje przeciez?/
|
// !! jak juz wczesniejsze nazwy beda zmienione to tutaj damy AddDir() /AddDir() juz istnieje przeciez?/
|
||||||
Error AddDirectory(Item & item, bool add_to_dir_tab = false, Item ** pdir = 0, int notify_code = 0);
|
Error AddDirectory(Item & item, bool add_to_dir_tab = false, Item ** pdir = 0, int notify_code = 0);
|
||||||
|
|
||||||
|
// returns how many levels of directories there are
|
||||||
|
// "/" -> 0 (root dir)
|
||||||
|
// "/abc" -> 1
|
||||||
|
// "/abc/def" -> 2
|
||||||
|
size_t DirLevel(long id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Cur * cur;
|
Cur * cur;
|
||||||
|
|
154
core/misc.h
154
core/misc.h
|
@ -389,6 +389,160 @@ void NoFirstHttp(StringType & s)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
this method returns true if there are two dots meaning 'go up' somewhere in the path
|
||||||
|
|
||||||
|
for example such paths return true:
|
||||||
|
".."
|
||||||
|
"test/../path"
|
||||||
|
"test/where/../"
|
||||||
|
"test/where/.."
|
||||||
|
"../abc"
|
||||||
|
*/
|
||||||
|
template<class StringType>
|
||||||
|
bool PathHasUpDir(const StringType * str)
|
||||||
|
{
|
||||||
|
size_t i = 0;
|
||||||
|
|
||||||
|
while( str[i] )
|
||||||
|
{
|
||||||
|
if( str[i]=='.' && str[i+1]=='.' )
|
||||||
|
{
|
||||||
|
i += 2;
|
||||||
|
|
||||||
|
if( str[i]=='/' || str[i]==0 )
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// skipping until to next slash
|
||||||
|
while( str[i] && str[i]!='/' )
|
||||||
|
i += 1;
|
||||||
|
|
||||||
|
// skipping the slash (or slashes)
|
||||||
|
while( str[i]=='/' )
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class StringType>
|
||||||
|
bool PathHasUpDir(const StringType & str)
|
||||||
|
{
|
||||||
|
return PathHasUpDir(str.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
this method calculates how many directories there are in the given path
|
||||||
|
input:
|
||||||
|
str - path
|
||||||
|
last_is_dir - true if the last part of the path should be treated as a directory too
|
||||||
|
|
||||||
|
samples:
|
||||||
|
HowManyDirs("", false) -> 0
|
||||||
|
HowManyDirs("", true) -> 0
|
||||||
|
HowManyDirs("abc", false) -> 0
|
||||||
|
HowManyDirs("abc", true) -> 1
|
||||||
|
HowManyDirs("/abc/", true) -> 1
|
||||||
|
HowManyDirs("////", false) -> 0
|
||||||
|
HowManyDirs("////", true) -> 0
|
||||||
|
HowManyDirs("////abc", false) -> 0
|
||||||
|
HowManyDirs("////abc", true) -> 1
|
||||||
|
HowManyDirs("/var/static", false) -> 1
|
||||||
|
HowManyDirs("/var/static", true) -> 2
|
||||||
|
HowManyDirs("/var/static/", false) -> 2
|
||||||
|
HowManyDirs("/var/static/", true) -> 2
|
||||||
|
*/
|
||||||
|
template<class StringType>
|
||||||
|
size_t HowManyDirs(const StringType * str, bool is_last_dir = false)
|
||||||
|
{
|
||||||
|
size_t res = 0;
|
||||||
|
size_t i = 0;
|
||||||
|
|
||||||
|
// first slash (root dir) is not calculated
|
||||||
|
while( str[i]=='/' )
|
||||||
|
i += 1;
|
||||||
|
|
||||||
|
while( str[i] )
|
||||||
|
{
|
||||||
|
if( str[i]=='/' )
|
||||||
|
{
|
||||||
|
res += 1;
|
||||||
|
|
||||||
|
while( str[i]=='/' )
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( is_last_dir && i>0 && str[i-1]!='/' )
|
||||||
|
res += 1;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<class StringType>
|
||||||
|
size_t HowManyDirs(const StringType & str, bool is_last_dir = false)
|
||||||
|
{
|
||||||
|
return HowManyDirs(str.c_str(), is_last_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
this method skips some first directories from given path
|
||||||
|
|
||||||
|
samples:
|
||||||
|
SkipDirs("/var/test", 1) -> "test"
|
||||||
|
SkipDirs("/var/test/somewhere", 1) -> "test/somewhere"
|
||||||
|
SkipDirs("/var/test/somewhere", 2) -> "somewhere"
|
||||||
|
SkipDirs("/var/test/somewhere", 10) -> ""
|
||||||
|
*/
|
||||||
|
template<class StringType>
|
||||||
|
const StringType * SkipDirs(const StringType * str, size_t how_many_skip)
|
||||||
|
{
|
||||||
|
size_t i = 0;
|
||||||
|
size_t skipped = 0;
|
||||||
|
|
||||||
|
if( how_many_skip == 0 )
|
||||||
|
return str;
|
||||||
|
|
||||||
|
// first slash (root dir) is not calculated
|
||||||
|
while( str[i]=='/' )
|
||||||
|
i += 1;
|
||||||
|
|
||||||
|
while( str[i] )
|
||||||
|
{
|
||||||
|
if( str[i]=='/' )
|
||||||
|
{
|
||||||
|
skipped += 1;
|
||||||
|
|
||||||
|
while( str[i]=='/' )
|
||||||
|
i += 1;
|
||||||
|
|
||||||
|
if( skipped == how_many_skip )
|
||||||
|
return str+i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return str + i;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool ValidateEmail(const std::wstring & email);
|
bool ValidateEmail(const std::wstring & email);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This file is a part of Winix
|
* This file is a part of Winix
|
||||||
* and is not publicly distributed
|
* and is not publicly distributed
|
||||||
*
|
*
|
||||||
* Copyright (c) 2010, Tomasz Sowa
|
* Copyright (c) 2010-2011, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -15,9 +15,24 @@
|
||||||
MountParser::MountParser()
|
MountParser::MountParser()
|
||||||
{
|
{
|
||||||
dirs = 0;
|
dirs = 0;
|
||||||
|
skip_static = false;
|
||||||
mount_type_tab = 0;
|
mount_type_tab = 0;
|
||||||
mount_fs_tab = 0;
|
mount_fs_tab = 0;
|
||||||
mount_par_tab = 0;
|
mount_par_tab = 0;
|
||||||
|
static_mount_id = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void MountParser::SkipStaticDirs(bool skip)
|
||||||
|
{
|
||||||
|
skip_static = skip;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void MountParser::SetStaticMountId(int id)
|
||||||
|
{
|
||||||
|
static_mount_id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -360,6 +375,12 @@ void MountParser::ReadRow(std::map<long, Mount> & output)
|
||||||
ReadMountParams();
|
ReadMountParams();
|
||||||
|
|
||||||
if( err == WINIX_ERR_OK )
|
if( err == WINIX_ERR_OK )
|
||||||
|
{
|
||||||
|
if( skip_static && mount.type==static_mount_id )
|
||||||
|
{
|
||||||
|
log << log1 << "MP: static mount points are skipped (dont_use_static_dirs in config is true)" << logend;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
std::pair<std::map<long, Mount>::iterator, bool> res = output.insert( std::make_pair(mount.dir_id, mount) );
|
std::pair<std::map<long, Mount>::iterator, bool> res = output.insert( std::make_pair(mount.dir_id, mount) );
|
||||||
|
|
||||||
|
@ -367,6 +388,8 @@ void MountParser::ReadRow(std::map<long, Mount> & output)
|
||||||
log << log1 << "MP: this mount point exists (skipped)" << logend;
|
log << log1 << "MP: this mount point exists (skipped)" << logend;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
SkipLine();
|
SkipLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This file is a part of Winix
|
* This file is a part of Winix
|
||||||
* and is not publicly distributed
|
* and is not publicly distributed
|
||||||
*
|
*
|
||||||
* Copyright (c) 2010, Tomasz Sowa
|
* Copyright (c) 2010-2011, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -28,6 +28,10 @@ class MountParser
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MountParser();
|
MountParser();
|
||||||
|
|
||||||
|
void SkipStaticDirs(bool skip);
|
||||||
|
void SetStaticMountId(int id);
|
||||||
|
|
||||||
Error Parse(const std::wstring & input, std::map<long, Mount> & output);
|
Error Parse(const std::wstring & input, std::map<long, Mount> & output);
|
||||||
void SetDirs(Dirs * pdirs);
|
void SetDirs(Dirs * pdirs);
|
||||||
void SetMountTypeTab(const std::vector<std::wstring> & tab);
|
void SetMountTypeTab(const std::vector<std::wstring> & tab);
|
||||||
|
@ -37,6 +41,8 @@ public:
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Dirs * dirs;
|
Dirs * dirs;
|
||||||
|
bool skip_static;
|
||||||
|
int static_mount_id;
|
||||||
|
|
||||||
const std::vector<std::wstring> * mount_type_tab;
|
const std::vector<std::wstring> * mount_type_tab;
|
||||||
const std::vector<std::wstring> * mount_fs_tab;
|
const std::vector<std::wstring> * mount_fs_tab;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This file is a part of Winix
|
* This file is a part of Winix
|
||||||
* and is not publicly distributed
|
* and is not publicly distributed
|
||||||
*
|
*
|
||||||
* Copyright (c) 2009-2010, Tomasz Sowa
|
* Copyright (c) 2009-2011, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -19,12 +19,21 @@
|
||||||
Mounts::Mounts()
|
Mounts::Mounts()
|
||||||
{
|
{
|
||||||
pmount = &empty_mount;
|
pmount = &empty_mount;
|
||||||
|
skip_static = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Mounts::SkipStaticDirs(bool skip)
|
||||||
|
{
|
||||||
|
skip_static = skip;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Mounts::CreateMountType()
|
void Mounts::CreateMountType()
|
||||||
{
|
{
|
||||||
mount_type_cms = AddMountType(L"cms");
|
mount_type_cms = AddMountType(L"cms");
|
||||||
|
mount_type_static = AddMountType(L"static");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,6 +56,8 @@ void Mounts::CreateMountPar()
|
||||||
mount_par_mkdir_on = AddMountPar(L"mkdir_on");
|
mount_par_mkdir_on = AddMountPar(L"mkdir_on");
|
||||||
mount_par_app = AddMountPar(L"app");
|
mount_par_app = AddMountPar(L"app");
|
||||||
mount_par_html_template = AddMountPar(L"html_template");
|
mount_par_html_template = AddMountPar(L"html_template");
|
||||||
|
mount_par_static = AddMountPar(L"static");
|
||||||
|
mount_par_css = AddMountPar(L"css");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -167,6 +178,8 @@ const std::wstring & Mounts::GetMountPar(int id)
|
||||||
// reading from 'mounts'
|
// reading from 'mounts'
|
||||||
Error Mounts::ReadMounts(const std::wstring & mounts)
|
Error Mounts::ReadMounts(const std::wstring & mounts)
|
||||||
{
|
{
|
||||||
|
mount_parser.SkipStaticDirs(skip_static);
|
||||||
|
mount_parser.SetStaticMountId(mount_type_static);
|
||||||
mount_parser.SetDirs(dirs);
|
mount_parser.SetDirs(dirs);
|
||||||
mount_parser.SetMountTypeTab(mount_type_tab);
|
mount_parser.SetMountTypeTab(mount_type_tab);
|
||||||
mount_parser.SetMountFsTab(mount_fs_tab);
|
mount_parser.SetMountFsTab(mount_fs_tab);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This file is a part of Winix
|
* This file is a part of Winix
|
||||||
* and is not publicly distributed
|
* and is not publicly distributed
|
||||||
*
|
*
|
||||||
* Copyright (c) 2009-2010, Tomasz Sowa
|
* Copyright (c) 2009-2011, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -28,6 +28,9 @@ class Mounts
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
void SkipStaticDirs(bool skip);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
mount point's types
|
mount point's types
|
||||||
*/
|
*/
|
||||||
|
@ -37,6 +40,7 @@ public:
|
||||||
|
|
||||||
// id of a specific mount type (the id is always valid)
|
// id of a specific mount type (the id is always valid)
|
||||||
int MountTypeCms() { return mount_type_cms; }
|
int MountTypeCms() { return mount_type_cms; }
|
||||||
|
int MountTypeStatic() { return mount_type_static; }
|
||||||
|
|
||||||
// return -1 if there is no such a mount type
|
// return -1 if there is no such a mount type
|
||||||
// or index otherwhise
|
// or index otherwhise
|
||||||
|
@ -72,7 +76,8 @@ public:
|
||||||
int MountParMkdirOn() { return mount_par_mkdir_on; }
|
int MountParMkdirOn() { return mount_par_mkdir_on; }
|
||||||
int MountParApp() { return mount_par_app; }
|
int MountParApp() { return mount_par_app; }
|
||||||
int MountParHtmlTemplate() { return mount_par_html_template; }
|
int MountParHtmlTemplate() { return mount_par_html_template; }
|
||||||
|
int MountParStatic() { return mount_par_static; }
|
||||||
|
int MountParCss() { return mount_par_css; }
|
||||||
|
|
||||||
void SetDirs(Dirs * pdirs);
|
void SetDirs(Dirs * pdirs);
|
||||||
void SetDb(Db * pdb);
|
void SetDb(Db * pdb);
|
||||||
|
@ -103,6 +108,8 @@ private:
|
||||||
Dirs * dirs;
|
Dirs * dirs;
|
||||||
Cur * cur;
|
Cur * cur;
|
||||||
|
|
||||||
|
bool skip_static;
|
||||||
|
|
||||||
Mount empty_mount;
|
Mount empty_mount;
|
||||||
const std::wstring empty_str;
|
const std::wstring empty_str;
|
||||||
|
|
||||||
|
@ -111,6 +118,7 @@ private:
|
||||||
std::vector<std::wstring> mount_type_tab;
|
std::vector<std::wstring> mount_type_tab;
|
||||||
|
|
||||||
int mount_type_cms;
|
int mount_type_cms;
|
||||||
|
int mount_type_static;
|
||||||
|
|
||||||
// simplefs
|
// simplefs
|
||||||
// hashfs
|
// hashfs
|
||||||
|
@ -131,6 +139,8 @@ private:
|
||||||
int mount_par_mkdir_on;
|
int mount_par_mkdir_on;
|
||||||
int mount_par_app;
|
int mount_par_app;
|
||||||
int mount_par_html_template;
|
int mount_par_html_template;
|
||||||
|
int mount_par_static;
|
||||||
|
int mount_par_css;
|
||||||
|
|
||||||
|
|
||||||
MountTab mount_tab;
|
MountTab mount_tab;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This file is a part of Winix
|
* This file is a part of Winix
|
||||||
* and is not publicly distributed
|
* and is not publicly distributed
|
||||||
*
|
*
|
||||||
* Copyright (c) 2010, Tomasz Sowa
|
* Copyright (c) 2010-2011, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -48,6 +48,7 @@ void System::Init()
|
||||||
dirs.SetNotify(¬ify);
|
dirs.SetNotify(¬ify);
|
||||||
dirs.ReadDirs();
|
dirs.ReadDirs();
|
||||||
|
|
||||||
|
mounts.SkipStaticDirs(config->dont_use_static_dirs);
|
||||||
mounts.SetDirs(&dirs);
|
mounts.SetDirs(&dirs);
|
||||||
mounts.SetDb(db);
|
mounts.SetDb(db);
|
||||||
mounts.SetCur(cur);
|
mounts.SetCur(cur);
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
[end]
|
[end]
|
||||||
|
|
||||||
|
|
||||||
[# in the future tinymce will be placed in doc_base_url_common]
|
|
||||||
[if winix_function_is "tinymce"]
|
[if winix_function_is "tinymce"]
|
||||||
<script type="text/javascript" src="[doc_base_url_static]/tiny_mce/tiny_mce.js"></script>
|
<!--<script type="text/javascript">document.domain = "www.slimaczek.pl";</script>-->
|
||||||
<script type="text/javascript" src="[doc_base_url_static]/tinymce.js"></script>
|
<script type="text/javascript" src="[doc_base_url]/var/staticcommon/tiny_mce/tiny_mce.js"></script>
|
||||||
|
<script type="text/javascript" src="[doc_base_url]/var/staticcommon/tinymce.js"></script>
|
||||||
[end]
|
[end]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -205,7 +205,11 @@ size_t buff_len = sizeof(buff) / sizeof(wchar_t);
|
||||||
void winix_show_content_in_full_window(Info & i)
|
void winix_show_content_in_full_window(Info & i)
|
||||||
{
|
{
|
||||||
if( cur->request->function )
|
if( cur->request->function )
|
||||||
i.res = (cur->request->function == &functions->fun_ckeditor || cur->request->function == &functions->fun_tinymce);
|
i.res = (cur->request->function == &functions->fun_ckeditor ||
|
||||||
|
cur->request->function == &functions->fun_tinymce ||
|
||||||
|
cur->request->function == &functions->fun_nicedit ||
|
||||||
|
cur->request->function == &functions->fun_vim ||
|
||||||
|
cur->request->function == &functions->fun_emacs );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue