This commit is contained in:
Ralf Becker 2015-07-02 15:44:04 +00:00
parent a639f2a8fb
commit 8480b9bb4e
3 changed files with 361 additions and 14 deletions

View File

@ -22,6 +22,7 @@
"pear-pear.horde.org/Horde_Mapi": ">=1.0.0",
"pear-pear.php.net/XML_Feed_Parser": "*",
"pear-pear.php.net/Log": "*",
"pear-pear.php.net/Text_Diff": "*"
"pear-pear.php.net/Text_Diff": "*",
"sabre/dav": "~2.1.2"
}
}

267
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "21eef0e85f0c15237feb09a236c221f8",
"hash": "1ca4cae9136d32583c7a1d05ccfe706b",
"packages": [
{
"name": "pear-pear.horde.org/Horde_Compress",
@ -157,10 +157,10 @@
},
{
"name": "pear-pear.horde.org/Horde_Idna",
"version": "1.0.1",
"version": "1.0.2",
"dist": {
"type": "file",
"url": "http://pear.horde.org/get/Horde_Idna-1.0.1.tgz",
"url": "http://pear.horde.org/get/Horde_Idna-1.0.2.tgz",
"reference": null,
"shasum": null
},
@ -169,7 +169,7 @@
"php": "<6.0.0.0"
},
"replace": {
"pear-horde/horde_idna": "== 1.0.1.0"
"pear-horde/horde_idna": "== 1.0.2.0"
},
"type": "pear-library",
"autoload": {
@ -180,6 +180,9 @@
"include-path": [
"/"
],
"license": [
"BSD-2-Clause"
],
"description": "Normalized access to various backends providing IDNA (Internationalized Domain Names in Applications) support."
},
{
@ -311,10 +314,10 @@
},
{
"name": "pear-pear.horde.org/Horde_Mime",
"version": "2.8.0",
"version": "2.8.1",
"dist": {
"type": "file",
"url": "http://pear.horde.org/get/Horde_Mime-2.8.0.tgz",
"url": "http://pear.horde.org/get/Horde_Mime-2.8.1.tgz",
"reference": null,
"shasum": null
},
@ -331,7 +334,7 @@
"php": "<6.0.0.0"
},
"replace": {
"pear-horde/horde_mime": "== 2.8.0.0"
"pear-horde/horde_mime": "== 2.8.1.0"
},
"type": "pear-library",
"autoload": {
@ -634,10 +637,10 @@
},
{
"name": "pear-pear.horde.org/Horde_Util",
"version": "2.5.4",
"version": "2.5.5",
"dist": {
"type": "file",
"url": "http://pear.horde.org/get/Horde_Util-2.5.4.tgz",
"url": "http://pear.horde.org/get/Horde_Util-2.5.5.tgz",
"reference": null,
"shasum": null
},
@ -646,7 +649,7 @@
"php": "<6.0.0.0"
},
"replace": {
"pear-horde/horde_util": "== 2.5.4.0"
"pear-horde/horde_util": "== 2.5.5.0"
},
"type": "pear-library",
"autoload": {
@ -664,10 +667,10 @@
},
{
"name": "pear-pear.php.net/Archive_Tar",
"version": "1.3.15",
"version": "1.3.16",
"dist": {
"type": "file",
"url": "http://pear.php.net/get/Archive_Tar-1.3.15.tgz",
"url": "http://pear.php.net/get/Archive_Tar-1.3.16.tgz",
"reference": null,
"shasum": null
},
@ -675,7 +678,7 @@
"php": ">=4.3.0.0"
},
"replace": {
"pear-pear/archive_tar": "== 1.3.15.0"
"pear-pear/archive_tar": "== 1.3.16.0"
},
"type": "pear-library",
"autoload": {
@ -960,6 +963,244 @@
"BSD License"
],
"description": "Selection of methods that are often needed when working with XML documents. Functionality includes creating of attribute lists from arrays, creation of tags, validation of XML names and more."
},
{
"name": "sabre/dav",
"version": "2.1.3",
"source": {
"type": "git",
"url": "https://github.com/fruux/sabre-dav.git",
"reference": "6a8aec204688d36681e0185fbaf1974b97e4a070"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fruux/sabre-dav/zipball/6a8aec204688d36681e0185fbaf1974b97e4a070",
"reference": "6a8aec204688d36681e0185fbaf1974b97e4a070",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-date": "*",
"ext-dom": "*",
"ext-iconv": "*",
"ext-libxml": "*",
"ext-mbstring": "*",
"ext-pcre": "*",
"ext-simplexml": "*",
"ext-spl": "*",
"php": ">=5.4.1",
"sabre/event": "~2.0.0",
"sabre/http": "~3.0.0",
"sabre/vobject": "~3.3"
},
"require-dev": {
"evert/phpdoc-md": "~0.1.0",
"phpunit/phpunit": "~4.2",
"squizlabs/php_codesniffer": "~1.5.3"
},
"suggest": {
"ext-curl": "*",
"ext-pdo": "*"
},
"bin": [
"bin/sabredav",
"bin/naturalselection"
],
"type": "library",
"autoload": {
"psr-4": {
"Sabre\\DAV\\": "lib/DAV/",
"Sabre\\DAVACL\\": "lib/DAVACL/",
"Sabre\\CalDAV\\": "lib/CalDAV/",
"Sabre\\CardDAV\\": "lib/CardDAV/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Evert Pot",
"email": "me@evertpot.com",
"homepage": "http://evertpot.com/",
"role": "Developer"
}
],
"description": "WebDAV Framework for PHP",
"homepage": "http://sabre.io/",
"keywords": [
"CalDAV",
"CardDAV",
"WebDAV",
"framework",
"iCalendar"
],
"time": "2015-02-25 18:13:20"
},
{
"name": "sabre/event",
"version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/fruux/sabre-event.git",
"reference": "f33d60742d7dff63d3722d0f70016704bf32e8db"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fruux/sabre-event/zipball/f33d60742d7dff63d3722d0f70016704bf32e8db",
"reference": "f33d60742d7dff63d3722d0f70016704bf32e8db",
"shasum": ""
},
"require": {
"php": ">=5.4.1"
},
"type": "library",
"autoload": {
"psr-4": {
"Sabre\\Event\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Evert Pot",
"email": "me@evertpot.com",
"homepage": "http://evertpot.com/",
"role": "Developer"
}
],
"description": "sabre/event is a library for lightweight event-based programming",
"homepage": "http://sabre.io/event/",
"keywords": [
"EventEmitter",
"events",
"hooks",
"plugin",
"promise",
"signal"
],
"time": "2014-10-06 23:26:48"
},
{
"name": "sabre/http",
"version": "3.0.4",
"source": {
"type": "git",
"url": "https://github.com/fruux/sabre-http.git",
"reference": "efae5aa7155ba73aa517e33c20aba9c001bb6588"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fruux/sabre-http/zipball/efae5aa7155ba73aa517e33c20aba9c001bb6588",
"reference": "efae5aa7155ba73aa517e33c20aba9c001bb6588",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": ">=5.4",
"sabre/event": ">=1.0.0,<3.0.0"
},
"require-dev": {
"phpunit/phpunit": "*",
"squizlabs/php_codesniffer": "~1.5.3"
},
"suggest": {
"ext-curl": " to make http requests with the Client class"
},
"type": "library",
"autoload": {
"psr-4": {
"Sabre\\HTTP\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Evert Pot",
"email": "me@evertpot.com",
"homepage": "http://evertpot.com/",
"role": "Developer"
}
],
"description": "The sabre/http library provides utilities for dealing with http requests and responses. ",
"homepage": "https://github.com/fruux/sabre-http",
"keywords": [
"http"
],
"time": "2014-12-10 20:14:39"
},
{
"name": "sabre/vobject",
"version": "3.4.2",
"source": {
"type": "git",
"url": "https://github.com/fruux/sabre-vobject.git",
"reference": "0c90f60dae40137f1903c7b5915d3691c4fc99b0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fruux/sabre-vobject/zipball/0c90f60dae40137f1903c7b5915d3691c4fc99b0",
"reference": "0c90f60dae40137f1903c7b5915d3691c4fc99b0",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"php": ">=5.3.1"
},
"require-dev": {
"phpunit/phpunit": "*",
"squizlabs/php_codesniffer": "*"
},
"bin": [
"bin/vobject",
"bin/generate_vcards"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2.x-dev"
}
},
"autoload": {
"psr-4": {
"Sabre\\VObject\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Evert Pot",
"email": "me@evertpot.com",
"homepage": "http://evertpot.com/",
"role": "Developer"
},
{
"name": "Dominik Tobschall",
"email": "dominik@fruux.com",
"homepage": "http://tobschall.de/",
"role": "Developer"
}
],
"description": "The VObject library for PHP allows you to easily parse and manipulate iCalendar and vCard objects",
"homepage": "http://sabre.io/vobject/",
"keywords": [
"VObject",
"iCalendar",
"jCal",
"jCard",
"vCard"
],
"time": "2015-02-25 17:47:50"
}
],
"packages-dev": [],

105
sabredav.php Normal file
View File

@ -0,0 +1,105 @@
<?php
/**
* FileManger - WebDAV access
*
* For Apache FCGI you need the following rewrite rule:
*
* RewriteEngine on
* RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
*
* Otherwise authentication request will be send over and over again, as password is NOT available to PHP!
*
* Using Sabre/Dav package (which need to be installed!)
*
* @link http://www.egroupware.org
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package api
* @subpackage vfs
* @author Ralf Becker <rb@stylite.de>
* @copyright (c) 2006-15 by Ralf Becker <rb@stylite.de>
* @version $Id$
*/
$starttime = microtime(true);
/**
* check if the given user has access
*
* Create a session or if the user has no account return authenticate header and 401 Unauthorized
*
* @param array &$account
* @return int session-id
*/
function check_access(&$account)
{
if (isset($_GET['auth']))
{
list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) = explode(':',base64_decode($_GET['auth']),2);
}
return egw_digest_auth::autocreate_session_callback($account);
}
$GLOBALS['egw_info'] = array(
'flags' => array(
'disable_Template_class' => True,
'noheader' => True,
'currentapp' => preg_match('#/(sabre|web)dav.php/apps/([A-Za-z0-9_-]+)/#', $_SERVER['REQUEST_URI'], $matches) ? $matches[1] : 'filemanager',
'autocreate_session_callback' => 'check_access',
'no_exception_handler' => 'basic_auth', // we use a basic auth exception handler (sends exception message as basic auth realm)
'auth_realm' => 'EGroupware WebDAV server', // cant use vfs_webdav_server::REALM as autoloading and include path not yet setup!
)
);
require_once('phpgwapi/inc/class.egw_digest_auth.inc.php');
// if you move this file somewhere else, you need to adapt the path to the header!
try
{
include(dirname(__FILE__).'/header.inc.php');
}
catch (egw_exception_no_permission_app $e)
{
if (isset($GLOBALS['egw_info']['user']['apps']['filemanager']))
{
$GLOBALS['egw_info']['currentapp'] = 'filemanager';
}
elseif (isset($GLOBALS['egw_info']['user']['apps']['sitemgr-link']))
{
$GLOBALS['egw_info']['currentapp'] = 'sitemgr-link';
}
else
{
throw $e;
}
}
//$headertime = microtime(true);
// webdav is stateless: we dont need to keep the session open, it only blocks other calls to same basic-auth session
$GLOBALS['egw']->session->commit_session();
use EGroupware\Api\Vfs;
use Sabre\DAV;
// Now we're creating a whole bunch of objects
$rootDirectory = new Vfs\Dav\Directory('/');
// The server object is responsible for making sense out of the WebDAV protocol
$server = new DAV\Server($rootDirectory);
// If your server is not on your webroot, make sure the following line has the
// correct information
$server->setBaseUri($_SERVER['SCRIPT_NAME']);
// The lock manager is reponsible for making sure users don't overwrite
// each others changes.
/*$lockBackend = new DAV\Locks\Backend\File('data/locks');
$lockPlugin = new DAV\Locks\Plugin($lockBackend);
$server->addPlugin($lockPlugin);*/
// This ensures that we get a pretty index in the browser, but it is
// optional.
$server->addPlugin(new DAV\Browser\Plugin());
// All we need to do now, is to fire up the server
$server->exec();
//error_log(sprintf('WebDAV %s request: status "%s", took %5.3f s'.($headertime?' (header include took %5.3f s)':''),$_SERVER['REQUEST_METHOD'].' '.$_SERVER['PATH_INFO'],$webdav_server->_http_status,microtime(true)-$starttime,$headertime-$starttime));