Added warning to manage outages page if host is not configured (inaccessible wwwroot).

This commit is contained in:
Daniel Thee Roperto
2016-12-16 15:52:57 +11:00
parent 3e17049a65
commit 0ad53cde87
4 changed files with 40 additions and 23 deletions

View File

@@ -25,6 +25,7 @@
namespace auth_outage\local\controllers;
use auth_outage\local\outagelib;
use coding_exception;
use finfo;
use invalid_parameter_exception;
@@ -62,24 +63,18 @@ class maintenance_static_page_io {
}
if (self::is_url($file)) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $file);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
$contents = curl_exec($curl);
$mime = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
curl_close($curl);
$result = outagelib::fetch_page($file);
} else {
$contents = @file_get_contents($file);
$mime = (new finfo(FILEINFO_MIME_TYPE))->buffer($contents); // Not perfect, but try guessing it.
$result = ['contents' => @file_get_contents($file)];
$result['mime'] = (new finfo(FILEINFO_MIME_TYPE))
->buffer($result['contents']); // Not perfect, but try guessing it.
}
if ($contents === false) {
if ($result['contents'] === false) {
debugging('Cannot fetch: '.$file);
$contents = '';
$mime = 'unknown';
$result = ['contents' => '', 'mime' => 'unknown'];
}
return ['contents' => $contents, 'mime' => $mime];
return $result;
}
/** @var bool */

View File

@@ -52,6 +52,18 @@ class outagelib {
*/
private static $injectcalled = false;
public static function fetch_page($file) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $file);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$contents = curl_exec($curl);
$mime = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
curl_close($curl);
return compact('contents', 'mime');
}
/**
* Calls inject even if it was already called before.
*/
@@ -154,9 +166,14 @@ class outagelib {
self::update_maintenance_later($outage);
}
private static function check_wwwroot_accessible() {
global $CFG;
$result = self::fetch_page($CFG->wwwroot);
return (!empty($result['contents']));
}
/**
* Calls Moodle API - set_maintenance_later() to set when the next outage starts.
*
* @param outage|null $outage Outage or null if no scheduled outage.
*/
private static function update_maintenance_later($outage) {
@@ -316,6 +333,10 @@ EOT;
$message[] = get_string('configurationdisabled', 'auth_outage');
}
if (!self::check_wwwroot_accessible()) {
$message[] = get_string('configurationinaccessiblewwwroot', 'auth_outage', ['wwwroot' => $CFG->wwwroot]);
}
if (count($message) == 0) {
return '';
}

View File

@@ -61,6 +61,7 @@ $string['clioutagecreated'] = 'Outage created, id: {$a->id}';
$string['clone'] = 'Clone';
$string['configurationwarning'] = 'The outage plugin is not properly configured, please refer to <a href="https://github.com/catalyst/moodle-auth_outage/blob/master/README.md#installation" target="_blank">README.md</a> for more information.';
$string['configurationdisabled'] = 'The authentication plugin \'Outage\' is disabled. Please enable it in the site administration it and try again.';
$string['configurationinaccessiblewwwroot'] = 'Could not access <b>{$a->wwwroot}</b> from the server, creation of outages may fail.';
$string['datetimeformat'] = '%a %d %h %Y at %I:%M%P %Z';
$string['defaultlayoutcss'] = 'Layout CSS';
$string['defaultlayoutcssdescription'] = 'This CSS code can be used to override the Outage Warning Bar CSS.';

View File

@@ -58,7 +58,7 @@ class forms_test extends auth_outage_base_testcase {
* Mock some data and check values.
*/
public function test_edit_valid() {
if ($this->skip_because_moodle_is_below_30()) {
if ($this->skip_because_moodle_is_below_30('Moodle POST mocking was fixed in Moodle 30.')) {
return;
}
@@ -79,7 +79,7 @@ class forms_test extends auth_outage_base_testcase {
* Check invalid warning duration.
*/
public function test_edit_invalid_warning() {
if ($this->skip_because_moodle_is_below_30()) {
if ($this->skip_because_moodle_is_below_30('Moodle POST mocking was fixed in Moodle 30.')) {
return;
}
@@ -94,7 +94,7 @@ class forms_test extends auth_outage_base_testcase {
* Check invalid outage duration.
*/
public function test_edit_invalid_duration() {
if ($this->skip_because_moodle_is_below_30()) {
if ($this->skip_because_moodle_is_below_30('Moodle POST mocking was fixed in Moodle 30.')) {
return;
}
@@ -108,7 +108,7 @@ class forms_test extends auth_outage_base_testcase {
* Check invalid title (empty).
*/
public function test_edit_invalid_title() {
if ($this->skip_because_moodle_is_below_30()) {
if ($this->skip_because_moodle_is_below_30('Moodle POST mocking was fixed in Moodle 30.')) {
return;
}
@@ -122,7 +122,7 @@ class forms_test extends auth_outage_base_testcase {
* Check invalid title (too long).
*/
public function test_edit_invalid_title_toolong() {
if ($this->skip_because_moodle_is_below_30()) {
if ($this->skip_because_moodle_is_below_30('Moodle POST mocking was fixed in Moodle 30.')) {
return;
}
@@ -138,7 +138,7 @@ class forms_test extends auth_outage_base_testcase {
* Check invalid format for description.
*/
public function test_edit_description_invalid_format() {
if ($this->skip_because_moodle_is_below_30()) {
if ($this->skip_because_moodle_is_below_30('Moodle POST mocking was fixed in Moodle 30.')) {
return;
}
@@ -198,13 +198,13 @@ class forms_test extends auth_outage_base_testcase {
];
}
private function skip_because_moodle_is_below_30() {
private function skip_because_moodle_is_below_30($reason = '') {
global $CFG;
// The bugfix MDL-56250 in only applies to Moodle 30+.
// Before that the form validation test is meaningless (results are cached), so skip it.
if ($CFG->branch < 30) {
$this->markTestSkipped();
$this->markTestSkipped('Some tests can only run in Moodle 30+. '.$reason);
return true;
}