diff --git a/index.php b/index.php index 249ce41d51..46105a106f 100644 --- a/index.php +++ b/index.php @@ -25,23 +25,17 @@ $RUNTIME_NOAPPS = TRUE; //no apps, yet require_once('lib/base.php'); -OC_Util::addScript('setup'); - +// Setup required : $not_installed = !OC_Config::getValue('installed', false); $install_called = (isset($_POST['install']) AND $_POST['install']=='true'); -// First step : check if the server is correctly configured for ownCloud : -$errors = OC_Util::checkServer(); -if(count($errors) > 0) { - OC_Template::printGuestPage("", "error", array("errors" => $errors)); -} - -// Setup required : -elseif($not_installed OR $install_called) { +if($not_installed OR $install_called) { + OC_Util::addScript('setup'); require_once('setup.php'); exit(); } -if($_SERVER['REQUEST_METHOD']=='PROPFIND'){//handle webdav +// Handle WebDAV +if($_SERVER['REQUEST_METHOD']=='PROPFIND'){ header('location: '.OC_Helper::linkTo('files','webdav.php')); exit(); } @@ -141,4 +135,4 @@ else { } } -?> \ No newline at end of file +?> diff --git a/lib/base.php b/lib/base.php index 7344601ba4..9542170df5 100644 --- a/lib/base.php +++ b/lib/base.php @@ -65,41 +65,106 @@ class OC{ elseif(strpos($className,'OC_')===0){ require_once strtolower(str_replace('_','/',substr($className,3)) . '.php'); } + elseif(strpos($className,'Sabre_')===0) { + require_once str_replace('_','/',$className) . '.php'; + } + } + + public static function init(){ + // register autoloader + spl_autoload_register(array('OC','autoload')); + + // set some stuff + //ob_start(); + error_reporting(E_ALL | E_STRICT); + + date_default_timezone_set('Europe/Berlin'); + ini_set('arg_separator.output','&'); + ini_set('session.cookie_httponly','1;'); + session_start(); + + // calculate the documentroot + OC::$DOCUMENTROOT=realpath($_SERVER['DOCUMENT_ROOT']); + OC::$SERVERROOT=str_replace("\\",'/',substr(__FILE__,0,-13)); + OC::$SUBURI=substr(realpath($_SERVER["SCRIPT_FILENAME"]),strlen(OC::$SERVERROOT)); + $scriptName=$_SERVER["SCRIPT_NAME"]; + if(substr($scriptName,-1)=='/'){ + $scriptName.='index.php'; + } + OC::$WEBROOT=substr($scriptName,0,strlen($scriptName)-strlen(OC::$SUBURI)); + + if(OC::$WEBROOT!='' and OC::$WEBROOT[0]!=='/'){ + OC::$WEBROOT='/'.OC::$WEBROOT; + } + + // set the right include path + set_include_path(OC::$SERVERROOT.'/lib'.PATH_SEPARATOR.OC::$SERVERROOT.'/config'.PATH_SEPARATOR.OC::$SERVERROOT.'/3rdparty'.PATH_SEPARATOR.get_include_path().PATH_SEPARATOR.OC::$SERVERROOT); + + // redirect to https site if configured + if( OC_Config::getValue( "forcessl", false )){ + if(!isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] != 'on') { + $url = "https://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; + header("Location: $url"); + exit(); + } + } + + // Add the stuff we need always + OC_Util::addScript( "jquery-1.6.2.min" ); + OC_Util::addScript( "jquery-ui-1.8.14.custom.min" ); + OC_Util::addScript( "jquery-showpassword" ); + OC_Util::addScript( "jquery-tipsy" ); + OC_Util::addScript( "js" ); + OC_Util::addScript( "multiselect" ); + OC_Util::addScript('search','result'); + OC_Util::addStyle( "styles" ); + OC_Util::addStyle( "multiselect" ); + OC_Util::addStyle( "jquery-ui-1.8.14.custom" ); + OC_Util::addStyle( "jquery-tipsy" ); + + $errors=OC_Util::checkServer(); + if(count($errors)>0) { + OC_Template::printGuestPage('', 'error', array('errors' => $errors)); + exit; + } + + // TODO: we should get rid of this one, too + // WARNING: to make everything even more confusing, + // DATADIRECTORY is a var that changes and DATADIRECTORY_ROOT + // stays the same, but is set by "datadirectory". + // Any questions? + OC::$CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); + + // User and Groups + if( !OC_Config::getValue( "installed", false )){ + $_SESSION['user_id'] = ''; + } + + OC_User::useBackend( OC_Config::getValue( "userbackend", "database" )); + OC_Group::setBackend( OC_Config::getValue( "groupbackend", "database" )); + + // Load Apps + // This includes plugins for users and filesystems as well + global $RUNTIME_NOAPPS; + if(!$RUNTIME_NOAPPS ){ + OC_App::loadApps(); + } + + // Was in required file ... put it here + OC_Filesystem::registerStorageType('local','OC_Filestorage_Local',array('datadir'=>'string')); + + // Set up file system unless forbidden + global $RUNTIME_NOSETUPFS; + if(!$RUNTIME_NOSETUPFS ){ + OC_Util::setupFS(); + } + + // Last part: connect some hooks + OC_HOOK::connect('OC_User', 'post_createUser', 'OC_Connector_Sabre_Principal', 'addPrincipal'); + OC_HOOK::connect('OC_User', 'post_deleteUser', 'OC_Connector_Sabre_Principal', 'deletePrincipal'); } } -// this requires all our OC_* classes -spl_autoload_register(array('OC','autoload')); - -// set some stuff -//ob_start(); -error_reporting(E_ALL | E_STRICT); - -date_default_timezone_set('Europe/Berlin'); -ini_set('arg_separator.output','&'); -ini_set('session.cookie_httponly','1;'); -session_start(); - -// calculate the documentroot -OC::$DOCUMENTROOT=realpath($_SERVER['DOCUMENT_ROOT']); -OC::$SERVERROOT=str_replace("\\",'/',substr(__FILE__,0,-13)); -OC::$SUBURI=substr(realpath($_SERVER["SCRIPT_FILENAME"]),strlen(OC::$SERVERROOT)); -$scriptName=$_SERVER["SCRIPT_NAME"]; -if(substr($scriptName,-1)=='/'){ - $scriptName.='index.php'; -} -OC::$WEBROOT=substr($scriptName,0,strlen($scriptName)-strlen(OC::$SUBURI)); - -if(OC::$WEBROOT!='' and OC::$WEBROOT[0]!=='/'){ - OC::$WEBROOT='/'.OC::$WEBROOT; -} - -// set the right include path -set_include_path(OC::$SERVERROOT.'/lib'.PATH_SEPARATOR.OC::$SERVERROOT.'/config'.PATH_SEPARATOR.OC::$SERVERROOT.'/3rdparty'.PATH_SEPARATOR.get_include_path().PATH_SEPARATOR.OC::$SERVERROOT); - -//Some libs we really depend on -require_once('Sabre/autoload.php'); - // define runtime variables - unless this already has been done if( !isset( $RUNTIME_NOSETUPFS )){ $RUNTIME_NOSETUPFS = false; @@ -108,147 +173,7 @@ if( !isset( $RUNTIME_NOAPPS )){ $RUNTIME_NOAPPS = false; } -// TODO: we should get rid of this one, too -// WARNING: to make everything even more confusing, DATADIRECTORY is a var that -// changes and DATADIRECTORY_ROOT stays the same, but is set by -// "datadirectory". Any questions? -OC::$CONFIG_DATADIRECTORY = OC_Config::getValue( "datadirectory", OC::$SERVERROOT."/data" ); - -// redirect to https site if configured -if( OC_Config::getValue( "forcessl", false )){ - if(!isset($_SERVER['HTTPS']) or $_SERVER['HTTPS'] != 'on') { - $url = "https://". $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']; - header("Location: $url"); - exit(); - } -} - -$errors=OC_Util::checkServer(); -$error=(count($errors)>0); - - -// User and Groups -if( !OC_Config::getValue( "installed", false )){ - $_SESSION['user_id'] = ''; -} - - -OC_User::useBackend( OC_Config::getValue( "userbackend", "database" )); -OC_Group::setBackend( OC_Config::getValue( "groupbackend", "database" )); - -// Add the stuff we need always -OC_Util::addScript( "jquery-1.6.2.min" ); -OC_Util::addScript( "jquery-ui-1.8.14.custom.min" ); -OC_Util::addScript( "jquery-showpassword" ); -OC_Util::addScript( "jquery-tipsy" ); -OC_Util::addScript( "js" ); -OC_Util::addScript( "multiselect" ); -OC_Util::addScript('search','result'); -OC_Util::addStyle( "styles" ); -OC_Util::addStyle( "multiselect" ); -OC_Util::addStyle( "jquery-ui-1.8.14.custom" ); -OC_Util::addStyle( "jquery-tipsy" ); - -// Load Apps -// This includes plugins for users and filesystems as well -if(!$error and !$RUNTIME_NOAPPS ){ - OC_App::loadApps(); -} - -// Was in required file ... put it here -OC_Filesystem::registerStorageType('local','OC_Filestorage_Local',array('datadir'=>'string')); - -// Set up file system unless forbidden -if(!$error and !$RUNTIME_NOSETUPFS ){ - OC_Util::setupFS(); -} - -// Last part: connect some hooks -OC_HOOK::connect('OC_User', 'post_createUser', 'OC_Connector_Sabre_Principal', 'addPrincipal'); -OC_HOOK::connect('OC_User', 'post_deleteUser', 'OC_Connector_Sabre_Principal', 'deletePrincipal'); - - - -if($error) { - $tmpl = new OC_Template( '', 'error', 'guest' ); - $tmpl->assign('errors',$errors); - $tmpl->printPage(); - exit; -} - - - - -// FROM Connect.php -function OC_CONNECT_TEST($path,$user,$password){ - echo 'connecting...'; - $remote=OC_Connect::connect($path,$user,$password); - if($remote->connected){ - echo 'done
'; - if($remote->isLoggedIn()){ - echo 'logged in, session working
'; - echo 'trying to get remote files...'; - $files=$remote->getFiles(''); - if($files){ - echo count($files).' files found:
'; - foreach($files as $file){ - echo "{$file['type']} {$file['name']}: {$file['size']} bytes
"; - } - echo 'getting file "'.$file['name'].'"...'; - $size=$file['size']; - $file=$remote->getFile('',$file['name']); - if(file_exists($file)){ - $newSize=filesize($file); - if($size!=$newSize){ - echo "fail
Error: $newSize bytes received, $size expected."; - echo '

Recieved file:
'; - readfile($file); - unlink($file); - return; - } - OC_Filesystem::fromTmpFile($file,'/remoteFile'); - echo 'done
'; - echo 'sending file "burning_avatar.png"...'; - $res=$remote->sendFile('','burning_avatar.png','','burning_avatar.png'); - if($res){ - echo 'done
'; - }else{ - echo 'fail
'; - } - }else{ - echo 'fail
'; - } - }else{ - echo 'fail
'; - } - }else{ - echo 'no longer logged in, session fail
'; - } - }else{ - echo 'fail
'; - } - $remote->disconnect(); - die(); -} - -// From files.php -function zipAddDir($dir,$zip,$internalDir=''){ - $dirname=basename($dir); - $zip->addEmptyDir($internalDir.$dirname); - $internalDir.=$dirname.='/'; - $files=OC_Files::getdirectorycontent($dir); - foreach($files as $file){ - $filename=$file['name']; - $file=$dir.'/'.$filename; - if(OC_Filesystem::is_file($file)){ - $tmpFile=OC_Filesystem::toTmpFile($file); - OC_Files::$tmpFiles[]=$tmpFile; - $zip->addFile($tmpFile,$internalDir.$filename); - }elseif(OC_Filesystem::is_dir($file)){ - zipAddDir($file,$zip,$internalDir); - } - } -} +OC::init(); if(!function_exists('sys_get_temp_dir')) { function sys_get_temp_dir() { diff --git a/lib/files.php b/lib/files.php index 84dc9fd1c5..631726bf9b 100644 --- a/lib/files.php +++ b/lib/files.php @@ -102,7 +102,7 @@ class OC_Files { self::$tmpFiles[]=$tmpFile; $zip->addFile($tmpFile,basename($file)); }elseif(OC_Filesystem::is_dir($file)){ - zipAddDir($file,$zip); + self::zipAddDir($file,$zip); } } $zip->close(); @@ -113,7 +113,7 @@ class OC_Files { exit("cannot open <$filename>\n"); } $file=$dir.'/'.$files; - zipAddDir($file,$zip); + self::zipAddDir($file,$zip); $zip->close(); }else{ $zip=false; @@ -156,6 +156,23 @@ class OC_Files { } } + public static function zipAddDir($dir,$zip,$internalDir=''){ + $dirname=basename($dir); + $zip->addEmptyDir($internalDir.$dirname); + $internalDir.=$dirname.='/'; + $files=OC_Files::getdirectorycontent($dir); + foreach($files as $file){ + $filename=$file['name']; + $file=$dir.'/'.$filename; + if(OC_Filesystem::is_file($file)){ + $tmpFile=OC_Filesystem::toTmpFile($file); + OC_Files::$tmpFiles[]=$tmpFile; + $zip->addFile($tmpFile,$internalDir.$filename); + }elseif(OC_Filesystem::is_dir($file)){ + self::zipAddDir($file,$zip,$internalDir); + } + } + } /** * move a file or folder * diff --git a/lib/setup.php b/lib/setup.php index 7183eb624a..7b205acd70 100644 --- a/lib/setup.php +++ b/lib/setup.php @@ -235,7 +235,7 @@ class OC_Setup { } private static function createDBUser($name,$password,$connection) { - // we need to create 2 accounts, one for global use and one for local user. if we don't speccify the local one, + // we need to create 2 accounts, one for global use and one for local user. if we don't specify the local one, // the anonymous user would take precedence when there is one. $query = "CREATE USER '$name'@'localhost' IDENTIFIED BY '$password'"; $result = mysql_query($query, $connection); diff --git a/lib/util.php b/lib/util.php index e6c4eb83b3..2f74bfe584 100644 --- a/lib/util.php +++ b/lib/util.php @@ -236,7 +236,7 @@ class OC_Util { } } }else{ - //TODO: premisions checks for windows hosts + //TODO: permissions checks for windows hosts } if(is_dir($CONFIG_DATADIRECTORY_ROOT) and !is_writable($CONFIG_DATADIRECTORY_ROOT)){ $errors[]=array('error'=>'Data directory ('.$CONFIG_DATADIRECTORY_ROOT.') not writable by ownCloud
','hint'=>$permissionsHint);