diff options
author | Michael Gapczynski <mtgap@owncloud.com> | 2012-09-12 01:06:57 -0400 |
---|---|---|
committer | Michael Gapczynski <mtgap@owncloud.com> | 2012-09-12 01:06:57 -0400 |
commit | 60feaf9abfbc60d950de9c2b820ad46b3b973eb3 (patch) | |
tree | f9931192ec8f3cf20840f87462592bf5a03b4af1 /lib/util.php | |
parent | b194ac3ddeeab6ce923a313725b3ce85fe849baa (diff) | |
parent | 54d4e556fe3302d1e580cb6d4abbfcd5699263a5 (diff) | |
download | nextcloud-server-60feaf9abfbc60d950de9c2b820ad46b3b973eb3.tar.gz nextcloud-server-60feaf9abfbc60d950de9c2b820ad46b3b973eb3.zip |
Merge branch 'master' into share_expiration
Conflicts:
core/js/share.js
lib/util.php
Diffstat (limited to 'lib/util.php')
-rwxr-xr-x | lib/util.php | 183 |
1 files changed, 103 insertions, 80 deletions
diff --git a/lib/util.php b/lib/util.php index 01f53cb2f38..f28f83ad717 100755 --- a/lib/util.php +++ b/lib/util.php @@ -14,38 +14,42 @@ class OC_Util { public static $core_scripts=array(); // Can be set up - 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 + 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; } + // 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(); + } + + // the filesystem will finish when $user is not empty, + // mark fs setup here to avoid doing the setup from loading + // OC_Filesystem + if ($user != '') { + self::$fsSetup=true; + } + $CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); //first set up the local "root" storage - if(!self::$rootMounted){ + 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 + if( $user != "" ) { //if we aren't logged in, there is no use to set up the filesystem $user_dir = '/'.$user.'/files'; $user_root = OC_User::getHome($user); $userdirectory = $user_root . '/files'; - OC_Filesystem::mount('OC_Filestorage_Local',array('datadir'=>$user_root), $user); - if( !is_dir( $userdirectory )){ + if( !is_dir( $userdirectory )) { mkdir( $userdirectory, 0755, true ); } - OC_Filesystem::mount('OC_Filestorage_Local',array('datadir'=>$user_root), $user); - //jail the user into his "home" directory + OC_Filesystem::mount('OC_Filestorage_Local', array('datadir' => $user_root), $user); OC_Filesystem::init($user_dir); $quotaProxy=new OC_FileProxy_Quota(); OC_FileProxy::register($quotaProxy); - self::$fsSetup=true; // Load personal mount config if (is_file($user_root.'/mount.php')) { $mountConfig = include($user_root.'/mount.php'); @@ -54,18 +58,19 @@ class OC_Util { OC_Filesystem::mount($options['class'], $options['options'], $mountPoint); } } + + $mtime=filemtime($user_root.'/mount.php'); + $previousMTime=OC_Preferences::getValue($user,'files','mountconfigmtime',0); + if($mtime>$previousMTime) {//mount config has changed, filecache needs to be updated + OC_FileCache::clear($user); + OC_Preferences::setValue($user,'files','mountconfigmtime',$mtime); + } } OC_Hook::emit('OC_Filesystem', 'setup', array('user' => $user, 'user_dir' => $user_dir)); } } - public static function setupFS4all(){ - foreach(OC_User::getUsers() as $user){ - OC_Filesystem::mount('OC_Filestorage_Local',array('datadir'=>OC_User::getHome($singleuser)), $user); - } - } - - public static function tearDownFS(){ + public static function tearDownFS() { OC_Filesystem::tearDown(); self::$fsSetup=false; } @@ -74,23 +79,24 @@ class OC_Util { * get the current installed version of ownCloud * @return array */ - public static function getVersion(){ - return array(4,82,5); + public static function getVersion() { + // hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4,9,0. This is not visible to the user + return array(4,83,7); } /** * get the current installed version string of ownCloud * @return string */ - public static function getVersionString(){ - return '5 pre alpha 1'; + public static function getVersionString() { + return '4.5 beta 2'; } /** * get the current installed edition of ownCloud. There is the community edition that just returns an empty string and the enterprise edition that returns "Enterprise". * @return string */ - public static function getEditionString(){ + public static function getEditionString() { return ''; } @@ -100,12 +106,12 @@ class OC_Util { * @param appid $application * @param filename $file */ - public static function addScript( $application, $file = null ){ - if( is_null( $file )){ + public static function addScript( $application, $file = null ) { + if( is_null( $file )) { $file = $application; $application = ""; } - if( !empty( $application )){ + if( !empty( $application )) { self::$scripts[] = "$application/js/$file"; }else{ self::$scripts[] = "js/$file"; @@ -118,12 +124,12 @@ class OC_Util { * @param appid $application * @param filename $file */ - public static function addStyle( $application, $file = null ){ - if( is_null( $file )){ + public static function addStyle( $application, $file = null ) { + if( is_null( $file )) { $file = $application; $application = ""; } - if( !empty( $application )){ + if( !empty( $application )) { self::$styles[] = "$application/css/$file"; }else{ self::$styles[] = "css/$file"; @@ -136,7 +142,7 @@ class OC_Util { * @param array $attributes array of attributes for the element * @param string $text the text content for the element */ - public static function addHeader( $tag, $attributes, $text=''){ + public static function addHeader( $tag, $attributes, $text='') { self::$headers[]=array('tag'=>$tag,'attributes'=>$attributes,'text'=>$text); } @@ -146,8 +152,8 @@ class OC_Util { * @param int timestamp $timestamp * @param bool dateOnly option to ommit time from the result */ - public static function formatDate( $timestamp,$dateOnly=false){ - if(isset($_SESSION['timezone'])){//adjust to clients timezone if we know it + public static function formatDate( $timestamp,$dateOnly=false) { + if(isset($_SESSION['timezone'])) {//adjust to clients timezone if we know it $systemTimeZone = intval(date('O')); $systemTimeZone=(round($systemTimeZone/100,0)*60)+($systemTimeZone%100); $clientTimeZone=$_SESSION['timezone']*60; @@ -191,12 +197,14 @@ class OC_Util { * check if the current server configuration is suitable for ownCloud * @return array arrays with error messages and hints */ - public static function checkServer(){ + public static function checkServer() { $errors=array(); + $web_server_restart= false; //check for database drivers - if(!(is_callable('sqlite_open') or class_exists('SQLite3')) and !is_callable('mysql_connect') and !is_callable('pg_connect')){ + if(!(is_callable('sqlite_open') or class_exists('SQLite3')) and !is_callable('mysql_connect') and !is_callable('pg_connect')) { $errors[]=array('error'=>'No database drivers (sqlite, mysql, or postgresql) installed.<br/>','hint'=>'');//TODO: sane hint + $web_server_restart= true; } //common hint for all file permissons error messages @@ -210,32 +218,32 @@ class OC_Util { // Check if there is a writable install folder. if(OC_Config::getValue('appstoreenabled', true)) { if( OC_App::getInstallPath() === null || !is_writable(OC_App::getInstallPath())) { - $errors[]=array('error'=>"Can't write into apps directory",'hint'=>"You can usually fix this by giving the webserver user write access to the apps directory + $errors[]=array('error'=>"Can't write into apps directory",'hint'=>"You can usually fix this by giving the webserver user write access to the apps directory in owncloud or disabling the appstore in the config file."); } } $CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); //check for correct file permissions - if(!stristr(PHP_OS, 'WIN')){ - $permissionsModHint="Please change the permissions to 0770 so that the directory cannot be listed by other users."; + if(!stristr(PHP_OS, 'WIN')) { + $permissionsModHint="Please change the permissions to 0770 so that the directory cannot be listed by other users."; $prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY)),-3); - if(substr($prems,-1)!='0'){ + if(substr($prems,-1)!='0') { OC_Helper::chmodr($CONFIG_DATADIRECTORY,0770); clearstatcache(); $prems=substr(decoct(@fileperms($CONFIG_DATADIRECTORY)),-3); - if(substr($prems,2,1)!='0'){ + if(substr($prems,2,1)!='0') { $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') is readable for other users<br/>','hint'=>$permissionsModHint); } } - if( OC_Config::getValue( "enablebackup", false )){ + if( OC_Config::getValue( "enablebackup", false )) { $CONFIG_BACKUPDIRECTORY = OC_Config::getValue( "backupdirectory", OC::$SERVERROOT."/backup" ); $prems=substr(decoct(@fileperms($CONFIG_BACKUPDIRECTORY)),-3); - if(substr($prems,-1)!='0'){ + if(substr($prems,-1)!='0') { OC_Helper::chmodr($CONFIG_BACKUPDIRECTORY,0770); clearstatcache(); $prems=substr(decoct(@fileperms($CONFIG_BACKUPDIRECTORY)),-3); - if(substr($prems,2,1)!='0'){ + if(substr($prems,2,1)!='0') { $errors[]=array('error'=>'Data directory ('.$CONFIG_BACKUPDIRECTORY.') is readable for other users<br/>','hint'=>$permissionsModHint); } } @@ -244,37 +252,52 @@ class OC_Util { //TODO: permissions checks for windows hosts } // Create root dir. - if(!is_dir($CONFIG_DATADIRECTORY)){ + if(!is_dir($CONFIG_DATADIRECTORY)) { $success=@mkdir($CONFIG_DATADIRECTORY); if(!$success) { $errors[]=array('error'=>"Can't create data directory (".$CONFIG_DATADIRECTORY.")",'hint'=>"You can usually fix this by giving the webserver write access to the ownCloud directory '".OC::$SERVERROOT."' (in a terminal, use the command 'chown -R www-data:www-data /path/to/your/owncloud/install/data' "); } - } else if(!is_writable($CONFIG_DATADIRECTORY)){ + } else if(!is_writable($CONFIG_DATADIRECTORY)) { $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY.') not writable by ownCloud<br/>','hint'=>$permissionsHint); } // check if all required php modules are present - if(!class_exists('ZipArchive')){ + if(!class_exists('ZipArchive')) { $errors[]=array('error'=>'PHP module zip not installed.<br/>','hint'=>'Please ask your server administrator to install the module.'); + $web_server_restart= false; } - if(!function_exists('mb_detect_encoding')){ + if(!function_exists('mb_detect_encoding')) { $errors[]=array('error'=>'PHP module mb multibyte not installed.<br/>','hint'=>'Please ask your server administrator to install the module.'); + $web_server_restart= false; } - if(!function_exists('ctype_digit')){ + if(!function_exists('ctype_digit')) { $errors[]=array('error'=>'PHP module ctype is not installed.<br/>','hint'=>'Please ask your server administrator to install the module.'); + $web_server_restart= false; } - if(!function_exists('json_encode')){ + if(!function_exists('json_encode')) { $errors[]=array('error'=>'PHP module JSON is not installed.<br/>','hint'=>'Please ask your server administrator to install the module.'); + $web_server_restart= false; } - if(!function_exists('imagepng')){ + if(!function_exists('imagepng')) { $errors[]=array('error'=>'PHP module GD is not installed.<br/>','hint'=>'Please ask your server administrator to install the module.'); + $web_server_restart= false; + } + if(!function_exists('gzencode')) { + $errors[]=array('error'=>'PHP module zlib is not installed.<br/>','hint'=>'Please ask your server administrator to install the module.'); + $web_server_restart= false; } - if(floatval(phpversion())<5.3){ + if(floatval(phpversion())<5.3) { $errors[]=array('error'=>'PHP 5.3 is required.<br/>','hint'=>'Please ask your server administrator to update PHP to version 5.3 or higher. PHP 5.2 is no longer supported by ownCloud and the PHP community.'); + $web_server_restart= false; } - if(!defined('PDO::ATTR_DRIVER_NAME')){ + if(!defined('PDO::ATTR_DRIVER_NAME')) { $errors[]=array('error'=>'PHP PDO module is not installed.<br/>','hint'=>'Please ask your server administrator to install the module.'); + $web_server_restart= false; + } + + if($web_server_restart) { + $errors[]=array('error'=>'PHP modules have been installed, but they are still listed as missing?<br/>','hint'=>'Please ask your server administrator to restart the web server.'); } return $errors; @@ -307,8 +330,8 @@ class OC_Util { /** * Check if the app is enabled, redirects to home if not */ - public static function checkAppEnabled($app){ - if( !OC_App::isEnabled($app)){ + public static function checkAppEnabled($app) { + if( !OC_App::isEnabled($app)) { header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php' )); exit(); } @@ -318,10 +341,10 @@ class OC_Util { * Check if the user is logged in, redirects to home if not. With * redirect URL parameter to the request URI. */ - public static function checkLoggedIn(){ + public static function checkLoggedIn() { // Check if we are a user - if( !OC_User::isLoggedIn()){ - header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php' ).'?redirect_url='.urlencode($_SERVER["REQUEST_URI"])); + if( !OC_User::isLoggedIn()) { + header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php', array('redirect_url' => urlencode($_SERVER["REQUEST_URI"])))); exit(); } } @@ -329,10 +352,10 @@ class OC_Util { /** * Check if the user is a admin, redirects to home if not */ - public static function checkAdminUser(){ + public static function checkAdminUser() { // Check if we are a user self::checkLoggedIn(); - if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )){ + if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )) { header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php' )); exit(); } @@ -342,13 +365,13 @@ class OC_Util { * Check if the user is a subadmin, redirects to home if not * @return array $groups where the current user is subadmin */ - public static function checkSubAdminUser(){ + public static function checkSubAdminUser() { // Check if we are a user self::checkLoggedIn(); - if(OC_Group::inGroup(OC_User::getUser(),'admin')){ + if(OC_Group::inGroup(OC_User::getUser(),'admin')) { return true; } - if(!OC_SubAdmin::isSubAdmin(OC_User::getUser())){ + if(!OC_SubAdmin::isSubAdmin(OC_User::getUser())) { header( 'Location: '.OC_Helper::linkToAbsolute( '', 'index.php' )); exit(); } @@ -358,7 +381,7 @@ class OC_Util { /** * Redirect to the user default page */ - public static function redirectToDefaultPage(){ + public static function redirectToDefaultPage() { if(isset($_REQUEST['redirect_url']) && (substr($_REQUEST['redirect_url'], 0, strlen(OC::$WEBROOT)) == OC::$WEBROOT || $_REQUEST['redirect_url'][0] == '/')) { $location = $_REQUEST['redirect_url']; } @@ -383,9 +406,9 @@ class OC_Util { * get an id unqiue for this instance * @return string */ - public static function getInstanceId(){ + public static function getInstanceId() { $id=OC_Config::getValue('instanceid',null); - if(is_null($id)){ + if(is_null($id)) { $id=uniqid(); OC_Config::setValue('instanceid',$id); } @@ -397,7 +420,7 @@ class OC_Util { * Todo: Write howto * @return $token Generated token. */ - public static function callRegister(){ + public static function callRegister() { //mamimum time before token exires $maxtime=(60*60); // 1 hour @@ -409,15 +432,15 @@ class OC_Util { // cleanup old tokens garbage collector // only run every 20th time so we don't waste cpu cycles - if(rand(0,20)==0) { + if(rand(0,20)==0) { foreach($_SESSION as $key=>$value) { // search all tokens in the session if(substr($key,0,12)=='requesttoken') { - if($value+$maxtime<time()){ + if($value+$maxtime<time()) { // remove outdated tokens - unset($_SESSION[$key]); + unset($_SESSION[$key]); } - } + } } } // return the token @@ -429,14 +452,14 @@ class OC_Util { * @brief Check an ajax get/post call if the request token is valid. * @return boolean False if request token is not set or is invalid. */ - public static function isCallRegistered(){ + public static function isCallRegistered() { //mamimum time before token exires $maxtime=(60*60); // 1 hour if(isset($_GET['requesttoken'])) { $token=$_GET['requesttoken']; - }elseif(isset($_POST['requesttoken'])){ + }elseif(isset($_POST['requesttoken'])) { $token=$_POST['requesttoken']; - }elseif(isset($_SERVER['HTTP_REQUESTTOKEN'])){ + }elseif(isset($_SERVER['HTTP_REQUESTTOKEN'])) { $token=$_SERVER['HTTP_REQUESTTOKEN']; }else{ //no token found. @@ -444,7 +467,7 @@ class OC_Util { } if(isset($_SESSION['requesttoken-'.$token])) { $timestamp=$_SESSION['requesttoken-'.$token]; - if($timestamp+$maxtime<time()){ + if($timestamp+$maxtime<time()) { return false; }else{ //token valid @@ -459,22 +482,22 @@ class OC_Util { * @brief Check an ajax get/post call if the request token is valid. exit if not. * Todo: Write howto */ - public static function callCheck(){ + public static function callCheck() { if(!OC_Util::isCallRegistered()) { exit; } } - + /** * @brief Public function to sanitize HTML * * This function is used to sanitize HTML and should be applied on any * string or array of strings before displaying it on a web page. - * + * * @param string or array of strings * @return array with sanitized strings or a single sanitized string, depends on the input parameter. */ - public static function sanitizeHTML( &$value ){ + public static function sanitizeHTML( &$value ) { if (is_array($value) || is_object($value)) array_walk_recursive($value,'OC_Util::sanitizeHTML'); else $value = htmlentities($value, ENT_QUOTES, 'UTF-8'); //Specify encoding for PHP<5.4 return $value; |