diff options
-rw-r--r-- | Zotlabs/Module/Snap.php | 93 | ||||
-rw-r--r-- | include/api.php | 19 |
2 files changed, 109 insertions, 3 deletions
diff --git a/Zotlabs/Module/Snap.php b/Zotlabs/Module/Snap.php new file mode 100644 index 000000000..742d88617 --- /dev/null +++ b/Zotlabs/Module/Snap.php @@ -0,0 +1,93 @@ +<?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(); + + $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(); + + } + +} diff --git a/include/api.php b/include/api.php index ad8e9d572..c14b3df28 100644 --- a/include/api.php +++ b/include/api.php @@ -536,9 +536,6 @@ require_once('include/api_auth.php'); api_register_func('api/z/1.0/files','api_attach_list', true); - - - function api_file_meta($type) { if (api_user()===false) return false; if(! $_REQUEST['file_id']) return false; @@ -601,7 +598,19 @@ require_once('include/api_auth.php'); api_register_func('api/red/filedata', 'api_file_data', true); api_register_func('api/z/1.0/filedata', 'api_file_data', true); + function api_file_export($type) { + if (api_user()===false) return false; + if(! $_REQUEST['file_id']) return false; + + $ret = attach_export_data(api_user(),$_REQUEST['file_id']); + if($ret) { + json_return_and_die($ret); + } + killme(); + } + api_register_func('api/red/file/export', 'api_file_export', true); + api_register_func('api/z/1.0/file/export', 'api_file_export', true); function api_file_detail($type) { if (api_user()===false) return false; @@ -624,6 +633,10 @@ require_once('include/api_auth.php'); killme(); } + + + + api_register_func('api/red/file', 'api_file_detail', true); api_register_func('api/z/1.0/file', 'api_file_detail', true); |