webdav fixes
This commit is contained in:
parent
672297531b
commit
9e05a0d592
|
@ -35,22 +35,28 @@ ob_clean();
|
|||
if($arguments['action']){
|
||||
switch($arguments['action']){
|
||||
case 'delete':
|
||||
OC_FILES::delete($arguments['dir'],$arguments['file']);
|
||||
echo (OC_FILES::delete($arguments['dir'],$arguments['file']))?'true':'false';
|
||||
break;
|
||||
case 'rename':
|
||||
OC_FILES::move($arguments['dir'],$arguments['file'],$arguments['dir'],$arguments['newname']);
|
||||
echo (OC_FILES::move($arguments['dir'],$arguments['file'],$arguments['dir'],$arguments['newname']))?'true':'false';
|
||||
break;
|
||||
case 'new':
|
||||
OC_FILES::newfile($arguments['dir'],$arguments['name'],$arguments['type']);
|
||||
echo (OC_FILES::newfile($arguments['dir'],$arguments['name'],$arguments['type']))?'true':'false';
|
||||
break;
|
||||
case 'move':
|
||||
OC_FILES::move($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']);
|
||||
echo (OC_FILES::move($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']))?'true':'false';
|
||||
break;
|
||||
case 'copy':
|
||||
echo (OC_FILES::copy($arguments['sourcedir'],$arguments['source'],$arguments['targetdir'],$arguments['target']))?'true':'false';
|
||||
break;
|
||||
case 'get':
|
||||
OC_FILES::get($arguments['dir'],$arguments['file']);
|
||||
break;
|
||||
case 'getfiles':
|
||||
echo json_encode(OC_FILES::getdirectorycontent($CONFIG_DATADIRECTORY.'/'.$arguments['dir']));
|
||||
echo json_encode(OC_FILES::getdirectorycontent($arguments['dir']));
|
||||
break;
|
||||
case 'find':
|
||||
echo json_encode(OC_FILESYSTEM::find($arguments['path']));
|
||||
break;
|
||||
case 'login':
|
||||
if(OC_USER::login($arguments['username'],$arguments['password'])){
|
||||
|
|
|
@ -229,6 +229,7 @@ class HTTP_WebDAV_Server
|
|||
|
||||
// detect requested method names
|
||||
$method = strtolower($this->_SERVER["REQUEST_METHOD"]);
|
||||
error_log("serving $method request");
|
||||
$wrapper = "http_".$method;
|
||||
|
||||
// activate HEAD emulation by GET if no HEAD method found
|
||||
|
|
|
@ -110,19 +110,16 @@
|
|||
$fspath = $options["path"];
|
||||
|
||||
// sanity check
|
||||
if (!file_exists($fspath)) {
|
||||
if (!OC_FILESYSTEM::file_exists($fspath)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// prepare property array
|
||||
$files["files"] = array();
|
||||
|
||||
// store information for the requested path itself
|
||||
$files["files"][] = $this->fileinfo($options["path"]);
|
||||
|
||||
// information for contained resources requested?
|
||||
if (!empty($options["depth"]) && OC_FILESYSTEM::is_dir($fspath) && OC_FILESYSTEM::is_readable($fspath)) {
|
||||
|
||||
// make sure path ends with '/'
|
||||
$options["path"] = $this->_slashify($options["path"]);
|
||||
|
||||
|
@ -160,18 +157,15 @@
|
|||
// TODO remove slash append code when base clase is able to do it itself
|
||||
$info["path"] = OC_FILESYSTEM::is_dir($fspath) ? $this->_slashify($path) : $path;
|
||||
$info["props"] = array();
|
||||
|
||||
// no special beautified displayname here ...
|
||||
$info["props"][] = $this->mkprop("displayname", strtoupper($path));
|
||||
|
||||
// creation and modification time
|
||||
$info["props"][] = $this->mkprop("creationdate", OC_FILESYSTEM::filectime($fspath));
|
||||
$info["props"][] = $this->mkprop("getlastmodified", OC_FILESYSTEM::filemtime($fspath));
|
||||
|
||||
// Microsoft extensions: last access time and 'hidden' status
|
||||
$info["props"][] = $this->mkprop("lastaccessed", OC_FILESYSTEM::fileatime($fspath));
|
||||
$info["props"][] = $this->mkprop("ishidden", ('.' === substr(basename($fspath), 0, 1)));
|
||||
|
||||
// type and size (caller already made sure that path exists)
|
||||
if ( OC_FILESYSTEM::is_dir($fspath)) {
|
||||
// directory (WebDAV collection)
|
||||
|
@ -187,15 +181,12 @@
|
|||
}
|
||||
$info["props"][] = $this->mkprop("getcontentlength", OC_FILESYSTEM::filesize($fspath));
|
||||
}
|
||||
|
||||
// get additional properties from database
|
||||
$query = "SELECT ns, name, value FROM properties WHERE path = '$path'";
|
||||
$res = OC_DB::query($query);
|
||||
while ($row = OC_DB::fetch_assoc($res)) {
|
||||
$res = OC_DB::select($query);
|
||||
while ($row = $res[0]) {
|
||||
$info["props"][] = $this->mkprop($row["ns"], $row["name"], $row["value"]);
|
||||
}
|
||||
OC_DB::free_result($res);
|
||||
|
||||
return $info;
|
||||
}
|
||||
|
||||
|
@ -295,7 +286,7 @@
|
|||
{
|
||||
// get absolute fs path to requested resource)
|
||||
$fspath = $options["path"];
|
||||
error_log("get '$fspath'");
|
||||
error_log("get $fspath");
|
||||
// is this a collection?
|
||||
if (OC_FILESYSTEM::is_dir($fspath)) {
|
||||
return $this->GetDir($fspath, $options);
|
||||
|
@ -456,7 +447,6 @@
|
|||
$query = "DELETE FROM properties WHERE path LIKE '".$this->_slashify($options["path"])."%'";
|
||||
OC_DB::query($query);
|
||||
// System::rm(array("-rf, $path"));
|
||||
error_log('delTree');
|
||||
OC_FILESYSTEM::delTree($path);
|
||||
} else {
|
||||
OC_FILESYSTEM::unlink($path);
|
||||
|
@ -605,6 +595,7 @@
|
|||
} else {
|
||||
|
||||
if (!OC_FILESYSTEM::copy($file, $destfile)) {
|
||||
error_log("copy $file to $destfile failed");
|
||||
return "409 Conflict";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,6 +64,8 @@ class OC_FILES {
|
|||
$stat=OC_FILESYSTEM::stat($directory.'/'.$filename);
|
||||
$file=array_merge($file,$stat);
|
||||
$file['mime']=OC_FILES::getMimeType($directory .'/'. $filename);
|
||||
$file['readable']=OC_FILESYSTEM::is_readable($directory .'/'. $filename);
|
||||
$file['writeable']=OC_FILESYSTEM::is_writeable($directory .'/'. $filename);
|
||||
$file['type']=OC_FILESYSTEM::filetype($directory .'/'. $filename);
|
||||
if($file['type']=='dir'){
|
||||
$dirs[$file['name']]=$file;
|
||||
|
@ -158,7 +160,23 @@ class OC_FILES {
|
|||
if(OC_USER::isLoggedIn()){
|
||||
$targetFile=$targetDir.'/'.$target;
|
||||
$sourceFile=$sourceDir.'/'.$source;
|
||||
OC_FILESYSTEM::rename($sourceFile,$targetFile);
|
||||
return OC_FILESYSTEM::rename($sourceFile,$targetFile);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* copy a file or folder
|
||||
*
|
||||
* @param dir $sourceDir
|
||||
* @param file $source
|
||||
* @param dir $targetDir
|
||||
* @param file $target
|
||||
*/
|
||||
public static function copy($sourceDir,$source,$targetDir,$target){
|
||||
if(OC_USER::isLoggedIn()){
|
||||
$targetFile=$targetDir.'/'.$target;
|
||||
$sourceFile=$sourceDir.'/'.$source;
|
||||
return OC_FILESYSTEM::copy($sourceFile,$targetFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -173,10 +191,15 @@ class OC_FILES {
|
|||
if(OC_USER::isLoggedIn()){
|
||||
$file=$dir.'/'.$name;
|
||||
if($type=='dir'){
|
||||
OC_FILESYSTEM::mkdir($file);
|
||||
return OC_FILESYSTEM::mkdir($file);
|
||||
}elseif($type=='file'){
|
||||
$fileHandle=OC_FILESYSTEM::fopen($file, 'w') or die("can't open file");
|
||||
$fileHandle=OC_FILESYSTEM::fopen($file, 'w');
|
||||
if($fileHandle){
|
||||
fclose($fileHandle);
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -191,9 +214,9 @@ class OC_FILES {
|
|||
if(OC_USER::isLoggedIn()){
|
||||
$file=$dir.'/'.$file;
|
||||
if(OC_FILESYSTEM::is_file($file)){
|
||||
OC_FILESYSTEM::unlink($file);
|
||||
return OC_FILESYSTEM::unlink($file);
|
||||
}elseif(OC_FILESYSTEM::is_dir($file)){
|
||||
OC_FILESYSTEM::delTree($file);
|
||||
return OC_FILESYSTEM::delTree($file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,11 +39,22 @@ if(empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['REDIRECT_REMOTE_USER']))
|
|||
$user=$_SERVER['PHP_AUTH_USER'];
|
||||
$passwd=$_SERVER['PHP_AUTH_PW'];
|
||||
if(OC_USER::login($user,$passwd)){
|
||||
$CONFIG_DATADIRECTORY=$CONFIG_DATADIRECTORY_ROOT.'/'.$_SESSION['username_clean'];
|
||||
$CONFIG_DATADIRECTORY=$CONFIG_DATADIRECTORY_ROOT.'/'.$user;
|
||||
if(!is_dir($CONFIG_DATADIRECTORY)){
|
||||
mkdir($CONFIG_DATADIRECTORY);
|
||||
}
|
||||
$rootStorage=new OC_FILESTORAGE_LOCAL(array('datadir'=>$CONFIG_DATADIRECTORY));
|
||||
if($CONFIG_ENABLEBACKUP){
|
||||
if(!is_dir($CONFIG_BACKUPDIRECTORY)){
|
||||
mkdir($CONFIG_BACKUPDIRECTORY);
|
||||
}
|
||||
if(!is_dir($CONFIG_BACKUPDIRECTORY.'/'.$user)){
|
||||
mkdir($CONFIG_BACKUPDIRECTORY.'/'.$user);
|
||||
}
|
||||
$backupStorage=new OC_FILESTORAGE_LOCAL(array('datadir'=>$CONFIG_BACKUPDIRECTORY.'/'.$user));
|
||||
$backup=new OC_FILEOBSERVER_BACKUP(array('storage'=>$backupStorage));
|
||||
$rootStorage->addObserver($backup);
|
||||
}
|
||||
OC_FILESYSTEM::mount($rootStorage,'/');
|
||||
$server = new HTTP_WebDAV_Server_Filesystem();
|
||||
$server->db_name = $CONFIG_DBNAME;
|
||||
|
|
Loading…
Reference in New Issue