diff options
author | Mario Vavti <mario@mariovavti.com> | 2016-12-23 10:09:46 +0100 |
---|---|---|
committer | Mario Vavti <mario@mariovavti.com> | 2016-12-23 10:09:46 +0100 |
commit | 3b9b03cf86979b28e7fa249133176bed84b0105c (patch) | |
tree | 336dc8b8b9627e7f4a93e5c35fe3e98555274616 /Zotlabs/Module/Snap.php | |
parent | 2e5a993f880d619aedf3693927e7b3e164fbfcc0 (diff) | |
parent | ef39c1e94b5149a3019d417d08dc7c16c8aef9c1 (diff) | |
download | volse-hubzilla-3b9b03cf86979b28e7fa249133176bed84b0105c.tar.gz volse-hubzilla-3b9b03cf86979b28e7fa249133176bed84b0105c.tar.bz2 volse-hubzilla-3b9b03cf86979b28e7fa249133176bed84b0105c.zip |
Merge branch '2.0RC'
Diffstat (limited to 'Zotlabs/Module/Snap.php')
-rw-r--r-- | Zotlabs/Module/Snap.php | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/Zotlabs/Module/Snap.php b/Zotlabs/Module/Snap.php new file mode 100644 index 000000000..89aebc097 --- /dev/null +++ b/Zotlabs/Module/Snap.php @@ -0,0 +1,105 @@ +<?php + +namespace Zotlabs\Module; + +/** + * @brief Initialize Hubzilla's cloud (SabreDAV). + * + * Module for accessing the DAV storage area from a DAV client. + */ + +use \Sabre\DAV as SDAV; +use \Zotlabs\Storage; + +// composer autoloader for SabreDAV +require_once('vendor/autoload.php'); + + +/** + * @brief Fires up the SabreDAV server. + * + * @param App &$a + */ + +class Snap extends \Zotlabs\Web\Controller { + + function init() { + + // workaround for HTTP-auth in CGI mode + if (x($_SERVER, 'REDIRECT_REMOTE_USER')) { + $userpass = base64_decode(substr($_SERVER["REDIRECT_REMOTE_USER"], 6)) ; + if(strlen($userpass)) { + list($name, $password) = explode(':', $userpass); + $_SERVER['PHP_AUTH_USER'] = $name; + $_SERVER['PHP_AUTH_PW'] = $password; + } + } + + if (x($_SERVER, 'HTTP_AUTHORIZATION')) { + $userpass = base64_decode(substr($_SERVER["HTTP_AUTHORIZATION"], 6)) ; + if(strlen($userpass)) { + list($name, $password) = explode(':', $userpass); + $_SERVER['PHP_AUTH_USER'] = $name; + $_SERVER['PHP_AUTH_PW'] = $password; + } + } + + if (! is_dir('store')) + os_mkdir('store', STORAGE_DEFAULT_PERMISSIONS, false); + + $which = null; + if (argc() > 1) + $which = argv(1); + + $profile = 0; + + if($which) + profile_load( $which, $profile); + else + killme(); + + if($_SERVER['PHP_AUTH_USER'] && $_SERVER['PHP_AUTH_USER'] !== $which) + killme(); + + if(local_channel()) { + $c = \App::get_channel(); + if($c && $c['channel_address'] !== $which) + killme(); + } + + if(! in_array(strtolower($_SERVER['REQUEST_METHOD']),['propfind','get','head'])) + killme(); + + $auth = new \Zotlabs\Storage\BasicAuth(); + $auth->setRealm(ucfirst(\Zotlabs\Lib\System::get_platform_name()) . 'WebDAV'); + + $rootDirectory = new SDAV\FS\Directory("store"); + + // The server object is responsible for making sense out of the WebDAV protocol + $server = new SDAV\Server($rootDirectory); + + $authPlugin = new \Sabre\DAV\Auth\Plugin($auth); + $server->addPlugin($authPlugin); + + // If your server is not on your webroot, make sure the following line has the + // correct information + $server->setBaseUri('/snap'); + + // The lock manager is reponsible for making sure users don't overwrite + // each others changes. + $lockBackend = new SDAV\Locks\Backend\File('store/[data]/locks'); + $lockPlugin = new SDAV\Locks\Plugin($lockBackend); + $server->addPlugin($lockPlugin); + + // This ensures that we get a pretty index in the browser, but it is + // optional. + +// $server->addPlugin(new SDAV\Browser\Plugin()); + + // All we need to do now, is to fire up the server + $server->exec(); + killme(); + + } + +} |