summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/routes.php4
-rw-r--r--core/setup.php2
-rw-r--r--lib/base.php1
-rw-r--r--lib/setup.php20
-rwxr-xr-xlib/util.php34
-rwxr-xr-xsettings/admin.php1
-rw-r--r--settings/templates/admin.php16
7 files changed, 77 insertions, 1 deletions
diff --git a/core/routes.php b/core/routes.php
index 7408858b107..2527816b662 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -6,6 +6,10 @@
* See the COPYING-README file.
*/
+// Post installation check
+$this->create('post_setup_check', '/post-setup-check')
+ ->action('OC_Setup', 'postSetupCheck');
+
// Core ajax actions
// Search
$this->create('search_ajax_search', '/search/ajax/search.php')
diff --git a/core/setup.php b/core/setup.php
index 66b8cf378bd..f16385466cb 100644
--- a/core/setup.php
+++ b/core/setup.php
@@ -43,7 +43,7 @@ if(isset($_POST['install']) AND $_POST['install']=='true') {
OC_Template::printGuestPage("", "installation", $options);
}
else {
- header("Location: ".OC::$WEBROOT.'/');
+ header( 'Location: '.OC_Helper::linkToRoute( 'post_setup_check' ));
exit();
}
}
diff --git a/lib/base.php b/lib/base.php
index 5bfdb0b7c0a..84e9b0c2eeb 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -548,6 +548,7 @@ class OC {
require_once 'core/setup.php';
exit();
}
+
$request = OC_Request::getPathInfo();
if(substr($request, -3) !== '.js'){// we need these files during the upgrade
self::checkMaintenanceMode();
diff --git a/lib/setup.php b/lib/setup.php
index 4dd190b99fb..f342142c957 100644
--- a/lib/setup.php
+++ b/lib/setup.php
@@ -610,4 +610,24 @@ class OC_Setup {
file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/.htaccess', $content);
file_put_contents(OC_Config::getValue('datadirectory', OC::$SERVERROOT.'/data').'/index.html', '');
}
+
+ /**
+ * @brief Post installation checks
+ */
+ public static function postSetupCheck($params) {
+ // setup was successful -> webdav testing now
+ if (OC_Util::isWebDAVWorking()) {
+ header("Location: ".OC::$WEBROOT.'/');
+ } 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();
+ }
+ }
}
diff --git a/lib/util.php b/lib/util.php
index 9ce974619bc..49d914e5fbd 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -516,6 +516,40 @@ 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() {
+ if (!function_exists('curl_init')) {
+ return;
+ }
+
+ $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.
diff --git a/settings/admin.php b/settings/admin.php
index 7cca7165153..c7848803095 100755
--- a/settings/admin.php
+++ b/settings/admin.php
@@ -31,6 +31,7 @@ $tmpl->assign('entriesremain', $entriesremain);
$tmpl->assign('htaccessworking', $htaccessworking);
$tmpl->assign('internetconnectionworking', OC_Util::isinternetconnectionworking());
$tmpl->assign('islocaleworking', OC_Util::issetlocaleworking());
+$tmpl->assign('isWebDavWorking', OC_Util::isWebDAVWorking());
$tmpl->assign('has_fileinfo', OC_Util::fileInfoLoaded());
$tmpl->assign('backgroundjobs_mode', OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax'));
$tmpl->assign('shareAPIEnabled', OC_Appconfig::getValue('core', 'shareapi_enabled', 'yes'));
diff --git a/settings/templates/admin.php b/settings/templates/admin.php
index 9a9a691dcbf..fac8a689883 100644
--- a/settings/templates/admin.php
+++ b/settings/templates/admin.php
@@ -22,6 +22,21 @@ if (!$_['htaccessworking']) {
<?php
}
+// is WebDAV working ?
+if (!$_['isWebDavWorking']) {
+ ?>
+<fieldset class="personalblock">
+ <legend><strong><?php echo $l->t('Setup Warning');?></strong></legend>
+
+ <span class="securitywarning">
+ <?php echo $l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.'); ?>
+ <?php echo $l->t('Please double check the <a href=\'%s\'>installation guides</a>.', 'http://doc.owncloud.org/server/5.0/admin_manual/installation.html'); ?>
+ </span>
+
+</fieldset>
+<?php
+}
+
// if module fileinfo available?
if (!$_['has_fileinfo']) {
?>
@@ -36,6 +51,7 @@ if (!$_['has_fileinfo']) {
<?php
}
+// is locale working ?
if (!$_['islocaleworking']) {
?>
<fieldset class="personalblock">