From 057d885baf670467443dea0da0797b9289b919b4 Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 1 Jan 2014 16:07:36 -0800 Subject: return to working on red-dav; This is a bit of a slog at the moment and the basic framework isn't even close to working. This does break the working test we did have (which was never connected to the Red backend). Now we're starting to connect Red and DAV together intimately. There will probably be some twists and turns along the way as we get the information we need into all the class objects that need them. But the important part is that the RedDirectory and RedFile classes are loading without throwing white screens and from here we can use logging to figure out what the DAV front end is trying to do and what it is passing to the backend and hopefully figure out what it expects to do with the results. Unless you're a competent developer with a strong background in OOP and are helping develop this code, you should keep it an arm's length away from any production site and don't even think of enabling it. By default it is turned off. --- mod/cloud.php | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'mod/cloud.php') diff --git a/mod/cloud.php b/mod/cloud.php index cdd926444..3a4cf01b1 100644 --- a/mod/cloud.php +++ b/mod/cloud.php @@ -46,6 +46,11 @@ class RedBasicAuth extends Sabre\DAV\Auth\Backend\AbstractBasic { + public $channel_name = ''; + public $channel_id = 0; + public $channel_hash = ''; + public $observer = ''; + protected function validateUserPass($username, $password) { require_once('include/auth.php'); $record = account_verify_password($email,$pass); @@ -56,10 +61,13 @@ class RedBasicAuth extends Sabre\DAV\Auth\Backend\AbstractBasic { ); if($r) { $this->currentUser = $r[0]['channel_address']; + $this->channel_name = $r[0]['channel_address']; + $this->channel_id = $r[0]['channel_id']; + $this->channel_hash = $this->observer = $r[0]['channel_hash']; return true; } } - $r = q("select channel_account_id from channel where channel_address = '%s' limit 1", + $r = q("select * from channel where channel_address = '%s' limit 1", dbesc($username) ); if($r) { @@ -71,6 +79,9 @@ class RedBasicAuth extends Sabre\DAV\Auth\Backend\AbstractBasic { if(($record['account_flags'] == ACCOUNT_OK) || ($record['account_flags'] == ACCOUNT_UNVERIFIED) && (hash('whirlpool',$record['account_salt'] . $password) === $record['account_password'])) { logger('(DAV) RedBasicAuth: password verified for ' . $username); + $this->channel_name = $r[0]['channel_address']; + $this->channel_id = $r[0]['channel_id']; + $this->channel_hash = $r[0]['channel_hash']; return true; } } @@ -87,18 +98,25 @@ function cloud_init() { if(! get_config('system','enable_cloud')) killme(); - $rootDirectory = new DAV\FS\Directory('store'); + require_once('include/reddav.php'); + + $auth = new RedBasicAuth(); + + $rootDirectory = new RedDirectory('store',$auth); $server = new DAV\Server($rootDirectory); $lockBackend = new DAV\Locks\Backend\File('store/data/locks'); $lockPlugin = new DAV\Locks\Plugin($lockBackend); $server->addPlugin($lockPlugin); - $auth = new RedBasicAuth(); $auth->Authenticate($server,'Red Matrix'); + $browser = new DAV\Browser\Plugin(); + $server->addPlugin($browser); + + // All we need to do now, is to fire up the server $server->exec(); -- cgit v1.2.3