From 640ba1828f3edfdd2e71825828c51b734fb19d1c Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Mon, 19 Mar 2012 21:56:07 +0100 Subject: [PATCH 01/12] Start of audit app Audit the filesystem action --- apps/admin_audit/appinfo/app.php | 10 +++++++ apps/admin_audit/appinfo/info.xml | 10 +++++++ apps/admin_audit/lib/hooks_handlers.php | 36 +++++++++++++++++++++++++ lib/filesystem.php | 2 +- 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 apps/admin_audit/appinfo/app.php create mode 100644 apps/admin_audit/appinfo/info.xml create mode 100644 apps/admin_audit/lib/hooks_handlers.php diff --git a/apps/admin_audit/appinfo/app.php b/apps/admin_audit/appinfo/app.php new file mode 100644 index 00000000000..b1b986fb7ba --- /dev/null +++ b/apps/admin_audit/appinfo/app.php @@ -0,0 +1,10 @@ + + + admin_audit + Log audit info + 0.1 + AGPL + Bart Visscher + 2 + Audit user actions in Owncloud + diff --git a/apps/admin_audit/lib/hooks_handlers.php b/apps/admin_audit/lib/hooks_handlers.php new file mode 100644 index 00000000000..924878840a2 --- /dev/null +++ b/apps/admin_audit/lib/hooks_handlers.php @@ -0,0 +1,36 @@ + Date: Fri, 23 Mar 2012 22:34:55 +0100 Subject: [PATCH 02/12] Audit: Add user login/logout logging --- apps/admin_audit/appinfo/app.php | 4 ++++ apps/admin_audit/lib/hooks_handlers.php | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/apps/admin_audit/appinfo/app.php b/apps/admin_audit/appinfo/app.php index b1b986fb7ba..27a72de432c 100644 --- a/apps/admin_audit/appinfo/app.php +++ b/apps/admin_audit/appinfo/app.php @@ -2,6 +2,10 @@ OC::$CLASSPATH['OC_Admin_Audit_Hooks_Handlers'] = 'apps/admin_audit/lib/hooks_handlers.php'; +OCP\Util::connectHook('OCP\User', 'pre_login', 'OC_Admin_Audit_Hooks_Handlers', 'pre_login'); +OCP\Util::connectHook('OCP\User', 'post_login', 'OC_Admin_Audit_Hooks_Handlers', 'post_login'); +OCP\Util::connectHook('OCP\User', 'logout', 'OC_Admin_Audit_Hooks_Handlers', 'logout'); + OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_rename, 'OC_Admin_Audit_Hooks_Handlers', 'rename'); OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_create, 'OC_Admin_Audit_Hooks_Handlers', 'create'); OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_copy, 'OC_Admin_Audit_Hooks_Handlers', 'copy'); diff --git a/apps/admin_audit/lib/hooks_handlers.php b/apps/admin_audit/lib/hooks_handlers.php index 924878840a2..8ebabbac7b5 100644 --- a/apps/admin_audit/lib/hooks_handlers.php +++ b/apps/admin_audit/lib/hooks_handlers.php @@ -1,6 +1,19 @@ Date: Thu, 29 Mar 2012 11:24:29 +0200 Subject: [PATCH 03/12] Audit: Log messages with separate function --- apps/admin_audit/lib/hooks_handlers.php | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/apps/admin_audit/lib/hooks_handlers.php b/apps/admin_audit/lib/hooks_handlers.php index 8ebabbac7b5..4cc3194eaf1 100644 --- a/apps/admin_audit/lib/hooks_handlers.php +++ b/apps/admin_audit/lib/hooks_handlers.php @@ -3,47 +3,50 @@ class OC_Admin_Audit_Hooks_Handlers { static public function pre_login($params) { $path = $params['uid']; - OCP\Util::writeLog('admin_audit', 'Trying login '.$user, OCP\Util::INFO); + self::log('Trying login '.$user); } static public function post_login($params) { $path = $params['uid']; - OCP\Util::writeLog('admin_audit', 'Login '.$user, OCP\Util::INFO); + self::log('Login '.$user); } static public function logout($params) { $user = OCP\User::getUser(); - OCP\Util::writeLog('admin_audit', 'Logout '.$user, OCP\Util::INFO); + self::log('Logout '.$user); } static public function rename($params) { $oldpath = $params[OC_Filesystem::signal_param_oldpath]; $newpath = $params[OC_Filesystem::signal_param_newpath]; $user = OCP\User::getUser(); - OCP\Util::writeLog('admin_audit', 'Rename "'.$oldpath.'" to "'.$newpath.'" by '.$user, OCP\Util::INFO); + self::log('Rename "'.$oldpath.'" to "'.$newpath.'" by '.$user); } static public function create($params) { $path = $params[OC_Filesystem::signal_param_path]; $user = OCP\User::getUser(); - OCP\Util::writeLog('admin_audit', 'Create "'.$path.'" by '.$user, OCP\Util::INFO); + self::log('Create "'.$path.'" by '.$user); } static public function copy($params) { $oldpath = $params[OC_Filesystem::signal_param_oldpath]; $newpath = $params[OC_Filesystem::signal_param_newpath]; $user = OCP\User::getUser(); - OCP\Util::writeLog('admin_audit', 'Copy "'.$oldpath.'" to "'.$newpath.'" by '.$user, OCP\Util::INFO); + self::log('Copy "'.$oldpath.'" to "'.$newpath.'" by '.$user); } static public function write($params) { $path = $params[OC_Filesystem::signal_param_path]; $user = OCP\User::getUser(); - OCP\Util::writeLog('admin_audit', 'Write "'.$path.'" by '.$user, OCP\Util::INFO); + self::log('Write "'.$path.'" by '.$user); } static public function read($params) { $path = $params[OC_Filesystem::signal_param_path]; $user = OCP\User::getUser(); - OCP\Util::writeLog('admin_audit', 'Read "'.$path.'" by '.$user, OCP\Util::INFO); + self::log('Read "'.$path.'" by '.$user); } static public function delete($params) { $path = $params[OC_Filesystem::signal_param_path]; $user = OCP\User::getUser(); - OCP\Util::writeLog('admin_audit', 'Delete "'.$path.'" by '.$user, OCP\Util::INFO); + self::log('Delete "'.$path.'" by '.$user); + } + static protected function log($msg) { + OCP\Util::writeLog('admin_audit', $msg, OCP\Util::INFO); } } From 2d581c675fb488df0875e4a489821cf88b7679ac Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Fri, 13 Apr 2012 19:40:33 +0200 Subject: [PATCH 04/12] Audit: Log sharing actions --- apps/admin_audit/appinfo/app.php | 4 ++++ apps/admin_audit/lib/hooks_handlers.php | 20 ++++++++++++++++++++ apps/files_sharing/get.php | 1 + apps/files_sharing/lib_share.php | 2 ++ 4 files changed, 27 insertions(+) diff --git a/apps/admin_audit/appinfo/app.php b/apps/admin_audit/appinfo/app.php index 27a72de432c..e52f633cf14 100644 --- a/apps/admin_audit/appinfo/app.php +++ b/apps/admin_audit/appinfo/app.php @@ -12,3 +12,7 @@ OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_copy, 'OC_ OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_write, 'OC_Admin_Audit_Hooks_Handlers', 'write'); OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_read, 'OC_Admin_Audit_Hooks_Handlers', 'read'); OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_delete, 'OC_Admin_Audit_Hooks_Handlers', 'delete'); + +OCP\Util::connectHook('OC_Share', 'public', 'OC_Admin_Audit_Hooks_Handlers', 'share_public'); +OCP\Util::connectHook('OC_Share', 'public-download', 'OC_Admin_Audit_Hooks_Handlers', 'share_public_download'); +OCP\Util::connectHook('OC_Share', 'user', 'OC_Admin_Audit_Hooks_Handlers', 'share_user'); diff --git a/apps/admin_audit/lib/hooks_handlers.php b/apps/admin_audit/lib/hooks_handlers.php index 4cc3194eaf1..c5aec97d939 100644 --- a/apps/admin_audit/lib/hooks_handlers.php +++ b/apps/admin_audit/lib/hooks_handlers.php @@ -46,6 +46,26 @@ class OC_Admin_Audit_Hooks_Handlers { $user = OCP\User::getUser(); self::log('Delete "'.$path.'" by '.$user); } + static public function share_public($params) { + $path = $params['source']; + $token = $params['token']; + $user = OCP\User::getUser(); + self::log('Shared "'.$path.'" with public, token="'.$token.'" by '.$user); + } + static public function share_public_download($params) { + $path = $params['source']; + $token = $params['token']; + $user = $_SERVER['REMOTE_ADDR']; + self::log('Download of shared "'.$path.'" token="'.$token.'" by '.$user); + } + static public function share_user($params) { + $path = $params['source']; + $permissions = $params['permissions']; + $with = $params['with']; + $user = OCP\User::getUser(); + $rw = $permissions & OC_Share::WRITE ? 'w' : 'o'; + self::log('Shared "'.$path.'" (r'.$rw.') with user "'.$with.'" by '.$user); + } static protected function log($msg) { OCP\Util::writeLog('admin_audit', $msg, OCP\Util::INFO); } diff --git a/apps/files_sharing/get.php b/apps/files_sharing/get.php index de3bc5f46dc..57ff6b6e200 100755 --- a/apps/files_sharing/get.php +++ b/apps/files_sharing/get.php @@ -74,6 +74,7 @@ if ($source !== false) { header("Content-Length: " . OC_Filesystem::filesize($source)); //download the file @ob_clean(); + OCP\Util::emitHook('OC_Share', 'public-download', array('source'=>$source, 'token'=>$token); OC_Filesystem::readfile($source); } } else { diff --git a/apps/files_sharing/lib_share.php b/apps/files_sharing/lib_share.php index d5cf3d0a1ba..14c61c620a1 100755 --- a/apps/files_sharing/lib_share.php +++ b/apps/files_sharing/lib_share.php @@ -43,6 +43,7 @@ class OC_Share { $query = OCP\DB::prepare("INSERT INTO *PREFIX*sharing VALUES(?,?,?,?,?)"); if ($uid_shared_with == self::PUBLICLINK) { $token = sha1("$uid_shared_with-$source"); + OCP\Util::emitHook('OC_Share', 'public', array('source'=>$source, 'token'=>$token, 'permissions'=>$permissions)); $query->execute(array($uid_owner, self::PUBLICLINK, $source, $token, $permissions)); $this->token = $token; } else { @@ -97,6 +98,7 @@ class OC_Share { if (isset($gid)) { $uid = $uid."@".$gid; } + OCP\Util::emitHook('OC_Share', 'user', array('source'=>$source, 'target'=>$target, 'with'=>$uid, 'permissions'=>$permissions)); $query->execute(array($uid_owner, $uid, $source, $target, $permissions)); // Add file to filesystem cache $userDirectory = "/".OCP\USER::getUser()."/files"; From 4510571aa15d18d958947efd380b211a9a12aaaa Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 30 May 2012 17:46:49 +0200 Subject: [PATCH 05/12] Add app for logging access to shared files --- apps/files_sharing/sharedstorage.php | 16 ++++++++ apps/files_sharing_log/appinfo/app.php | 22 +++++++++++ apps/files_sharing_log/appinfo/database.xml | 44 +++++++++++++++++++++ apps/files_sharing_log/appinfo/info.xml | 10 +++++ apps/files_sharing_log/appinfo/version | 1 + apps/files_sharing_log/css/style.css | 7 ++++ apps/files_sharing_log/index.php | 21 ++++++++++ apps/files_sharing_log/log.php | 34 ++++++++++++++++ apps/files_sharing_log/templates/index.php | 42 ++++++++++++++++++++ 9 files changed, 197 insertions(+) create mode 100644 apps/files_sharing_log/appinfo/app.php create mode 100644 apps/files_sharing_log/appinfo/database.xml create mode 100644 apps/files_sharing_log/appinfo/info.xml create mode 100644 apps/files_sharing_log/appinfo/version create mode 100644 apps/files_sharing_log/css/style.css create mode 100644 apps/files_sharing_log/index.php create mode 100644 apps/files_sharing_log/log.php create mode 100644 apps/files_sharing_log/templates/index.php diff --git a/apps/files_sharing/sharedstorage.php b/apps/files_sharing/sharedstorage.php index 3bb6e73035e..e8aa73dd564 100644 --- a/apps/files_sharing/sharedstorage.php +++ b/apps/files_sharing/sharedstorage.php @@ -320,6 +320,11 @@ class OC_Filestorage_Shared extends OC_Filestorage { public function file_get_contents($path) { $source = $this->getSource($path); if ($source) { + $info = array( + 'target' => $this->datadir.$path, + 'source' => $source, + ); + OCP\Util::emitHook('OC_Filestorage_Shared', 'file_get_contents', $info); $storage = OC_Filesystem::getStorage($source); return $storage->file_get_contents($this->getInternalPath($source)); } @@ -329,6 +334,11 @@ class OC_Filestorage_Shared extends OC_Filestorage { if ($this->is_writable($path)) { $source = $this->getSource($path); if ($source) { + $info = array( + 'target' => $this->datadir.$path, + 'source' => $source, + ); + OCP\Util::emitHook('OC_Filestorage_Shared', 'file_put_contents', $info); $storage = OC_Filesystem::getStorage($source); $result = $storage->file_put_contents($this->getInternalPath($source), $data); if ($result) { @@ -416,6 +426,12 @@ class OC_Filestorage_Shared extends OC_Filestorage { public function fopen($path, $mode) { $source = $this->getSource($path); if ($source) { + $info = array( + 'target' => $this->datadir.$path, + 'source' => $source, + 'mode' => $mode, + ); + OCP\Util::emitHook('OC_Filestorage_Shared', 'fopen', $info); $storage = OC_Filesystem::getStorage($source); return $storage->fopen($this->getInternalPath($source), $mode); } diff --git a/apps/files_sharing_log/appinfo/app.php b/apps/files_sharing_log/appinfo/app.php new file mode 100644 index 00000000000..23cae61fbf4 --- /dev/null +++ b/apps/files_sharing_log/appinfo/app.php @@ -0,0 +1,22 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +OC::$CLASSPATH['OC_Files_Sharing_Log'] = 'apps/files_sharing_log/log.php'; + +$l=new OC_L10N('files_sharing_log'); +OCP\App::addNavigationEntry( array( + 'id' => 'files_sharing_log_index', + 'order' => 5, + 'href' => OCP\Util::linkTo( 'files_sharing_log', 'index.php' ), + 'icon' => OCP\Util::imagePath( 'files_sharing_log', 'icon.png' ), + 'name' => $l->t('Shared files log')) +); + +OCP\Util::connectHook('OC_Filestorage_Shared', 'fopen', 'OC_Files_Sharing_Log', 'fopen'); +OCP\Util::connectHook('OC_Filestorage_Shared', 'file_get_contents', 'OC_Files_Sharing_Log', 'file_get_contents'); +OCP\Util::connectHook('OC_Filestorage_Shared', 'file_put_contents', 'OC_Files_Sharing_Log', 'file_put_contents'); diff --git a/apps/files_sharing_log/appinfo/database.xml b/apps/files_sharing_log/appinfo/database.xml new file mode 100644 index 00000000000..92e5f0125bd --- /dev/null +++ b/apps/files_sharing_log/appinfo/database.xml @@ -0,0 +1,44 @@ + + + *dbname* + true + false + latin1 + + *dbprefix*sharing_log + + + user_id + text + true + 64 + + + source + text + true + 128 + + + uid_who + text + true + 64 + + + when + integer + + false + true + 4 + + + mode + text + true + 4 + + +
+
diff --git a/apps/files_sharing_log/appinfo/info.xml b/apps/files_sharing_log/appinfo/info.xml new file mode 100644 index 00000000000..d5e3283df3f --- /dev/null +++ b/apps/files_sharing_log/appinfo/info.xml @@ -0,0 +1,10 @@ + + + files_sharing_log + File Shared access logging app + Log access to shared files + AGPL + Bart Visscher + 4 + true + diff --git a/apps/files_sharing_log/appinfo/version b/apps/files_sharing_log/appinfo/version new file mode 100644 index 00000000000..49d59571fbf --- /dev/null +++ b/apps/files_sharing_log/appinfo/version @@ -0,0 +1 @@ +0.1 diff --git a/apps/files_sharing_log/css/style.css b/apps/files_sharing_log/css/style.css new file mode 100644 index 00000000000..069d3a45e0d --- /dev/null +++ b/apps/files_sharing_log/css/style.css @@ -0,0 +1,7 @@ +#files_sharing_log { +padding: 2em; +} +#files_sharing_log th, +#files_sharing_log td { +padding: 0 1em; +} diff --git a/apps/files_sharing_log/index.php b/apps/files_sharing_log/index.php new file mode 100644 index 00000000000..ffacbdd8604 --- /dev/null +++ b/apps/files_sharing_log/index.php @@ -0,0 +1,21 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +OCP\User::checkLoggedIn(); +OCP\App::checkAppEnabled('files_sharing_log'); + +OCP\App::setActiveNavigationEntry('files_sharing_log_index'); + +OCP\Util::addStyle('files_sharing_log', 'style'); + +$query = OCP\DB::prepare('SELECT * FROM *PREFIX*sharing_log WHERE user_id = ?'); +$log = $query->execute(array(OCP\User::getUser()))->fetchAll(); + +$output = new OCP\Template('files_sharing_log', 'index', 'user'); +$output->assign('log', $log); +$output->printPage(); diff --git a/apps/files_sharing_log/log.php b/apps/files_sharing_log/log.php new file mode 100644 index 00000000000..e6a12b9fb1d --- /dev/null +++ b/apps/files_sharing_log/log.php @@ -0,0 +1,34 @@ +execute(array($source, $target))->fetchAll(); + $info = $info[0]; + //var_dump($info); + $query = OCP\DB::prepare("INSERT INTO *PREFIX*sharing_log VALUES (?,?,?,?,?)"); + $query->execute(array($info['uid_owner'], $source, OCP\User::getUser(), time(), $mode)); + //die; + } +} diff --git a/apps/files_sharing_log/templates/index.php b/apps/files_sharing_log/templates/index.php new file mode 100644 index 00000000000..55bfc1d6a3c --- /dev/null +++ b/apps/files_sharing_log/templates/index.php @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + +
t('File') ?>t('Who') ?>t('When') ?>t('What') ?>
+ + + + + + + t('Read'); + break; + case 'put': + echo $l->t('Write'); + break; + default: + if (strpos('r', $log['mode']) !== false): + echo $l->t('Read'); + else: + echo $l->t('Write'); + endif; + endswitch; + ?> +
From 5a2c93ec2d3383da9f945cd71763a519f1cf462f Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Wed, 20 Jun 2012 15:11:14 +0200 Subject: [PATCH 06/12] use sanitizeHTML() function --- apps/calendar/ajax/events.php | 2 +- apps/calendar/js/calendar.js | 2 +- apps/calendar/lib/object.php | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/calendar/ajax/events.php b/apps/calendar/ajax/events.php index 39130a6a983..845cea8df82 100644 --- a/apps/calendar/ajax/events.php +++ b/apps/calendar/ajax/events.php @@ -31,4 +31,4 @@ $output = array(); foreach($events as $event){ $output = array_merge($output, OC_Calendar_App::generateEventOutput($event, $start, $end)); } -OCP\JSON::encodedPrint($output); +OCP\JSON::encodedPrint(OCP\Util::sanitizeHTML($output)); diff --git a/apps/calendar/js/calendar.js b/apps/calendar/js/calendar.js index 5136c3e7745..3b1be59381b 100644 --- a/apps/calendar/js/calendar.js +++ b/apps/calendar/js/calendar.js @@ -869,7 +869,7 @@ $(document).ready(function(){ eventDrop: Calendar.UI.moveEvent, eventResize: Calendar.UI.resizeEvent, eventRender: function(event, element) { - element.find('.fc-event-title').html(element.find('.fc-event-title').text()); + element.find('.fc-event-title').html(element.find('.fc-event-title').html()); element.tipsy({ className: 'tipsy-event', opacity: 0.9, diff --git a/apps/calendar/lib/object.php b/apps/calendar/lib/object.php index 9e4806227b0..4212bf5a32c 100644 --- a/apps/calendar/lib/object.php +++ b/apps/calendar/lib/object.php @@ -600,8 +600,8 @@ class OC_Calendar_Object{ public static function updateVCalendarFromRequest($request, $vcalendar) { - $title = strip_tags($request["title"]); - $location = strip_tags($request["location"]); + $title = $request["title"]; + $location = $request["location"]; $categories = $request["categories"]; $allday = isset($request["allday"]); $from = $request["from"]; @@ -611,7 +611,7 @@ class OC_Calendar_Object{ $totime = $request['totime']; } $vevent = $vcalendar->VEVENT; - $description = strip_tags($request["description"]); + $description = $request["description"]; $repeat = $request["repeat"]; if($repeat != 'doesnotrepeat'){ $rrule = ''; From e52230d11c5cef0e6105166b7d704c8c69f60425 Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Wed, 20 Jun 2012 15:41:05 +0200 Subject: [PATCH 07/12] no need to escape the title --- 3rdparty/fullcalendar/js/fullcalendar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/fullcalendar/js/fullcalendar.js b/3rdparty/fullcalendar/js/fullcalendar.js index 779a313c761..314f8c8a1a5 100644 --- a/3rdparty/fullcalendar/js/fullcalendar.js +++ b/3rdparty/fullcalendar/js/fullcalendar.js @@ -4662,7 +4662,7 @@ function DayEventRenderer() { ""; } html += - "" + htmlEscape(event.title) + "" + + "" + event.title + "" + ""; if (seg.isEnd && isEventResizable(event)) { html += From 6644511124d0f93ca6636344db5455da6d160c3d Mon Sep 17 00:00:00 2001 From: Bjoern Schiessle Date: Wed, 20 Jun 2012 16:29:19 +0200 Subject: [PATCH 08/12] remove unnecessary comment --- lib/public/util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/public/util.php b/lib/public/util.php index 7c0cb666077..c611d59a533 100644 --- a/lib/public/util.php +++ b/lib/public/util.php @@ -274,7 +274,7 @@ class Util { * @return array with sanitized strings or a single sinitized string, depends on the input parameter. */ public static function sanitizeHTML( $value ){ - return(\OC_Util::sanitizeHTML($value)); //Specify encoding for PHP<5.4 + return(\OC_Util::sanitizeHTML($value)); } } From 5c8e774cea24bd964632ae96357a308272753513 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 20 Jun 2012 08:57:21 +0200 Subject: [PATCH 09/12] Small code reorder --- lib/util.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/util.php b/lib/util.php index 5492587862c..f0999b6d201 100755 --- a/lib/util.php +++ b/lib/util.php @@ -19,17 +19,18 @@ class OC_Util { return false; } - // If we are not forced to load a specific user we load the one that is logged in - if( $user == "" && OC_User::isLoggedIn()){ - $user = OC_User::getUser(); - } - $CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); //first set up the local "root" storage if(!self::$rootMounted){ OC_Filesystem::mount('OC_Filestorage_Local',array('datadir'=>$CONFIG_DATADIRECTORY),'/'); self::$rootMounted=true; } + + // If we are not forced to load a specific user we load the one that is logged in + if( $user == "" && OC_User::isLoggedIn()){ + $user = OC_User::getUser(); + } + if( $user != "" ){ //if we aren't logged in, there is no use to set up the filesystem $userdirectory = $CONFIG_DATADIRECTORY."/$user/$root"; if( !is_dir( $userdirectory )){ From cd934d5d8924b51d719ac20025b5fa034c74c3fb Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Tue, 19 Jun 2012 17:38:04 +0200 Subject: [PATCH 10/12] Adjust OC_Filesystem use in hooks to string, so the class is loaded as late as possible --- apps/files_versions/appinfo/app.php | 2 +- apps/gallery/lib/hooks_handlers.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index 49f1573f7c2..8b891848c57 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -6,4 +6,4 @@ OCP\App::registerAdmin('files_versions', 'settings'); OCP\Util::addscript('files_versions', 'versions'); // Listen to write signals -OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_write, "OCA_Versions\Storage", "write_hook"); +OCP\Util::connectHook('OC_Filesystem', 'post_write', "OCA_Versions\Storage", "write_hook"); diff --git a/apps/gallery/lib/hooks_handlers.php b/apps/gallery/lib/hooks_handlers.php index a9f4dc6affc..093979834da 100644 --- a/apps/gallery/lib/hooks_handlers.php +++ b/apps/gallery/lib/hooks_handlers.php @@ -21,7 +21,7 @@ * */ -OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_delete, "OC_Gallery_Hooks_Handlers", "removePhoto"); +OCP\Util::connectHook('OC_Filesystem', 'delete', "OC_Gallery_Hooks_Handlers", "removePhoto"); //OCP\Util::connectHook(OC_Filesystem::CLASSNAME, OC_Filesystem::signal_post_rename, "OC_Gallery_Hooks_Handlers", "renamePhoto"); require_once(OC::$CLASSPATH['Pictures_Managers']); From 6404476bec76a5c4bc2c6d3bb1508bb1c6c025f2 Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Tue, 19 Jun 2012 17:38:04 +0200 Subject: [PATCH 11/12] Delay setup of FS until OC_Filesystem is used --- apps/files_sharing/appinfo/app.php | 9 +++++++-- apps/files_sharing/sharedstorage.php | 13 +++---------- lib/base.php | 6 ------ lib/filesystem.php | 1 + lib/util.php | 8 +++++--- 5 files changed, 16 insertions(+), 21 deletions(-) diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index ea3a9da6f7a..bbb753d5e69 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -1,15 +1,20 @@ '/'.OCP\USER::getUser().'/files/Shared'), '/'.OCP\USER::getUser().'/files/Shared/'); + public static function setup($options) { + $user_dir = $options['user_dir']; + OC_Filesystem::mount('OC_Filestorage_Shared', array('datadir' => $user_dir.'/Shared'), $user_dir.'/Shared/'); } /** @@ -524,11 +525,3 @@ class OC_Filestorage_Shared extends OC_Filestorage { return $this->filemtime($path)>$time; } } - -if (OCP\USER::isLoggedIn()) { - OC_Filestorage_Shared::setup(); -} else { - OCP\Util::connectHook('OC_User', 'post_login', 'OC_Filestorage_Shared', 'setup'); -} - -?> diff --git a/lib/base.php b/lib/base.php index 6e209afebda..b6ca19568fe 100644 --- a/lib/base.php +++ b/lib/base.php @@ -353,12 +353,6 @@ class OC{ OC_User::useBackend( OC_Config::getValue( "userbackend", "database" )); OC_Group::useBackend(new OC_Group_Database()); - // Set up file system unless forbidden - global $RUNTIME_NOSETUPFS; - if(!$RUNTIME_NOSETUPFS ){ - OC_Util::setupFS(); - } - // Load Apps // This includes plugins for users and filesystems as well global $RUNTIME_NOAPPS; diff --git a/lib/filesystem.php b/lib/filesystem.php index 0d0943d3639..aeeb012f373 100644 --- a/lib/filesystem.php +++ b/lib/filesystem.php @@ -488,4 +488,5 @@ class OC_Filesystem{ } } +OC_Util::setupFS(); require_once('filecache.php'); diff --git a/lib/util.php b/lib/util.php index f0999b6d201..46c9e0ef927 100755 --- a/lib/util.php +++ b/lib/util.php @@ -14,7 +14,7 @@ class OC_Util { public static $core_scripts=array(); // Can be set up - public static function setupFS( $user = "", $root = "files" ){// configure the initial filesystem based on the configuration + public static function setupFS( $user = '' ){// configure the initial filesystem based on the configuration if(self::$fsSetup){//setting up the filesystem twice can only lead to trouble return false; } @@ -32,13 +32,14 @@ class OC_Util { } if( $user != "" ){ //if we aren't logged in, there is no use to set up the filesystem - $userdirectory = $CONFIG_DATADIRECTORY."/$user/$root"; + $user_dir = '/'.$user.'/files'; + $userdirectory = $CONFIG_DATADIRECTORY.$user_dir; if( !is_dir( $userdirectory )){ mkdir( $userdirectory, 0755, true ); } //jail the user into his "home" directory - OC_Filesystem::init('/'.$user.'/'.$root); + OC_Filesystem::init($user_dir); $quotaProxy=new OC_FileProxy_Quota(); OC_FileProxy::register($quotaProxy); self::$fsSetup=true; @@ -51,6 +52,7 @@ class OC_Util { } } } + OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $user_dir)); } } From 7a3d606cacb68c23d7972d078370c58d4a8f8a2c Mon Sep 17 00:00:00 2001 From: Bart Visscher Date: Wed, 20 Jun 2012 17:10:17 +0200 Subject: [PATCH 12/12] Prefer requested app before redirecting to default page --- lib/util.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/util.php b/lib/util.php index 46c9e0ef927..7792f96d445 100755 --- a/lib/util.php +++ b/lib/util.php @@ -324,7 +324,11 @@ class OC_Util { OC_Log::write('core','redirectToDefaultPage',OC_Log::DEBUG); if(isset($_REQUEST['redirect_url']) && (substr($_REQUEST['redirect_url'], 0, strlen(OC::$WEBROOT)) == OC::$WEBROOT || $_REQUEST['redirect_url'][0] == '/')) { header( 'Location: '.$_REQUEST['redirect_url']); - } else { + } + else if (isset(OC::$REQUESTEDAPP) && !empty(OC::$REQUESTEDAPP)) { + header( 'Location: '.OC::$WEBROOT.'/?app='.OC::$REQUESTEDAPP ); + } + else { header( 'Location: '.OC::$WEBROOT.'/'.OC_Appconfig::getValue('core', 'defaultpage', '?app=files')); } exit();