summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Ehrke <dev@georgswebsite.de>2012-03-22 20:40:20 +0100
committerGeorg Ehrke <dev@georgswebsite.de>2012-03-22 20:40:20 +0100
commit37963fee28824165d50e8a12c754fb9ee26d89d8 (patch)
treef293e9927201a2ce760dd5916151eadbe7e060f4
parent61166c1002a7a44351e27b17d651afd3afc2f3b5 (diff)
parent82b54938e32a980d3d268a63fdf56598f12e2ff4 (diff)
downloadnextcloud-server-37963fee28824165d50e8a12c754fb9ee26d89d8.tar.gz
nextcloud-server-37963fee28824165d50e8a12c754fb9ee26d89d8.zip
Merge branch 'master' into calendar_sharing
-rw-r--r--apps/files_encryption/lib/crypt.php2
-rw-r--r--apps/files_remote/appinfo/app.php9
-rw-r--r--apps/files_remote/appinfo/info.xml10
-rw-r--r--apps/files_remote/lib/ftp.php157
-rw-r--r--apps/files_remote/tests/config.php9
-rw-r--r--apps/files_remote/tests/ftp.php28
-rw-r--r--files/admin.php8
-rw-r--r--files/index.php1
-rw-r--r--files/templates/index.php4
-rw-r--r--lib/files.php4
-rw-r--r--tests/lib/filestorage.php18
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(){