Skip to content

Commit

Permalink
MDL-36674 Administration: out_as_local_url will check for both http a…
Browse files Browse the repository at this point in the history
…nd https url's

out_as_local_url will first check if url passed in wwwroot, if it's not then it will check
if loginhttps is enabled and url is httpswwwroot
  • Loading branch information
Rajesh Taneja committed Jan 14, 2013
1 parent 3e90b10 commit 8cb601a
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 4 deletions.
40 changes: 40 additions & 0 deletions lib/tests/weblib_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,23 @@ function test_compare_url() {
}

function test_out_as_local_url() {
global $CFG;
// Test http url.
$url1 = new moodle_url('/lib/tests/weblib_test.php');
$this->assertEquals('/lib/tests/weblib_test.php', $url1->out_as_local_url());

// Test https url.
$httpswwwroot = str_replace("http://", "https://", $CFG->wwwroot);
$url2 = new moodle_url($httpswwwroot.'/login/profile.php');
$this->assertEquals('/login/profile.php', $url2->out_as_local_url());

// Test http url matching wwwroot.
$url3 = new moodle_url($CFG->wwwroot);
$this->assertEquals('', $url3->out_as_local_url());

// Test http url matching wwwroot ending with slash (/).
$url3 = new moodle_url($CFG->wwwroot.'/');
$this->assertEquals('/', $url3->out_as_local_url());
}

/**
Expand All @@ -192,6 +207,31 @@ function test_out_as_local_url_error() {
$url2->out_as_local_url();
}

/**
* You should get error with modified url
*
* @expectedException coding_exception
* @return void
*/
public function test_modified_url_out_as_local_url_error() {
global $CFG;

$modifiedurl = $CFG->wwwroot.'1';
$url3 = new moodle_url($modifiedurl.'/login/profile.php');
$url3->out_as_local_url();
}

/**
* Try get local url from external https url and you should get error
*
* @expectedException coding_exception
* @return void
*/
public function test_https_out_as_local_url_error() {
$url4 = new moodle_url('https://www.google.com/lib/tests/weblib_test.php');
$url4->out_as_local_url();
}

public function test_clean_text() {
$text = "lala <applet>xx</applet>";
$this->assertEquals($text, clean_text($text, FORMAT_PLAIN));
Expand Down
14 changes: 10 additions & 4 deletions lib/weblib.php
Original file line number Diff line number Diff line change
Expand Up @@ -747,12 +747,18 @@ public function out_as_local_url($escaped = true, array $overrideparams = null)
global $CFG;

$url = $this->out($escaped, $overrideparams);

if (strpos($url, $CFG->wwwroot) !== 0) {
$httpswwwroot = str_replace("http://", "https://", $CFG->wwwroot);

// $url should be equal to wwwroot or httpswwwroot. If not then throw exception.
if (($url === $CFG->wwwroot) || (strpos($url, $CFG->wwwroot.'/') === 0)) {
$localurl = substr($url, strlen($CFG->wwwroot));
return !empty($localurl) ? $localurl : '';
} else if (($url === $httpswwwroot) || (strpos($url, $httpswwwroot.'/') === 0)) {
$localurl = substr($url, strlen($httpswwwroot));
return !empty($localurl) ? $localurl : '';
} else {
throw new coding_exception('out_as_local_url called on a non-local URL');
}

return str_replace($CFG->wwwroot, '', $url);
}

/**
Expand Down

0 comments on commit 8cb601a

Please sign in to comment.