diff options
Diffstat (limited to 'include/reddav.php')
-rw-r--r-- | include/reddav.php | 79 |
1 files changed, 71 insertions, 8 deletions
diff --git a/include/reddav.php b/include/reddav.php index 97903edb2..79c68a000 100644 --- a/include/reddav.php +++ b/include/reddav.php @@ -3,6 +3,8 @@ use Sabre\DAV; require_once('vendor/autoload.php'); +require_once('include/attach.php'); + class RedInode implements DAV\INode { private $attach; @@ -149,15 +151,56 @@ class RedDirectory extends DAV\Node implements DAV\ICollection { function createFile($name,$data = null) { + logger('RedDirectory::createFile : ' . $name); + logger('RedDirectory::createFile : ' . print_r($this,true)); + + logger('createFile():' . stream_get_contents($data)); + + if(! perm_is_allowed($this->auth->channel_id,$this->auth->observer,'write_storage')) { + logger('createFile: permission denied'); throw new DAV\Exception\Forbidden('Permission denied.'); return; } + $mimetype = z_mime_content_type($name); + + + $c = q("select * from channel where channel_id = %d limit 1", + intval($this->auth->channel_id) + ); + + + $filesize = 0; + $hash = random_string(); +dbg(1); + + $r = q("INSERT INTO attach ( aid, uid, hash, filename, filetype, filesize, revision, data, created, edited ) + VALUES ( %d, %d, '%s', '%s', '%s', %d, %d, '%s', '%s', '%s' ) ", + intval($c[0]['channel_account_id']), + intval($c[0]['channel_id']), + dbesc($hash), + dbesc($name), + dbesc($mimetype), + intval($filesize), + intval(0), + dbesc(stream_get_contents($data)), + dbesc(datetime_convert()), + dbesc(datetime_convert()) + ); + + $r = q("update attach set filesize = length(data) where hash = '%s' and uid = %d limit 1", + dbesc($hash), + intval($c[0]['channel_id']) + ); + +dbg(0); + } + function createDirectory($name) { if(! perm_is_allowed($this->auth->channel_id,$this->auth->observer,'write_storage')) { throw new DAV\Exception\Forbidden('Permission denied.'); @@ -166,6 +209,12 @@ class RedDirectory extends DAV\Node implements DAV\ICollection { + + + + + + } @@ -174,10 +223,11 @@ class RedDirectory extends DAV\Node implements DAV\ICollection { logger('RedDirectory::childExists : ' . print_r($this->auth,true)); if($this->red_path === '/' && $name === 'cloud') { + logger('RedDirectory::childExists /cloud: true'); return true; } - $x = RedFileData($this->ext_path . '/' . $name, $this->auth); + $x = RedFileData($this->ext_path . '/' . $name, $this->auth,true); logger('RedFileData returns: ' . print_r($x,true)); if($x) return true; @@ -232,11 +282,20 @@ class RedFile extends DAV\Node implements DAV\IFile { function put($data) { logger('RedFile::put: ' . basename($this->name)); + logger('put():' . stream_get_contents($data)); + +dbg(1); $r = q("update attach set data = '%s' where hash = '%s' and uid = %d limit 1", - dbesc($data), + dbesc(stream_get_contents($data)), dbesc($this->data['hash']), intval($this->data['uid']) ); + $r = q("update attach set filesize = length(data) where hash = '%s' and uid = %d limit 1", + dbesc($this->data['hash']), + intval($this->data['uid']) + ); +dbg(0); + } @@ -376,7 +435,7 @@ logger('dbg2: ' . print_r($r,true)); } -function RedFileData($file, &$auth) { +function RedFileData($file, &$auth,$test = false) { logger('RedFileData:' . $file); @@ -463,15 +522,19 @@ dbg(0); } if($errors) { + if($test) + return false; throw new DAV\Exception\Forbidden('Permission denied.'); return; } - if($r[0]['flags'] & ATTACH_FLAG_DIR) - return new RedDirectory('/cloud' . $path . '/' . $r[0]['filename'],$auth); - else - return new RedFile('/cloud' . $path . '/' . $r[0]['filename'],$r[0],$auth); - + if($r) { + if($r[0]['flags'] & ATTACH_FLAG_DIR) + return new RedDirectory('/cloud' . $path . '/' . $r[0]['filename'],$auth); + else + return new RedFile('/cloud' . $path . '/' . $r[0]['filename'],$r[0],$auth); + } + return false; } |