added: parameter 'l' to 'ls' function

added: Db::ItemQuery struct for querying items
changed: some refactoring (renamed some config variables)




git-svn-id: svn://ttmath.org/publicrep/winix/trunk@589 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
Tomasz Sowa 2010-02-22 22:52:09 +00:00
parent 16e51cd4e5
commit 3702efc5be
29 changed files with 396 additions and 195 deletions

View File

@ -46,7 +46,7 @@ return true;
void Content::SetDefaultFunctionForFile() void Content::SetDefaultFunctionForFile()
{ {
if( request.item.static_auth != Item::static_none ) if( request.item.auth != Item::auth_none )
request.pfunction = data.functions.GetFunction(FUN_DOWNLOAD); request.pfunction = data.functions.GetFunction(FUN_DOWNLOAD);
else else
if( request.HasReadExecAccess(request.item) ) if( request.HasReadExecAccess(request.item) )
@ -320,7 +320,7 @@ bool sent = false;
return; return;
if( request.is_item && request.item.static_auth == Item::static_none && if( request.is_item && request.item.auth == Item::auth_none &&
request.item.content_type == Item::ct_raw && request.status == Error::ok && request.pfunction ) request.item.content_type == Item::ct_raw && request.status == Error::ok && request.pfunction )
{ {
if( request.pfunction->code == FUN_CAT ) if( request.pfunction->code == FUN_CAT )

View File

@ -55,7 +55,7 @@ class Content
void FunEmacs(); void FunEmacs();
void AddPathToStaticAuth(std::string & path); void AddPathToAuth(std::string & path);
void FunCKEditor(); void FunCKEditor();

View File

@ -27,8 +27,8 @@ void Content::FunDownload()
if( !request.HasReadAccess(request.item) || if( !request.HasReadAccess(request.item) ||
request.item.static_auth == Item::static_none || request.item.auth == Item::auth_none ||
data.static_simplefs_dir.empty() ) data.auth_simplefs_dir.empty() )
{ {
request.status = Error::permission_denied; request.status = Error::permission_denied;
return; return;

View File

@ -15,20 +15,25 @@
void Content::FunLs() void Content::FunLs()
{ {
if( request.is_item ) if( !request.is_item )
{ {
// we're showing only the item Db::ItemQuery iq;
request.item_table.push_back( request.item );
return;
}
// we're reading only files here
db.GetItems(request.item_table, request.dir_table.back()->id, Item::file, false, false, true);
/* iq.sel_content = false;
request.IsParam("ckeditor_browse");
*/ iq.WhereParentId(request.dir_table.back()->id);
iq.WhereType(Item::file);
if( request.IsParam("ckeditor_browse") )
{
iq.WhereAuth(Item::auth_image);
db.GetItems(request.item_table, iq);
}
else
{
db.GetItems(request.item_table, iq);
}
}
} }

View File

@ -157,7 +157,16 @@ Item * root = 0;
void Content::PrivFilesInDir(long parent_id) void Content::PrivFilesInDir(long parent_id)
{ {
db.GetItems(request.item_table, parent_id, Item::file, false, false, true); Db::ItemQuery iq;
iq.SetAll(false, false);
iq.sel_user_id = iq.sel_group_id = iq.sel_guest_name = iq.sel_privileges = true;
iq.WhereParentId(parent_id);
iq.WhereType(Item::file);
db.GetItems(request.item_table, iq);
std::vector<Item>::iterator i = request.item_table.begin(); std::vector<Item>::iterator i = request.item_table.begin();

View File

@ -39,13 +39,16 @@ void Content::FunThread()
return; return;
} }
bool asc = true; Db::ItemQuery iq;
if( data.mounts.pmount->IsArg(Mount::par_thread, "sort_desc") ) if( data.mounts.pmount->IsArg(Mount::par_thread, "sort_desc") )
asc = false; iq.sort_asc = false;
iq.WhereParentId(request.dir_table.back()->id);
iq.WhereType(Item::file);
iq.WhereAuth(Item::auth_none);
db.GetItems(request.item_table, request.dir_table.back()->id, Item::file, true, true, asc); db.GetItems(request.item_table, iq);
db.GetThreads(request.dir_table.back()->id, request.thread_tab); db.GetThreads(request.dir_table.back()->id, request.thread_tab);
CheckAccessToItems(); CheckAccessToItems();

View File

@ -50,7 +50,13 @@ void Content::FunTicket()
return; return;
} }
db.GetItems(request.item_table, request.dir_table.back()->id, Item::file, true, true, true); Db::ItemQuery iq;
iq.WhereParentId(request.dir_table.back()->id);
iq.WhereType(Item::file);
iq.WhereAuth(Item::auth_none);
db.GetItems(request.item_table, iq);
db.GetTickets(request.dir_table.back()->id, request.ticket_tab); db.GetTickets(request.dir_table.back()->id, request.ticket_tab);
TicketDeleteFirst(); TicketDeleteFirst();

View File

@ -115,7 +115,7 @@ void Content::UploadMulti()
request.item.subject = file_name; request.item.subject = file_name;
request.item.url = file_name; request.item.url = file_name;
request.item.static_auth = SelectFileType(file_name); request.item.auth = SelectFileType(file_name);
PrepareUrl(request.item); PrepareUrl(request.item);
PostFunEmacsAdd(); // always adding a new item PostFunEmacsAdd(); // always adding a new item
@ -142,7 +142,7 @@ void Content::UploadSingle()
request.item.privileges = 0644; // !! tymczasowo request.item.privileges = 0644; // !! tymczasowo
const char * file_name = request.post_file_table.begin()->second.filename.c_str(); const char * file_name = request.post_file_table.begin()->second.filename.c_str();
request.item.static_auth = SelectFileType(file_name); request.item.auth = SelectFileType(file_name);
if( !has_subject ) if( !has_subject )
request.item.subject = file_name; request.item.subject = file_name;

View File

@ -109,9 +109,9 @@ void Config::AssignValues()
data.log_stdout = false; data.log_stdout = false;
data.post_file_max = Int("post_file_max", 8388608); // 8 MB data.post_file_max = Int("post_file_max", 8388608); // 8 MB
data.static_simplefs_dir = Text("static_simplefs_dir"); data.auth_simplefs_dir = Text("auth_simplefs_dir");
data.static_hashfs_dir = Text("static_hashfs_dir"); data.auth_hashfs_dir = Text("auth_hashfs_dir");
data.static_tmp_dir = Text("static_tmp_dir"); data.auth_tmp_dir = Text("auth_tmp_dir");
data.templates_dir = Text("templates_dir"); data.templates_dir = Text("templates_dir");
data.templates_dir_default = Text("templates_dir_default"); data.templates_dir_default = Text("templates_dir_default");
@ -121,19 +121,17 @@ void Config::AssignValues()
data.db_pass = Text("db_pass"); data.db_pass = Text("db_pass");
data.item_url_empty = Text("item_url_empty"); data.item_url_empty = Text("item_url_empty");
data.base_server = Text("base_server"); data.base_server = Text("base_server");
data.base_url_prefix = Text("base_url_prefix"); data.base_url = Text("base_url");
data.base_url_static_prefix = Text("base_url_static_prefix"); data.base_url_auth = Text("base_url_auth");
data.base_url_static_ext_prefix = Text("base_url_static_ext_prefix"); data.base_url_static = Text("base_url_static");
data.base_url_static_auth_prefix = Text("base_url_static_auth_prefix"); data.base_url_common = Text("base_url_common");
NoLastSlash(data.base_server); NoLastSlash(data.base_server);
NoFirstHttp(data.base_server); NoLastSlash(data.base_url);
NoLastSlash(data.base_url_auth);
data.base_url = data.base_url_prefix + data.base_server; NoLastSlash(data.base_url_static);
data.base_url_static = data.base_url_static_prefix + data.base_server; NoLastSlash(data.base_url_common);
data.base_url_static_ext = data.base_url_static_ext_prefix + data.base_server;
data.base_url_static_auth = data.base_url_static_auth_prefix + data.base_server;
data.priv_no_user = Text("priv_no_user", "-- no user --"); data.priv_no_user = Text("priv_no_user", "-- no user --");
data.priv_no_group = Text("priv_no_group", "-- no group --"); data.priv_no_group = Text("priv_no_group", "-- no group --");
@ -247,12 +245,18 @@ void Config::NoLastSlash(std::string & s)
{ {
if( s.empty() ) if( s.empty() )
return; return;
if( *(--s.end()) == '/' )
s.erase(--s.end()); size_t i = s.size();
for( ; i>0 && s[i-1]=='/' ; --i);
if( i < s.size() )
s.erase(i);
} }
void Config::NoFirstHttp(std::string & s) void Config::NoFirstHttp(std::string & s)
{ {
if( s.empty() ) if( s.empty() )

View File

@ -27,7 +27,7 @@ Data::Data()
void Data::SetAdditionalVariables() void Data::SetAdditionalVariables()
{ {
SetHttpHost(base_url, base_url_http_host); SetHttpHost(base_url, base_url_http_host);
SetHttpHost(base_url_static_auth, base_url_static_auth_http_host); SetHttpHost(base_url_auth, base_url_auth_http_host);
} }

View File

@ -2,7 +2,7 @@
* This file is a part of CMSLU -- Content Management System like Unix * This file is a part of CMSLU -- Content Management System like Unix
* and is not publicly distributed * and is not publicly distributed
* *
* Copyright (c) 2008-2009, Tomasz Sowa * Copyright (c) 2008-2010, Tomasz Sowa
* All rights reserved. * All rights reserved.
* *
*/ */
@ -69,12 +69,6 @@ public:
std::string db_user; std::string db_user;
std::string db_pass; std::string db_pass;
std::string base_server;
std::string base_url_prefix;
std::string base_url_static_prefix;
std::string base_url_static_ext_prefix;
std::string base_url_static_auth_prefix;
std::string http_session_id_name; std::string http_session_id_name;
// when the HOST_HTTP environment variable doesn't point into 'base_url' (the part 'http://' and the last slash is removed) // when the HOST_HTTP environment variable doesn't point into 'base_url' (the part 'http://' and the last slash is removed)
@ -113,12 +107,12 @@ public:
int post_file_max; int post_file_max;
// directories for static files // directories for static files
std::string static_simplefs_dir; std::string auth_simplefs_dir;
std::string static_hashfs_dir; std::string auth_hashfs_dir;
// temporary directory for static content used by the upload function // temporary directory for static content used by the upload function
// should be on the same partition as static_simplefs_dir and static_hashfs_dir // should be on the same partition as auth_simplefs_dir and auth_hashfs_dir
std::string static_tmp_dir; std::string auth_tmp_dir;
// default locale: en pl // default locale: en pl
std::string locale_str; std::string locale_str;
@ -129,19 +123,20 @@ public:
// directory with default locale files (those from winix) // directory with default locale files (those from winix)
std::string locale_dir_default; std::string locale_dir_default;
// below variables are based on the other config variables // the main address of the server (e.g. someserver.com) (without the 'www' part etc)
std::string base_server;
// base_url_prefix + base_server // the main address of the site (e.g. http://www.someserver.com)
std::string base_url; std::string base_url;
// base_url_static_prefix + base_server // static content authorized by winix
std::string base_url_auth;
// static content not authorized by winix
std::string base_url_static; std::string base_url_static;
// additional static server for common content such as ckeditor // additional static server for common content (not authorized)
std::string base_url_static_ext; std::string base_url_common;
// base_url_static_auth_prefix + base_server
std::string base_url_static_auth;
// separator used in <title> html tag // separator used in <title> html tag
std::string title_separator; std::string title_separator;
@ -166,7 +161,7 @@ public:
// set by SetAdditionalVariables() // set by SetAdditionalVariables()
// without the first part http:// (or https://) or the whole string is empty // without the first part http:// (or https://) or the whole string is empty
std::string base_url_http_host; std::string base_url_http_host;
std::string base_url_static_auth_http_host; std::string base_url_auth_http_host;

View File

@ -421,7 +421,7 @@ Error Db::AddItemIntoItem(Item & item)
AssertConnection(); AssertConnection();
std::ostringstream query; std::ostringstream query;
query << "insert into core.item (user_id, group_id, privileges, date_creation, date_modification, type, " query << "insert into core.item (user_id, group_id, privileges, date_creation, date_modification, type, "
"parent_id, content_id, static_auth, default_item, subject, guest_name, url) values ("; "parent_id, content_id, auth, default_item, subject, guest_name, url) values (";
query << '\'' << item.user_id << "', "; query << '\'' << item.user_id << "', ";
query << '\'' << item.group_id << "', "; query << '\'' << item.group_id << "', ";
query << '\'' << item.privileges << "', "; query << '\'' << item.privileges << "', ";
@ -430,7 +430,7 @@ Error Db::AddItemIntoItem(Item & item)
query << '\'' << static_cast<int>(item.type) << "', "; query << '\'' << static_cast<int>(item.type) << "', ";
query << '\'' << item.parent_id << "', "; query << '\'' << item.parent_id << "', ";
query << '\'' << item.content_id << "', "; query << '\'' << item.content_id << "', ";
query << '\'' << static_cast<int>(item.static_auth) << "', "; query << '\'' << static_cast<int>(item.auth) << "', ";
query << '\'' << item.default_item << "', "; query << '\'' << item.default_item << "', ";
query << '\'' << Escape(item.subject) << "', "; query << '\'' << Escape(item.subject) << "', ";
query << '\'' << Escape(item.guest_name) << "', "; query << '\'' << Escape(item.guest_name) << "', ";
@ -527,7 +527,7 @@ Error Db::EditItemInItem(Item & item, bool with_url)
AssertConnection(); AssertConnection();
std::ostringstream query; std::ostringstream query;
query << "update core.item set (user_id, group_id, privileges, date_creation, date_modification, type, " query << "update core.item set (user_id, group_id, privileges, date_creation, date_modification, type, "
"default_item, parent_id, subject, guest_name, static_auth"; "default_item, parent_id, subject, guest_name, auth";
if( with_url ) if( with_url )
query << ", url"; query << ", url";
@ -543,7 +543,7 @@ Error Db::EditItemInItem(Item & item, bool with_url)
query << '\'' << item.parent_id << "', "; query << '\'' << item.parent_id << "', ";
query << '\'' << Escape(item.subject) << "', "; query << '\'' << Escape(item.subject) << "', ";
query << '\'' << Escape(item.guest_name) << "', "; query << '\'' << Escape(item.guest_name) << "', ";
query << '\'' << static_cast<int>(item.static_auth) << "' "; query << '\'' << static_cast<int>(item.auth) << "' ";
if( with_url ) if( with_url )
{ {
@ -752,49 +752,56 @@ return result;
PGresult * Db::GetItemsQuery(long parent_id, Item::Type type, bool with_subject, bool with_content, bool sort_asc) PGresult * Db::GetItemsQuery(const ItemQuery & iq)
{ {
std::ostringstream query; std::ostringstream query;
query << "select item.id, user_id, group_id, privileges, date_creation, date_modification, url, type, parent_id, " query << "select item.id";
"content_id, default_item, guest_name, static_auth";
if( type != Item::dir ) if( iq.sel_parent_id ) query << " ,parent_id";
{ if( iq.sel_user_id ) query << " ,user_id";
if( with_subject ) if( iq.sel_group_id ) query << " ,group_id";
query << ", subject"; if( iq.sel_guest_name) query << " ,guest_name";
if( iq.sel_privileges ) query << " ,privileges";
if( with_content ) if( iq.sel_date ) query << " ,date_creation, date_modification";
query << ", content, content_type"; if( iq.sel_subject ) query << " ,subject";
} if( iq.sel_content ) query << " ,content, content_type, content_id";
if( iq.sel_url ) query << " ,url";
if( iq.sel_type ) query << " ,type";
if( iq.sel_default_item ) query << " ,default_item";
if( iq.sel_auth ) query << " ,auth";
query << " from core.item"; query << " from core.item";
if( type != Item::dir && with_content ) if( iq.sel_content ) query << " left join core.content on item.content_id = content.id";
query << " left join core.content on item.content_id = content.id";
query << " where parent_id='" << parent_id << "'"; if( iq.where_id || iq.where_parent_id || iq.where_type || iq.where_auth )
{
query << " where ";
const char * add_and = " and ";
const char * if_and = "";
if( iq.where_id ) { query << if_and << "id='" << iq.id << "'" ; if_and = add_and; }
if( iq.where_parent_id ) { query << if_and << "parent_id='" << iq.parent_id << "'" ; if_and = add_and; }
if( iq.where_type ) { query << if_and << "type='" << static_cast<int>(iq.type) << "'" ; if_and = add_and; }
if( iq.where_auth ) { query << if_and << "auth='" << static_cast<int>(iq.auth) << "'" ; if_and = add_and; }
}
if( type == Item::dir )
query << " and type='0'";
if( type == Item::file )
query << " and type='1'";
query << " order by item.date_creation"; query << " order by item.date_creation";
if( sort_asc ) if( iq.sort_asc )
query << " asc"; query << " asc;";
else else
query << " desc"; query << " desc;";
query << ';';
return AssertQuery(query.str()); return AssertQuery(query.str());
} }
void Db::GetItems(std::vector<Item> & item_table, long parent_id, Item::Type type, bool with_subject, bool with_content, bool sort_asc)
void Db::GetItems(std::vector<Item> & item_table, const ItemQuery & item_query)
{ {
item_table.clear(); item_table.clear();
PGresult * r = 0; PGresult * r = 0;
@ -805,7 +812,7 @@ void Db::GetItems(std::vector<Item> & item_table, long parent_id, Item::Type typ
{ {
AssertConnection(); AssertConnection();
r = GetItemsQuery(parent_id, type, with_subject, with_content, sort_asc); r = GetItemsQuery(item_query);
AssertResultStatus(r, PGRES_TUPLES_OK); AssertResultStatus(r, PGRES_TUPLES_OK);
Item item; Item item;

View File

@ -49,7 +49,79 @@ public:
Error EditItemByUrl(Item & item, bool with_url = true); Error EditItemByUrl(Item & item, bool with_url = true);
void CheckAllUrlSubject(); void CheckAllUrlSubject();
void GetItems(std::vector<Item> & item_table, long parent_id, Item::Type type, bool with_subject, bool with_content, bool sort_asc);
struct ItemQuery
{
// id is selected always
bool sel_parent_id; // parent_id
bool sel_user_id; // user_id
bool sel_group_id; // group_id
bool sel_guest_name; // guest_name
bool sel_privileges; // privileges
bool sel_date; // date_creation, date_modification
bool sel_subject; // subject
bool sel_content; // content, content_type, (content_id)
bool sel_url; // url
bool sel_type; // type (dir, file, none)
bool sel_default_item; // default_item
bool sel_auth; // auth
bool where_id; //
bool where_parent_id; //
bool where_type;
bool where_auth;
long id; // if where_id is true
long parent_id; // if where_parent_id is true
Item::Type type;
Item::Auth auth;
bool sort_asc;
void SetAll(bool sel, bool where_)
{
sel_parent_id = sel;
sel_user_id = sel;
sel_group_id = sel;
sel_guest_name = sel;
sel_privileges = sel;
sel_date = sel;
sel_subject = sel;
sel_content = sel;
sel_url = sel;
sel_type = sel;
sel_default_item= sel;
sel_auth = sel;
where_id = where_;
where_parent_id = where_;
where_type = where_;
where_auth = where_;
}
void WhereId(long id_) { where_id = true; id = id_; }
void WhereParentId(long parent_id_) { where_parent_id = true; parent_id = parent_id_; }
void WhereType(Item::Type type_) { where_type = true; type = type_; }
void WhereAuth(Item::Auth st) { where_auth = true; auth = st; }
ItemQuery()
{
sort_asc = true;
SetAll(true, false);
id = -1;
parent_id = -1;
type = Item::none;
auth = Item::auth_none;
}
};
void GetItems(std::vector<Item> & item_table, const ItemQuery & item_query);
// !! pobiera tylko jeden item (cos wymyslec innego z nazwa albo argumentem) // !! pobiera tylko jeden item (cos wymyslec innego z nazwa albo argumentem)
void GetItem(std::vector<Item> & item_table, long id); void GetItem(std::vector<Item> & item_table, long id);
@ -131,8 +203,8 @@ protected:
void CheckAllUrlSubjectModifyItem(Item & item); void CheckAllUrlSubjectModifyItem(Item & item);
PGresult * GetItemsQuery(long parent_id, Item::Type type, bool with_subject, bool with_content, bool sort_asc); PGresult * GetItemsQuery(const ItemQuery & iq);
bool DelItemDelItem(const Item & item); bool DelItemDelItem(const Item & item);
void DelItemDelContent(const Item & item); void DelItemDelContent(const Item & item);
Error DelItemCountContents(const Item & item, long & contents); Error DelItemCountContents(const Item & item, long & contents);
@ -141,7 +213,7 @@ protected:
struct ItemColumns struct ItemColumns
{ {
int id, user_id, group_id, privileges, date_creation, date_modification, url, type, parent_id, int id, user_id, group_id, privileges, date_creation, date_modification, url, type, parent_id,
content_id, default_item, subject, content, content_type, guest_name, static_auth; content_id, default_item, subject, content, content_type, guest_name, auth;
void SetColumns(PGresult * r); void SetColumns(PGresult * r);
void SetItem(PGresult * r, long row, Item & item); void SetItem(PGresult * r, long row, Item & item);

View File

@ -29,7 +29,7 @@ void Db::ItemColumns::SetColumns(PGresult * r)
content = PQfnumber(r, "content"); content = PQfnumber(r, "content");
content_type = PQfnumber(r, "content_type"); content_type = PQfnumber(r, "content_type");
guest_name = PQfnumber(r, "guest_name"); guest_name = PQfnumber(r, "guest_name");
static_auth = PQfnumber(r, "static_auth"); auth = PQfnumber(r, "auth");
} }
@ -51,7 +51,7 @@ void Db::ItemColumns::SetItem(PGresult * r, long row, Item & item)
if( content != -1 ) item.content = Db::AssertValue(r, row, content); if( content != -1 ) item.content = Db::AssertValue(r, row, content);
if( content_type != -1 ) item.content_type = static_cast<Item::ContentType>( atoi(Db::AssertValue(r, row, content_type)) ); if( content_type != -1 ) item.content_type = static_cast<Item::ContentType>( atoi(Db::AssertValue(r, row, content_type)) );
if( guest_name != -1 ) item.guest_name = Db::AssertValue(r, row, guest_name); if( guest_name != -1 ) item.guest_name = Db::AssertValue(r, row, guest_name);
if( static_auth != -1 ) item.static_auth = static_cast<Item::StaticAuth>( atoi(Db::AssertValue(r, row, static_auth)) ); if( auth != -1 ) item.auth = static_cast<Item::Auth>( atoi(Db::AssertValue(r, row, auth)) );
} }

View File

@ -80,7 +80,7 @@ void FunctionParser::ParseItem()
if( request.status == Error::ok ) if( request.status == Error::ok )
{ {
if( request.role == Request::authorizer && request.item.static_auth == Item::static_none ) if( request.role == Request::authorizer && request.item.auth == Item::auth_none )
{ {
log << log1 << "FP: item.url: " << url << " exists but has not a static content (authorizer role)" << logend; log << log1 << "FP: item.url: " << url << " exists but has not a static content (authorizer role)" << logend;
request.status = Error::no_item; request.status = Error::no_item;

View File

@ -18,20 +18,21 @@
struct Item struct Item
{ {
long id; long id;
long parent_id;
long user_id; long user_id;
long group_id; long group_id;
int privileges; std::string guest_name; // used as a user name when user_id is equal -1
// used as a user name when user_id is equal -1 int privileges;
std::string guest_name;
tm date_creation; tm date_creation;
tm date_modification; tm date_modification;
std::string subject; std::string subject;
std::string content; std::string content;
long content_id; // used by the database
std::string url; std::string url;
enum ContentType enum ContentType
@ -52,36 +53,34 @@ enum Type
dir = 0, dir = 0,
file = 1, file = 1,
none = 1000 none = 1000 // !! pozbyc sie tego
}; };
Type type; Type type;
//item_type;
long parent_id;
long default_item; long default_item;
// used by the database
long content_id;
// external static file (saved in file system) // external static file authorized by winix
// the direct url is the same but the prefix is: base_url_static_auth enum Auth
enum StaticAuth
{ {
static_none = 0, auth_none = 0, /* there is not an external file */
static_image = 1, /* png, gif, jpg - only types available to render by a web browser*/ auth_image = 1, /* png, gif, jpg - only types available to render by a web browser*/
static_document = 2, /* pdf doc xls txt */ auth_document = 2, /* pdf doc xls txt */
static_other = 3 auth_other = 3 /* other file */
}; };
StaticAuth static_auth; Auth auth;
// methods
Item() Item()
{ {
Clear(); Clear();
@ -125,7 +124,7 @@ void Clear()
content_id = -1; content_id = -1;
static_auth = static_none; auth = auth_none;
SetDateToNow(); SetDateToNow();
} }

View File

@ -635,7 +635,7 @@ return name + i + 1;
} }
Item::StaticAuth SelectFileType(const char * file_name) Item::Auth SelectFileType(const char * file_name)
{ {
const char * ext = GetFileExt(file_name); const char * ext = GetFileExt(file_name);
@ -644,7 +644,7 @@ Item::StaticAuth SelectFileType(const char * file_name)
if( EqualNoCase(ext, "jpg") || if( EqualNoCase(ext, "jpg") ||
EqualNoCase(ext, "gif") || EqualNoCase(ext, "gif") ||
EqualNoCase(ext, "png") ) EqualNoCase(ext, "png") )
return Item::static_image; return Item::auth_image;
if( EqualNoCase(ext, "pdf") || if( EqualNoCase(ext, "pdf") ||
EqualNoCase(ext, "doc") || EqualNoCase(ext, "doc") ||
@ -652,8 +652,8 @@ Item::StaticAuth SelectFileType(const char * file_name)
EqualNoCase(ext, "txt") || EqualNoCase(ext, "txt") ||
EqualNoCase(ext, "ods") || EqualNoCase(ext, "ods") ||
EqualNoCase(ext, "odt") ) EqualNoCase(ext, "odt") )
return Item::static_document; return Item::auth_document;
return Item::static_other; return Item::auth_other;
} }

View File

@ -68,6 +68,6 @@ bool CreateDir(const char * dir, int priv);
bool CreateDir(const std::string & dir, int priv); bool CreateDir(const std::string & dir, int priv);
const char * GetFileExt(const char * name); const char * GetFileExt(const char * name);
Item::StaticAuth SelectFileType(const char * file_name); Item::Auth SelectFileType(const char * file_name);
#endif #endif

View File

@ -433,14 +433,14 @@ void PostMultiParser::CreateTmpFile()
{ {
char buf[100]; char buf[100];
if( data.static_tmp_dir.empty() ) if( data.auth_tmp_dir.empty() )
{ {
log << log1 << "PMP: static_tmp_dir is not set in the config" << logend; log << log1 << "PMP: auth_tmp_dir is not set in the config" << logend;
err = Error::cant_create_file; err = Error::cant_create_file;
return; return;
} }
sprintf(buf, "%s/winix_%u_%d_%u", data.static_tmp_dir.c_str(), (unsigned)getpid(), tmp_filename_postfix, rand()); sprintf(buf, "%s/winix_%u_%d_%u", data.auth_tmp_dir.c_str(), (unsigned)getpid(), tmp_filename_postfix, rand());
tmp_filename_postfix += 1; tmp_filename_postfix += 1;
tmp_file.open(buf, std::ios_base::binary | std::ios_base::out); tmp_file.open(buf, std::ios_base::binary | std::ios_base::out);

View File

@ -519,7 +519,7 @@ bool compressing = data.compression && role == responder && redirect_to.empty()
// if there is a redirect or a file to send then we do not send a content // if there is a redirect or a file to send then we do not send a content
return; return;
if( header == h_200 && role == authorizer && is_item && item.static_auth != Item::static_none ) if( header == h_200 && role == authorizer && is_item && item.auth != Item::auth_none )
// if there is an item and the item has 'file' storage we do not send a content // if there is an item and the item has 'file' storage we do not send a content
return; return;
@ -867,21 +867,21 @@ bool Request::CanUseUpload(const Item & item, bool check_root)
if( !data.mounts.pmount ) if( !data.mounts.pmount )
return false; return false;
if( data.mounts.pmount->fs == Mount::simplefs && data.static_simplefs_dir.empty() ) if( data.mounts.pmount->fs == Mount::simplefs && data.auth_simplefs_dir.empty() )
{ {
log << log1 << "Request: can't use upload function, static_simplefs_dir must be set in the config file" << logend; log << log1 << "Request: can't use upload function, auth_simplefs_dir must be set in the config file" << logend;
return false; return false;
} }
if( data.mounts.pmount->fs == Mount::hashfs && data.static_hashfs_dir.empty() ) if( data.mounts.pmount->fs == Mount::hashfs && data.auth_hashfs_dir.empty() )
{ {
log << log1 << "Request: can't use upload function, static_hashfs_dir must be set in the config file" << logend; log << log1 << "Request: can't use upload function, auth_hashfs_dir must be set in the config file" << logend;
return false; return false;
} }
if( data.static_tmp_dir.empty() ) if( data.auth_tmp_dir.empty() )
{ {
log << log1 << "Request: can't use upload function, static_tmp_dir must be set in the config file" << logend; log << log1 << "Request: can't use upload function, auth_tmp_dir must be set in the config file" << logend;
return false; return false;
} }
@ -943,11 +943,11 @@ bool Request::MakePathSimpleFs(std::string & path, bool create_dir)
{ {
size_t i; size_t i;
path = data.static_simplefs_dir; path = data.auth_simplefs_dir;
if( path.empty() ) if( path.empty() )
{ {
log << log1 << "Request: static_simplefs_dir is not set in the config file" << logend; log << log1 << "Request: auth_simplefs_dir is not set in the config file" << logend;
return false; return false;
} }
@ -979,10 +979,10 @@ char * hash = buffer;
buffer[0] = '0'; buffer[0] = '0';
sprintf(buffer+1, "%lx", (unsigned long)id); sprintf(buffer+1, "%lx", (unsigned long)id);
path = data.static_hashfs_dir; path = data.auth_hashfs_dir;
if( path.empty() ) if( path.empty() )
{ {
log << log1 << "Request: static_hashfs_dir is not set in the config file" << logend; log << log1 << "Request: auth_hashfs_dir is not set in the config file" << logend;
return false; return false;
} }

View File

@ -161,13 +161,13 @@ bool RequestController::BaseUrlRedirect()
{ {
// authorizer // authorizer
if( data.base_url_static_auth_http_host.empty() ) if( data.base_url_auth_http_host.empty() )
return false; return false;
if( data.base_url_static_auth_http_host == request.env_http_host ) if( data.base_url_auth_http_host == request.env_http_host )
return false; return false;
request.redirect_to = data.base_url_static_auth + request.env_request_uri; request.redirect_to = data.base_url_auth + request.env_request_uri;
} }
log << log3 << "RC: BaseUrlRedirect from: " << request.env_http_host << logend; log << log3 << "RC: BaseUrlRedirect from: " << request.env_http_host << logend;

View File

@ -1,11 +1,11 @@
[is mount_page_is "subject"][is mount_page_is "info"]<h1 class="withinfo">[else]<h1>[end][item_subject]</h1>[end] [is mount_page_is "subject"][is mount_page_is "info"]<h1 class="withinfo">[else]<h1>[end][item_subject]</h1>[end]
[is mount_page_is "info"][item_info][end] [is mount_page_is "info"][item_info][end]
[if-one item_static_auth_is_image] [if-one item_auth_is_image]
<img class="catimage" src="[item_link]/download/thumb" alt="[item_subject]"> <img class="catimage" src="[item_link]/download/thumb" alt="[item_subject]">
[item_print_content] [item_print_content]
[else] [else]
[if-no item_static_auth_is_none] [if-no item_auth_is_none]
{download}: <a href="[item_link]/download" title="[item_subject]">[item_subject]</a> {download}: <a href="[item_link]/download" title="[item_subject]">[item_subject]</a>
[item_print_content] [item_print_content]
[else] [else]

View File

@ -34,9 +34,9 @@
<input type="hidden" name="contenttype" value="2"> <input type="hidden" name="contenttype" value="2">
[is winix_function_param_is "full"] [is winix_function_param_is "full"]
<script type="text/javascript">CKEDITOR.replace('itemcontent', \{filebrowserUploadUrl: '[doc_base_url][dir]upload/ckeditor_upload/', filebrowserBrowseUrl: '[doc_base_url][dir]ls/ckeditor_browse/fullscreen/', customConfig : '[doc_base_url_static_ext]/ckeditor_full.js' \});</script> <script type="text/javascript">CKEDITOR.replace('itemcontent', \{filebrowserUploadUrl: '[doc_base_url][dir]upload/ckeditor_upload/', filebrowserBrowseUrl: '[doc_base_url][dir]ls/ckeditor_browse/fullscreen/', customConfig : '[doc_base_url_common]/ckeditor_full.js' \});</script>
[else] [else]
<script type="text/javascript">CKEDITOR.replace('itemcontent', \{filebrowserUploadUrl: '[doc_base_url][dir]upload/ckeditor_upload/', filebrowserBrowseUrl: '[doc_base_url][dir]ls/ckeditor_browse/fullscreen/', customConfig : '[doc_base_url_static_ext]/ckeditor_winix.js' \});</script> <script type="text/javascript">CKEDITOR.replace('itemcontent', \{filebrowserUploadUrl: '[doc_base_url][dir]upload/ckeditor_upload/', filebrowserBrowseUrl: '[doc_base_url][dir]ls/ckeditor_browse/fullscreen/', customConfig : '[doc_base_url_common]/ckeditor_winix.js' \});</script>
[end] [end]
[if-no user_logged] [if-no user_logged]

View File

@ -8,7 +8,7 @@
<ul class="ls_browse"> <ul class="ls_browse">
[for item_tab] [for item_tab]
<li><a href="javascript:select('[item_tab_link_static_auth]')"><img src="[item_tab_link_static_auth]" alt="[item_tab_subject]" height="120"></a></li> <li><a href="javascript:select('[item_tab_link_auth]')"><img src="[item_tab_link_auth]" alt="[item_tab_subject]" height="120"></a></li>
[end] [end]
</ul> </ul>
@ -20,23 +20,59 @@
<h1>{ls_header}</h1> <h1>{ls_header}</h1>
[if-no item_is] [if-no item_is]
[if-one dir_childs_tab]
<ul> [is winix_function_param_is "l"]
[for dir_childs_tab]
<li><a href="[doc_base_url][dir][dir_childs_tab_url]">[dir_childs_tab_url]/</a></li> [if-one dir_childs_tab item_tab]
<table class="withoutborder">
[for dir_childs_tab]
<tr>
<td>[dir_childs_tab_privileges]</td>
<td>[dir_childs_tab_user]</td>
<td>[dir_childs_tab_group]</td>
<td><a href="[doc_base_url][dir][dir_childs_tab_url]">[dir_childs_tab_url]/</a></td>
</tr>
[end]
[for item_tab]
<tr>
<td>[item_tab_privileges]</td>
<td>[item_tab_user]</td>
<td>[item_tab_group]</td>
<td><a href="[doc_base_url][dir][item_tab_url]">[item_tab_url]</a></td>
</tr>
[end]
</table>
[end] [end]
</ul>
[else]
[if-one dir_childs_tab]
<ul>
[for dir_childs_tab]
<li><a href="[doc_base_url][dir][dir_childs_tab_url]">[dir_childs_tab_url]/</a></li>
[end]
</ul>
[end]
[if-one item_tab]
<ul>
[for item_tab]
<li><a href="[doc_base_url][dir][item_tab_url]">[item_tab_url]</a></li>
[end]
</ul>
[end]
[end] [end]
[end]
[else]
[if-one item_tab]
<ul> <ul>
[for item_tab] <li><a href="[doc_base_url][dir][item_url]">[item_url]</a></li>
<li><a href="[doc_base_url][dir][item_tab_url]">[item_tab_url]</a></li>
[end]
</ul> </ul>
[end] [end]

View File

@ -143,6 +143,49 @@ void dir_childs_tab_url(Info & i)
void dir_childs_tab_privileges(Info & i)
{
if( dir_childs_index < dir_childs_table.size() )
i.out << "0" << std::setbase(8) << dir_childs_table[dir_childs_index]->privileges << std::setbase(10);
}
void dir_childs_tab_user(Info & i)
{
if( dir_childs_index < dir_childs_table.size() )
{
long user_id = dir_childs_table[dir_childs_index]->user_id;
User * puser = data.users.GetUser(user_id);
if( puser )
HtmlEscape(i.out, puser->name);
else
{
i.out << "~";
if( !dir_childs_table[dir_childs_index]->guest_name.empty() )
HtmlEscape(i.out, dir_childs_table[dir_childs_index]->guest_name);
else
i.out << "guest"; // !! dodac do konfiga
}
}
}
void dir_childs_tab_group(Info & i)
{
if( dir_childs_index < dir_childs_table.size() )
{
long group_id = dir_childs_table[dir_childs_index]->group_id;
Group * pgroup = data.groups.GetGroup(group_id);
if( pgroup )
HtmlEscape(i.out, pgroup->name);
else
i.out << group_id;
}
}
@ -178,7 +221,6 @@ void dir_tab_link(Info & i)
} }
static Item dir_last_default_item; static Item dir_last_default_item;
static size_t dir_last_default_item_reqid = 0; static size_t dir_last_default_item_reqid = 0;

View File

@ -57,6 +57,11 @@ void doc_base_url(Info & i)
} }
void doc_base_url_auth(Info & i)
{
i.out << data.base_url_auth;
}
void doc_base_url_static(Info & i) void doc_base_url_static(Info & i)
{ {
@ -64,17 +69,12 @@ void doc_base_url_static(Info & i)
} }
void doc_base_url_static_ext(Info & i) void doc_base_url_common(Info & i)
{ {
i.out << data.base_url_static_ext; i.out << data.base_url_common;
} }
void doc_base_url_static_auth(Info & i)
{
i.out << data.base_url_static_auth;
}
void doc_current_url(Info & i) void doc_current_url(Info & i)
{ {

View File

@ -168,15 +168,15 @@ void item_link(Info & i)
void item_static_auth_is_none(Info & i) void item_auth_is_none(Info & i)
{ {
i.result = request.item.static_auth == Item::static_none; i.result = request.item.auth == Item::auth_none;
} }
void item_static_auth_is_image(Info & i) void item_auth_is_image(Info & i)
{ {
i.result = request.item.static_auth == Item::static_image; i.result = request.item.auth == Item::auth_image;
} }
@ -427,7 +427,7 @@ void item_tab_print_content(Info & i)
void item_tab_privileges(Info & i) void item_tab_privileges(Info & i)
{ {
if( item_index < request.item_table.size() ) if( item_index < request.item_table.size() )
i.out << std::setbase(8) << request.item_table[item_index].privileges << std::setbase(10); i.out << "0" << std::setbase(8) << request.item_table[item_index].privileges << std::setbase(10);
} }
@ -464,11 +464,11 @@ void item_tab_link(Info & i)
} }
void item_tab_link_static_auth(Info & i) void item_tab_link_auth(Info & i)
{ {
if( item_index < request.item_table.size() ) if( item_index < request.item_table.size() )
{ {
HtmlEscape(i.out, data.base_url_static_auth); HtmlEscape(i.out, data.base_url_auth);
item_tab_dir(i); item_tab_dir(i);
item_tab_url(i); item_tab_url(i);
} }
@ -515,6 +515,21 @@ void item_tab_user(Info & i)
} }
void item_tab_group(Info & i)
{
if( item_index < request.item_table.size() )
{
long group_id = request.item_table[item_index].group_id;
Group * pgroup = data.groups.GetGroup(group_id);
if( pgroup )
HtmlEscape(i.out, pgroup->name);
else
i.out << group_id;
}
}
void item_tab_date_creation(Info & i) void item_tab_date_creation(Info & i)
{ {
if( item_index < request.item_table.size() ) if( item_index < request.item_table.size() )

View File

@ -173,9 +173,9 @@ void Templates::CreateFunctions()
*/ */
functions.Insert("doc_title", doc_title); functions.Insert("doc_title", doc_title);
functions.Insert("doc_base_url", doc_base_url); functions.Insert("doc_base_url", doc_base_url);
functions.Insert("doc_base_url_auth", doc_base_url_auth);
functions.Insert("doc_base_url_static", doc_base_url_static); functions.Insert("doc_base_url_static", doc_base_url_static);
functions.Insert("doc_base_url_static_ext", doc_base_url_static_ext); functions.Insert("doc_base_url_common", doc_base_url_common);
functions.Insert("doc_base_url_static_auth", doc_base_url_static_auth);
functions.Insert("doc_current_url", doc_current_url); functions.Insert("doc_current_url", doc_current_url);
functions.Insert("doc_is_error", doc_is_error); functions.Insert("doc_is_error", doc_is_error);
functions.Insert("doc_status", doc_status); functions.Insert("doc_status", doc_status);
@ -198,8 +198,8 @@ void Templates::CreateFunctions()
functions.Insert("item_url", item_url); functions.Insert("item_url", item_url);
functions.Insert("item_url_is", item_url_is); functions.Insert("item_url_is", item_url_is);
functions.Insert("item_link", item_link); functions.Insert("item_link", item_link);
functions.Insert("item_static_auth_is_none", item_static_auth_is_none); functions.Insert("item_auth_is_none", item_auth_is_none);
functions.Insert("item_static_auth_is_image", item_static_auth_is_image); functions.Insert("item_auth_is_image", item_auth_is_image);
functions.Insert("item_can_read", item_can_read); functions.Insert("item_can_read", item_can_read);
functions.Insert("item_can_write", item_can_write); functions.Insert("item_can_write", item_can_write);
@ -235,10 +235,11 @@ void Templates::CreateFunctions()
functions.Insert("item_tab_dir", item_tab_dir); functions.Insert("item_tab_dir", item_tab_dir);
functions.Insert("item_tab_url", item_tab_url); functions.Insert("item_tab_url", item_tab_url);
functions.Insert("item_tab_link", item_tab_link); functions.Insert("item_tab_link", item_tab_link);
functions.Insert("item_tab_link_static_auth", item_tab_link_static_auth); functions.Insert("item_tab_link_auth", item_tab_link_auth);
functions.Insert("item_tab_can_read", item_tab_can_read); functions.Insert("item_tab_can_read", item_tab_can_read);
functions.Insert("item_tab_info", item_tab_info); functions.Insert("item_tab_info", item_tab_info);
functions.Insert("item_tab_user", item_tab_user); functions.Insert("item_tab_user", item_tab_user);
functions.Insert("item_tab_group", item_tab_group);
functions.Insert("item_tab_date_creation", item_tab_date_creation); functions.Insert("item_tab_date_creation", item_tab_date_creation);
functions.Insert("item_tab_date_modification", item_tab_date_modification); functions.Insert("item_tab_date_modification", item_tab_date_modification);
functions.Insert("item_tab_date_creation_nice", item_tab_date_creation_nice); functions.Insert("item_tab_date_creation_nice", item_tab_date_creation_nice);
@ -250,20 +251,23 @@ void Templates::CreateFunctions()
/* /*
dir dir
*/ */
functions.Insert("dir", dir); functions.Insert("dir", dir);
functions.Insert("dir_without_slash", dir_without_slash); functions.Insert("dir_without_slash", dir_without_slash);
functions.Insert("dir_can_read_exec", dir_can_read_exec); functions.Insert("dir_can_read_exec", dir_can_read_exec);
functions.Insert("dir_can_write", dir_can_write); functions.Insert("dir_can_write", dir_can_write);
functions.Insert("dir_can_remove", dir_can_remove); functions.Insert("dir_can_remove", dir_can_remove);
functions.Insert("dir_can_use_emacs", dir_can_use_emacs); functions.Insert("dir_can_use_emacs", dir_can_use_emacs);
functions.Insert("dir_can_use_mkdir", dir_can_use_mkdir); functions.Insert("dir_can_use_mkdir", dir_can_use_mkdir);
functions.Insert("dir_childs_tab", dir_childs_tab); functions.Insert("dir_childs_tab", dir_childs_tab);
functions.Insert("dir_childs_tab_url", dir_childs_tab_url); functions.Insert("dir_childs_tab_url", dir_childs_tab_url);
functions.Insert("dir_childs_tab_privileges", dir_childs_tab_privileges);
functions.Insert("dir_childs_tab_user", dir_childs_tab_user);
functions.Insert("dir_childs_tab_group", dir_childs_tab_group);
functions.Insert("dir_tab", dir_tab); functions.Insert("dir_tab", dir_tab);
functions.Insert("dir_tab_url", dir_tab_url); functions.Insert("dir_tab_url", dir_tab_url);
functions.Insert("dir_tab_link", dir_tab_link); functions.Insert("dir_tab_link", dir_tab_link);
functions.Insert("dir_last_default_item_dir", dir_last_default_item_dir); functions.Insert("dir_last_default_item_dir", dir_last_default_item_dir);
functions.Insert("dir_last_default_item_url", dir_last_default_item_url); functions.Insert("dir_last_default_item_url", dir_last_default_item_url);

View File

@ -86,9 +86,9 @@ namespace TemplatesFunctions
*/ */
void doc_title(Info & i); void doc_title(Info & i);
void doc_base_url(Info & i); void doc_base_url(Info & i);
void doc_base_url_auth(Info & i);
void doc_base_url_static(Info & i); void doc_base_url_static(Info & i);
void doc_base_url_static_ext(Info & i); void doc_base_url_common(Info & i);
void doc_base_url_static_auth(Info & i);
void doc_current_url(Info & i); void doc_current_url(Info & i);
void doc_is_error(Info & i); void doc_is_error(Info & i);
void doc_status(Info & i); void doc_status(Info & i);
@ -112,8 +112,8 @@ namespace TemplatesFunctions
void item_url(Info & i); void item_url(Info & i);
void item_url_is(Info & i); void item_url_is(Info & i);
void item_link(Info & i); void item_link(Info & i);
void item_static_auth_is_none(Info & i); void item_auth_is_none(Info & i);
void item_static_auth_is_image(Info & i); void item_auth_is_image(Info & i);
void item_can_read(Info & i); void item_can_read(Info & i);
void item_can_write(Info & i); void item_can_write(Info & i);
void item_can_remove(Info & i); void item_can_remove(Info & i);
@ -148,10 +148,11 @@ namespace TemplatesFunctions
void item_tab_dir(Info & i); void item_tab_dir(Info & i);
void item_tab_url(Info & i); void item_tab_url(Info & i);
void item_tab_link(Info & i); void item_tab_link(Info & i);
void item_tab_link_static_auth(Info & i); void item_tab_link_auth(Info & i);
void item_tab_can_read(Info & i); void item_tab_can_read(Info & i);
void item_tab_info(Info & i); void item_tab_info(Info & i);
void item_tab_user(Info & i); void item_tab_user(Info & i);
void item_tab_group(Info & i);
void item_tab_date_creation(Info & i); void item_tab_date_creation(Info & i);
void item_tab_date_modification(Info & i); void item_tab_date_modification(Info & i);
void item_tab_date_creation_nice(Info & i); void item_tab_date_creation_nice(Info & i);
@ -173,6 +174,9 @@ namespace TemplatesFunctions
void dir_childs_tab(Info & i); void dir_childs_tab(Info & i);
void dir_childs_tab_url(Info & i); void dir_childs_tab_url(Info & i);
void dir_childs_tab_privileges(Info & i);
void dir_childs_tab_user(Info & i);
void dir_childs_tab_group(Info & i);
void dir_tab(Info & i); void dir_tab(Info & i);
void dir_tab_url(Info & i); void dir_tab_url(Info & i);