diff options
author | Georg Ehrke <dev@georgswebsite.de> | 2012-03-22 20:40:20 +0100 |
---|---|---|
committer | Georg Ehrke <dev@georgswebsite.de> | 2012-03-22 20:40:20 +0100 |
commit | 37963fee28824165d50e8a12c754fb9ee26d89d8 (patch) | |
tree | f293e9927201a2ce760dd5916151eadbe7e060f4 | |
parent | 61166c1002a7a44351e27b17d651afd3afc2f3b5 (diff) | |
parent | 82b54938e32a980d3d268a63fdf56598f12e2ff4 (diff) | |
download | nextcloud-server-37963fee28824165d50e8a12c754fb9ee26d89d8.tar.gz nextcloud-server-37963fee28824165d50e8a12c754fb9ee26d89d8.zip |
Merge branch 'master' into calendar_sharing
-rw-r--r-- | apps/files_encryption/lib/crypt.php | 2 | ||||
-rw-r--r-- | apps/files_remote/appinfo/app.php | 9 | ||||
-rw-r--r-- | apps/files_remote/appinfo/info.xml | 10 | ||||
-rw-r--r-- | apps/files_remote/lib/ftp.php | 157 | ||||
-rw-r--r-- | apps/files_remote/tests/config.php | 9 | ||||
-rw-r--r-- | apps/files_remote/tests/ftp.php | 28 | ||||
-rw-r--r-- | files/admin.php | 8 | ||||
-rw-r--r-- | files/index.php | 1 | ||||
-rw-r--r-- | files/templates/index.php | 4 | ||||
-rw-r--r-- | lib/files.php | 4 | ||||
-rw-r--r-- | tests/lib/filestorage.php | 18 |
11 files changed, 233 insertions, 17 deletions
diff --git a/apps/files_encryption/lib/crypt.php b/apps/files_encryption/lib/crypt.php index 0a593b98c4b..246d4f672db 100644 --- a/apps/files_encryption/lib/crypt.php +++ b/apps/files_encryption/lib/crypt.php @@ -26,7 +26,7 @@ // - Crypt/decrypt button in the userinterface // - Setting if crypto should be on by default // - Add a setting "DonĀ“t encrypt files larger than xx because of performance reasons" -// - Transparent decrypt/encrpt in filesystem.php. Autodetect if a file is encrypted (.encrypted extensio) +// - Transparent decrypt/encrypt in filesystem.php. Autodetect if a file is encrypted (.encrypted extension) // - Don't use a password directly as encryption key. but a key which is stored on the server and encrypted with the user password. -> password change faster // - IMPORTANT! Check if the block lenght of the encrypted data stays the same diff --git a/apps/files_remote/appinfo/app.php b/apps/files_remote/appinfo/app.php new file mode 100644 index 00000000000..f94e813ea5f --- /dev/null +++ b/apps/files_remote/appinfo/app.php @@ -0,0 +1,9 @@ +<?php +/** + * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +OC::$CLASSPATH['OC_Filestorage_FTP']='apps/files_remote/lib/ftp.php'; diff --git a/apps/files_remote/appinfo/info.xml b/apps/files_remote/appinfo/info.xml new file mode 100644 index 00000000000..0720b6095b9 --- /dev/null +++ b/apps/files_remote/appinfo/info.xml @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<info> + <id>files_remote</id> + <name>Remote storage support</name> + <description>Mount remote storage sources</description> + <version>0.1</version> + <licence>AGPL</licence> + <author>Robin Appelman</author> + <require>3</require> +</info> diff --git a/apps/files_remote/lib/ftp.php b/apps/files_remote/lib/ftp.php new file mode 100644 index 00000000000..802446b4fd8 --- /dev/null +++ b/apps/files_remote/lib/ftp.php @@ -0,0 +1,157 @@ +<?php +/** + * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class OC_FileStorage_FTP extends OC_Filestorage_Common{ + private $password; + private $user; + private $host; + private $secure; + private $root; + + private static $tempFiles=array(); + + public function __construct($params){ + $this->host=$params['host']; + $this->user=$params['user']; + $this->password=$params['password']; + $this->secure=isset($params['secure'])?(bool)$params['secure']:false; + $this->root=isset($params['root'])?$params['root']:'/'; + if(substr($this->root,0,1)!='/'){ + $this->root='/'.$this->root; + } + + //create the root folder if necesary + mkdir($this->constructUrl('')); + } + + /** + * construct the ftp url + * @param string path + * @return string + */ + public function constructUrl($path){ + $url='ftp'; + if($this->secure){ + $url.='s'; + } + $url.='://'.$this->user.':'.$this->password.'@'.$this->host.$this->root.$path; + return $url; + } + + public function mkdir($path){ + return mkdir($this->constructUrl($path)); + } + + public function rmdir($path){ + if($this->file_exists($path)){ + $succes=rmdir($this->constructUrl($path)); + clearstatcache(); + return $succes; + }else{ + return false; + } + } + + public function opendir($path){ + return opendir($this->constructUrl($path)); + } + + public function filetype($path){ + return filetype($this->constructUrl($path)); + } + + public function is_readable($path){ + return true;//not properly supported + } + + public function is_writable($path){ + return true;//not properly supported + } + + public function file_exists($path){ + return file_exists($this->constructUrl($path)); + } + + public function unlink($path){ + $succes=unlink($this->constructUrl($path)); + clearstatcache(); + return $succes; + } + + public function fopen($path,$mode){ + switch($mode){ + case 'r': + case 'rb': + case 'w': + case 'wb': + case 'a': + case 'ab': + //these are supported by the wrapper + $context = stream_context_create(array('ftp' => array('overwrite' => true))); + return fopen($this->constructUrl($path),$mode,false,$context); + case 'r+': + case 'w+': + case 'wb+': + case 'a+': + case 'x': + case 'x+': + case 'c': + case 'c+': + //emulate these + if(strrpos($path,'.')!==false){ + $ext=substr($path,strrpos($path,'.')); + }else{ + $ext=''; + } + $tmpFile=OC_Helper::tmpFile($ext); + OC_CloseStreamWrapper::$callBacks[$tmpFile]=array($this,'writeBack'); + if($this->file_exists($path)){ + $this->getFile($path,$tmpFile); + } + self::$tempFiles[$tmpFile]=$path; + return fopen('close://'.$tmpFile,$mode); + } + } + + public function writeBack($tmpFile){ + if(isset(self::$tempFiles[$tmpFile])){ + $this->uploadFile($tmpFile,self::$tempFiles[$tmpFile]); + unlink($tmpFile); + } + } + + public function free_space($path){ + return 0; + } + + public function touch($path,$mtime=null){ + if(is_null($mtime)){ + $fh=$this->fopen($path,'a'); + fwrite($fh,''); + fclose($fh); + }else{ + return false;//not supported + } + } + + public function getFile($path,$target){ + return copy($this->constructUrl($path),$target); + } + + public function uploadFile($path,$target){ + return copy($path,$this->constructUrl($target)); + } + + public function rename($path1,$path2){ + return rename($this->constructUrl($path1),$this->constructUrl($path2)); + } + + public function stat($path){ + return stat($this->constructUrl($path)); + } +} diff --git a/apps/files_remote/tests/config.php b/apps/files_remote/tests/config.php new file mode 100644 index 00000000000..54105782919 --- /dev/null +++ b/apps/files_remote/tests/config.php @@ -0,0 +1,9 @@ +<?php +return array( + 'ftp'=>array( + 'host'=>'localhost', + 'user'=>'test', + 'password'=>'test', + 'root'=>'/test', + ) +); diff --git a/apps/files_remote/tests/ftp.php b/apps/files_remote/tests/ftp.php new file mode 100644 index 00000000000..2d5405ccda6 --- /dev/null +++ b/apps/files_remote/tests/ftp.php @@ -0,0 +1,28 @@ +<?php +/** + * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class Test_Filestorage_FTP extends Test_FileStorage { + /** + * @var string tmpDir + */ + private $config; + private $id; + + public function setUp(){ + $id=uniqid(); + $this->config=include('apps/files_remote/tests/config.php'); + $this->config['ftp']['root'].='/'.$id;//make sure we have an new empty folder to work in + $this->instance=new OC_Filestorage_FTP($this->config['ftp']); + } + + public function tearDown(){ + OC_Helper::rmdirr($this->instance->constructUrl('')); + } +} + +?>
\ No newline at end of file diff --git a/files/admin.php b/files/admin.php index b9c26c465f3..1fe1ff55a4c 100644 --- a/files/admin.php +++ b/files/admin.php @@ -35,16 +35,16 @@ if($_POST) { } if(isset($_POST['maxZipInputSize'])) { $maxZipInputSize=$_POST['maxZipInputSize']; - OC_Preferences::setValue('', 'files', 'maxZipInputSize', OC_Helper::computerFileSize($maxZipInputSize)); + OC_Config::setValue('maxZipInputSize', OC_Helper::computerFileSize($maxZipInputSize)); } - OC_Preferences::setValue('', 'files', 'allowZipDownload', isset($_POST['allowZipDownload'])); + OC_Config::setValue('allowZipDownload', isset($_POST['allowZipDownload'])); }else{ $upload_max_filesize = OC_Helper::computerFileSize(ini_get('upload_max_filesize')); $post_max_size = OC_Helper::computerFileSize(ini_get('post_max_size')); $maxUploadFilesize = min($upload_max_filesize, $post_max_size); - $allowZipDownload = intval(OC_Preferences::getValue('', 'files', 'allowZipDownload', 1)); - $maxZipInputSize = OC_Helper::humanfilesize(OC_Preferences::getValue('', 'files', 'maxZipInputSize', OC_Helper::computerFileSize('800 MB'))); + $maxZipInputSize = OC_Helper::humanfilesize(OC_Config::getValue('maxZipInputSize', OC_Helper::computerFileSize('800 MB'))); } +$allowZipDownload = intval(OC_Config::getValue('allowZipDownload', true)); OC_App::setActiveNavigationEntry( "files_administration" ); diff --git a/files/index.php b/files/index.php index 79261e495be..82d09608924 100644 --- a/files/index.php +++ b/files/index.php @@ -98,6 +98,7 @@ $tmpl->assign( 'readonly', !OC_Filesystem::is_writable($dir)); $tmpl->assign( "files", $files ); $tmpl->assign( 'uploadMaxFilesize', $maxUploadFilesize); $tmpl->assign( 'uploadMaxHumanFilesize', OC_Helper::humanFileSize($maxUploadFilesize)); +$tmpl->assign( 'allowZipDownload', intval(OC_Config::getValue('allowZipDownload', true))); $tmpl->printPage(); ?> diff --git a/files/templates/index.php b/files/templates/index.php index 497a0f36c0d..da1e58ce137 100644 --- a/files/templates/index.php +++ b/files/templates/index.php @@ -40,7 +40,7 @@ <?php if(!isset($_['readonly']) || !$_['readonly']) { ?><input type="checkbox" id="select_all" /><?php } ?> <span class='name'><?php echo $l->t( 'Name' ); ?></span> <span class='selectedActions'> - <?php if(OC_Preferences::getValue('', 'files', 'allowZipDownload', 1)) : ?> + <?php if($_['allowZipDownload']) : ?> <a href="" title="<?php echo $l->t('Download')?>" class="download"><img class='svg' alt="Download" src="<?php echo image_path("core", "actions/download.svg"); ?>" /></a> <?php endif; ?> <a href="" title="Share" class="share"><img class='svg' alt="Share" src="<?php echo image_path("core", "actions/share.svg"); ?>" /></a> @@ -70,4 +70,4 @@ </div> <!-- config hints for javascript --> -<input type="hidden" name="allowZipDownload" id="allowZipDownload" value="<?php echo OC_Preferences::getValue('', 'files', 'allowZipDownload', 1); ?>" />
\ No newline at end of file +<input type="hidden" name="allowZipDownload" id="allowZipDownload" value="<?php echo $_['allowZipDownload']; ?>" />
\ No newline at end of file diff --git a/lib/files.php b/lib/files.php index 662f0b59724..57ebb9005ad 100644 --- a/lib/files.php +++ b/lib/files.php @@ -224,7 +224,7 @@ class OC_Files { * @param files $files */ static function validateZipDownload($dir, $files) { - if(!OC_Preferences::getValue('', 'files', 'allowZipDownload', 1)) { + if(!OC_Config::getValue('allowZipDownload', true)) { $l = new OC_L10N('files'); header("HTTP/1.0 409 Conflict"); $tmpl = new OC_Template( '', 'error', 'user' ); @@ -239,7 +239,7 @@ class OC_Files { exit; } - $zipLimit = OC_Preferences::getValue('', 'files', 'maxZipInputSize', OC_Helper::computerFileSize('800 MB')); + $zipLimit = OC_Config::getValue('maxZipInputSize', OC_Helper::computerFileSize('800 MB')); if($zipLimit > 0) { $totalsize = 0; if(is_array($files)){ diff --git a/tests/lib/filestorage.php b/tests/lib/filestorage.php index 9ffa0eca9cb..4858234a2d8 100644 --- a/tests/lib/filestorage.php +++ b/tests/lib/filestorage.php @@ -135,10 +135,12 @@ abstract class Test_FileStorage extends UnitTestCase { $ctimeEnd=time(); $cTime=$this->instance->filectime('/lorem.txt'); $mTime=$this->instance->filemtime('/lorem.txt'); - $this->assertTrue($ctimeStart<=$cTime); - $this->assertTrue($cTime<=$ctimeEnd); - $this->assertTrue($ctimeStart<=$mTime); - $this->assertTrue($mTime<=$ctimeEnd); + if($cTime!=-1){//not everything can support ctime + $this->assertTrue(($ctimeStart-1)<=$cTime); + $this->assertTrue($cTime<=($ctimeEnd+1)); + } + $this->assertTrue(($ctimeStart-1)<=$mTime); + $this->assertTrue($mTime<=($ctimeEnd+1)); $this->assertEqual(filesize($textFile),$this->instance->filesize('/lorem.txt')); $stat=$this->instance->stat('/lorem.txt'); @@ -153,8 +155,8 @@ abstract class Test_FileStorage extends UnitTestCase { $originalCTime=$cTime; $cTime=$this->instance->filectime('/lorem.txt'); $mTime=$this->instance->filemtime('/lorem.txt'); - $this->assertTrue($mtimeStart<=$mTime); - $this->assertTrue($mTime<=$mtimeEnd); + $this->assertTrue(($mtimeStart-1)<=$mTime); + $this->assertTrue($mTime<=($mtimeEnd+1)); $this->assertEqual($cTime,$originalCTime); if($this->instance->touch('/lorem.txt',100)!==false){ @@ -170,8 +172,8 @@ abstract class Test_FileStorage extends UnitTestCase { $mtimeEnd=time(); $originalCTime=$cTime; $mTime=$this->instance->filemtime('/lorem.txt'); - $this->assertTrue($mtimeStart<=$mTime); - $this->assertTrue($mTime<=$mtimeEnd); + $this->assertTrue(($mtimeStart-1)<=$mTime); + $this->assertTrue($mTime<=($mtimeEnd+1)); } public function testSearch(){ |