Fixed redirect issue when custom app url in use

Fixes #956 & #1048
Also added tests to cover this url logic.
Also removed debugbar during tests to maybe improve test speed.
This commit is contained in:
Dan Brown 2018-11-04 15:18:27 +00:00
parent 7799ba5c79
commit 19b7093438
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
3 changed files with 26 additions and 1 deletions

View File

@ -92,10 +92,15 @@ function baseUrl($path, $forceAppDomain = false)
if ($isFullUrl && !$forceAppDomain) { if ($isFullUrl && !$forceAppDomain) {
return $path; return $path;
} }
$path = trim($path, '/'); $path = trim($path, '/');
$trimBase = rtrim(config('app.url'), '/');
// Remove non-specified domain if forced and we have a domain // Remove non-specified domain if forced and we have a domain
if ($isFullUrl && $forceAppDomain) { if ($isFullUrl && $forceAppDomain) {
if (strpos($path, $trimBase) === 0) {
$path = trim(substr($path, strlen($trimBase) - 1));
}
$explodedPath = explode('/', $path); $explodedPath = explode('/', $path);
$path = implode('/', array_splice($explodedPath, 3)); $path = implode('/', array_splice($explodedPath, 3));
} }
@ -105,7 +110,7 @@ function baseUrl($path, $forceAppDomain = false)
return url($path); return url($path);
} }
return rtrim(config('app.url'), '/') . '/' . $path; return $trimBase . '/' . $path;
} }
/** /**

View File

@ -42,5 +42,6 @@
<env name="GOOGLE_AUTO_REGISTER" value=""/> <env name="GOOGLE_AUTO_REGISTER" value=""/>
<env name="GOOGLE_AUTO_CONFIRM_EMAIL" value=""/> <env name="GOOGLE_AUTO_CONFIRM_EMAIL" value=""/>
<env name="APP_URL" value="http://bookstack.dev"/> <env name="APP_URL" value="http://bookstack.dev"/>
<env name="DEBUGBAR_ENABLED" value="false"/>
</php> </php>
</phpunit> </phpunit>

19
tests/HelpersTest.php Normal file
View File

@ -0,0 +1,19 @@
<?php namespace Tests;
class HelpersTest extends TestCase
{
public function test_base_url_takes_config_into_account()
{
config()->set('app.url', 'http://example.com/bookstack');
$result = baseUrl('/');
$this->assertEquals('http://example.com/bookstack/', $result);
}
public function test_base_url_takes_extra_path_into_account_on_forced_domain()
{
config()->set('app.url', 'http://example.com/bookstack');
$result = baseUrl('http://example.com/bookstack/', true);
$this->assertEquals('http://example.com/bookstack/', $result);
}
}