basic WebDAV test in place now

This commit is contained in:
Thomas Mueller 2013-02-05 23:33:44 +01:00
parent 5221ee0c5a
commit 1adcc5fd23
2 changed files with 53 additions and 0 deletions

View file

@ -546,6 +546,29 @@ class OC {
require_once 'core/setup.php';
exit();
}
// post installation checks
if (!OC_Config::getValue("post-installation-checked", false)) {
// setup was successful -> webdav testing now
$request = OC_Request::getPathInfo();
if(substr($request, -4) !== '.css' and substr($request, -3) !== '.js' and substr($request, -5) !== '.json') {
if (OC_Util::isWebDAVWorking()) {
OC_Config::setValue("post-installation-checked", true);
} else {
$l=OC_L10N::get('lib');
$error = $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.');
$hint = $l->t('Please double check the <a href=\'%s\'>installation guides</a>.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html');
$tmpl = new OC_Template('', 'error', 'guest');
$tmpl->assign('errors', array(1 => array('error' => $error, 'hint' => $hint)), false);
$tmpl->printPage();
exit();
}
}
}
$request = OC_Request::getPathInfo();
if(substr($request, -3) !== '.js'){// we need these files during the upgrade
self::checkMaintenanceMode();

View file

@ -514,6 +514,36 @@ class OC_Util {
}
}
/**
* we test if webDAV is working properly
*
* The basic assumption is that if the server returns 401/Not Authenticated for an unauthenticated PROPFIND
* the web server it self is setup properly.
*
* Why not an authenticated PROFIND and other verbs?
* - We don't have the password available
* - We have no idea about other auth methods implemented (e.g. OAuth with Bearer header)
*
*/
public static function isWebDAVWorking() {
$settings = array(
'baseUri' => OC_Helper::linkToRemote('webdav'),
);
$client = new \Sabre_DAV_Client($settings);
$return = true;
try {
// test PROPFIND
$client->propfind('', array('{DAV:}resourcetype'));
} catch(\Sabre_DAV_Exception_NotAuthenticated $e) {
$return = true;
} catch(\Exception $e) {
$return = false;
}
return $return;
}
/**
* Check if the setlocal call doesn't work. This can happen if the right local packages are not available on the server.