aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzotlabs <mike@macgirvin.com>2016-10-09 20:49:40 -0700
committerzotlabs <mike@macgirvin.com>2016-10-09 20:49:40 -0700
commit02c72e59faef6d6305bf43d7df34af70de73c02a (patch)
treef747a2b28ba6ea70311483f4b3d94167b9c78d16
parente7233c0c94d0464994df94d8907518d49fcb0650 (diff)
downloadvolse-hubzilla-02c72e59faef6d6305bf43d7df34af70de73c02a.tar.gz
volse-hubzilla-02c72e59faef6d6305bf43d7df34af70de73c02a.tar.bz2
volse-hubzilla-02c72e59faef6d6305bf43d7df34af70de73c02a.zip
provide a DAV module which accesses the raw data storage for a channel. Together with an export data function in the API this allows a client process to create true backups of the cloud storage and importable cloud mirrors with all the metadata intact. The import function will need to be modified slightly to obtain the file contents from a plugin or API call; since it currently tries to fetch it from the source hub.
-rw-r--r--Zotlabs/Module/Snap.php93
-rw-r--r--include/api.php19
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);