- Added setup checks in JavaScript - Moved isWebDAVWorking to JS using SetupChecks - Moved internet connection checks to an ajax call that goes through the servertags/v8.0.0alpha1
@@ -256,6 +256,7 @@ var OC={ | |||
* @param {string} type the type of the file to link to (e.g. css,img,ajax.template) | |||
* @param {string} file the filename | |||
* @return {string} Absolute URL for a file in an app | |||
* @deprecated use OC.generateUrl() instead | |||
*/ | |||
filePath:function(app,type,file){ | |||
var isCore=OC.coreApps.indexOf(app)!==-1, |
@@ -0,0 +1,71 @@ | |||
/* | |||
* Copyright (c) 2014 | |||
* | |||
* This file is licensed under the Affero General Public License version 3 | |||
* or later. | |||
* | |||
* See the COPYING-README file. | |||
* | |||
*/ | |||
(function() { | |||
OC.SetupChecks = { | |||
/** | |||
* Check whether the WebDAV connection works. | |||
* | |||
* @return $.Deferred object resolved with an array of error messages | |||
*/ | |||
checkWebDAV: function() { | |||
var deferred = $.Deferred(); | |||
var afterCall = function(xhr) { | |||
var messages = []; | |||
if (xhr.status !== 207 && xhr.status !== 401) { | |||
messages.push( | |||
t('core', 'Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.') | |||
); | |||
} | |||
deferred.resolve(messages); | |||
}; | |||
$.ajax({ | |||
type: 'PROPFIND', | |||
url: OC.linkToRemoteBase('webdav'), | |||
data: '<?xml version="1.0"?>' + | |||
'<d:propfind xmlns:d="DAV:">' + | |||
'<d:prop><d:resourcetype/></d:prop>' + | |||
'</d:propfind>', | |||
complete: afterCall | |||
}); | |||
return deferred.promise(); | |||
}, | |||
/** | |||
* Runs setup checks on the server side | |||
* | |||
* @return $.Deferred object resolved with an array of error messages | |||
*/ | |||
checkSetup: function() { | |||
var deferred = $.Deferred(); | |||
var afterCall = function(data, statusText, xhr) { | |||
var messages = []; | |||
if (xhr.status === 200 && data) { | |||
if (!data.serverhasinternetconnection) { | |||
messages.push( | |||
t('core', 'This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.') | |||
); | |||
} | |||
} else { | |||
messages.push(t('core', 'Error occurred while checking server setup')); | |||
} | |||
deferred.resolve(messages); | |||
}; | |||
$.ajax({ | |||
type: 'GET', | |||
url: OC.generateUrl('settings/ajax/checksetup') | |||
}).then(afterCall, afterCall); | |||
return deferred.promise(); | |||
} | |||
}; | |||
})(); | |||
@@ -1027,53 +1027,6 @@ class OC_Util { | |||
return $content !== $testContent; | |||
} | |||
/** | |||
* test if webDAV is working properly | |||
* | |||
* @return bool | |||
* @description | |||
* 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 PROPFIND 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 true; | |||
} | |||
if (!\OC_Config::getValue("check_for_working_webdav", true)) { | |||
return true; | |||
} | |||
$settings = array( | |||
'baseUri' => OC_Helper::linkToRemote('webdav'), | |||
); | |||
$client = new \OC_DAVClient($settings); | |||
$client->setRequestTimeout(10); | |||
// for this self test we don't care if the ssl certificate is self signed and the peer cannot be verified. | |||
$client->setVerifyPeer(false); | |||
// also don't care if the host can't be verified | |||
$client->setVerifyHost(0); | |||
$return = true; | |||
try { | |||
// test PROPFIND | |||
$client->propfind('', array('{DAV:}resourcetype')); | |||
} catch (\Sabre\DAV\Exception\NotAuthenticated $e) { | |||
$return = true; | |||
} catch (\Exception $e) { | |||
OC_Log::write('core', 'isWebDAVWorking: NO - Reason: ' . $e->getMessage() . ' (' . get_class($e) . ')', OC_Log::WARN); | |||
$return = false; | |||
} | |||
return $return; | |||
} | |||
/** | |||
* Check if the setlocal call does not work. This can happen if the right | |||
* local packages are not available on the server. |
@@ -9,11 +9,12 @@ OC_Util::checkAdminUser(); | |||
OCP\Util::addStyle('settings', 'settings'); | |||
OCP\Util::addScript('settings', 'settings'); | |||
OC_Util::addScript( "settings", "admin" ); | |||
OC_Util::addScript( "settings", "log" ); | |||
OC_Util::addScript( 'core', 'multiselect' ); | |||
OCP\Util::addScript( "settings", "admin" ); | |||
OCP\Util::addScript( "settings", "log" ); | |||
OCP\Util::addScript( 'core', 'multiselect' ); | |||
OCP\Util::addScript('core', 'select2/select2'); | |||
OCP\Util::addStyle('core', 'select2/select2'); | |||
OCP\Util::addScript('core', 'setupchecks'); | |||
OC_App::setActiveNavigationEntry( "admin" ); | |||
$tmpl = new OC_Template( 'settings', 'admin', 'user'); | |||
@@ -41,11 +42,9 @@ $tmpl->assign('mail_smtppassword', OC_Config::getValue( "mail_smtppassword", '' | |||
$tmpl->assign('entries', $entries); | |||
$tmpl->assign('entriesremain', $entriesremain); | |||
$tmpl->assign('htaccessworking', $htaccessworking); | |||
$tmpl->assign('internetconnectionworking', OC_Util::isInternetConnectionEnabled() ? OC_Util::isInternetConnectionWorking() : 'disabled'); | |||
$tmpl->assign('isLocaleWorking', OC_Util::isSetLocaleWorking()); | |||
$tmpl->assign('isPhpCharSetUtf8', OC_Util::isPhpCharSetUtf8()); | |||
$tmpl->assign('isAnnotationsWorking', OC_Util::isAnnotationsWorking()); | |||
$tmpl->assign('isWebDavWorking', OC_Util::isWebDAVWorking()); | |||
$tmpl->assign('has_fileinfo', OC_Util::fileInfoLoaded()); | |||
$tmpl->assign('old_php', OC_Util::isPHPoutdated()); | |||
$tmpl->assign('backgroundjobs_mode', OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax')); |
@@ -0,0 +1,23 @@ | |||
<?php | |||
/** | |||
* Copyright (c) 2014, Vincent Petry <pvince81@owncloud.com> | |||
* This file is licensed under the Affero General Public License version 3 or later. | |||
* See the COPYING-README file. | |||
*/ | |||
OCP\JSON::checkAdminUser(); | |||
OCP\JSON::callCheck(); | |||
\OC::$server->getSession()->close(); | |||
// no warning when has_internet_connection is false in the config | |||
$hasInternet = true; | |||
if (OC_Util::isInternetConnectionEnabled()) { | |||
$hasInternet = OC_Util::isInternetConnectionWorking(); | |||
} | |||
OCP\JSON::success( | |||
array( | |||
'serverhasinternetconnection' => $hasInternet | |||
) | |||
); |
@@ -165,7 +165,7 @@ table.grid td.date{ | |||
} | |||
/* ADMIN */ | |||
span.securitywarning, span.connectionwarning { | |||
span.securitywarning, span.connectionwarning, .setupwarning { | |||
color:#C33; | |||
font-weight:bold; | |||
} | |||
@@ -256,3 +256,15 @@ doesnotexist:-o-prefocus, .strengthify-wrapper { | |||
border: 0; | |||
overflow: auto; | |||
} | |||
#postsetupchecks .loading { | |||
height: 50px; | |||
} | |||
#postsetupchecks.section .loading { | |||
background-position: left center; | |||
} | |||
#postsetupchecks .hint, #postsetupchecks .setupwarning { | |||
margin-top: 15px; | |||
} |
@@ -122,4 +122,25 @@ $(document).ready(function(){ | |||
$('#shareapiExcludeGroups').change(function() { | |||
$("#selectExcludedGroups").toggleClass('hidden', !this.checked); | |||
}); | |||
// run setup checks then gather error messages | |||
$.when( | |||
OC.SetupChecks.checkWebDAV(), | |||
OC.SetupChecks.checkSetup() | |||
).then(function(check1, check2) { | |||
var errors = [].concat(check1, check2); | |||
var $el = $('#postsetupchecks'); | |||
var $errorsEl; | |||
$el.find('.loading').addClass('hidden'); | |||
if (errors.length === 0) { | |||
$el.find('.success').removeClass('hidden'); | |||
} else { | |||
$errorsEl = $el.find('.errors'); | |||
for (var i = 0; i < errors.length; i++ ) { | |||
$errorsEl.append('<div class="setupwarning">' + errors[i] + '</div>'); | |||
} | |||
$errorsEl.removeClass('hidden'); | |||
$el.find('.hint').removeClass('hidden'); | |||
} | |||
}); | |||
}); |
@@ -98,3 +98,5 @@ $this->create('settings_ajax_setsecurity', '/settings/ajax/setsecurity.php') | |||
->actionInclude('settings/ajax/setsecurity.php'); | |||
$this->create('settings_ajax_excludegroups', '/settings/ajax/excludegroups.php') | |||
->actionInclude('settings/ajax/excludegroups.php'); | |||
$this->create('settings_ajax_checksetup', '/settings/ajax/checksetup') | |||
->actionInclude('settings/ajax/checksetup.php'); |
@@ -72,21 +72,6 @@ if (!$_['htaccessworking']) { | |||
<?php | |||
} | |||
// is WebDAV working ? | |||
if (!$_['isWebDavWorking']) { | |||
?> | |||
<div class="section"> | |||
<h2><?php p($l->t('Setup Warning'));?></h2> | |||
<span class="securitywarning"> | |||
<?php p($l->t('Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken.')); ?> | |||
<?php print_unescaped($l->t('Please double check the <a href="%s">installation guides</a>.', link_to_docs('admin-install'))); ?> | |||
</span> | |||
</div> | |||
<?php | |||
} | |||
// Are doc blocks accessible? | |||
if (!$_['isAnnotationsWorking']) { | |||
?> | |||
@@ -183,20 +168,6 @@ if (!$_['isLocaleWorking']) { | |||
<?php | |||
} | |||
// is internet connection working ? | |||
if ($_['internetconnectionworking'] === false) { | |||
?> | |||
<div class="section"> | |||
<h2><?php p($l->t('Internet connection not working'));?></h2> | |||
<span class="connectionwarning"> | |||
<?php p($l->t('This server has no working internet connection. This means that some of the features like mounting of external storage, notifications about updates or installation of 3rd party apps don´t work. Accessing files from remote and sending of notification emails might also not work. We suggest to enable internet connection for this server if you want to have all features.')); ?> | |||
</span> | |||
</div> | |||
<?php | |||
} | |||
if ($_['suggestedOverwriteWebroot']) { | |||
?> | |||
<div class="section"> | |||
@@ -210,7 +181,17 @@ if ($_['suggestedOverwriteWebroot']) { | |||
<?php | |||
} | |||
?> | |||
<div id="postsetupchecks" class="section"> | |||
<h2><?php p($l->t('Connectivity checks'));?></h2> | |||
<div class="loading"></div> | |||
<div class="success hidden"><?php p($l->t('No problems found'));?></div> | |||
<div class="errors hidden"></div> | |||
<div class="hint hidden"> | |||
<span class="setupwarning"><?php | |||
print_unescaped($l->t('Please double check the <a href=\'%s\'>installation guides</a>.', \OC_Helper::linkToDocs('admin-install'))); | |||
?></span> | |||
</div> | |||
</div> | |||
<?php foreach ($_['forms'] as $form) { | |||
print_unescaped($form); | |||
} |