Fixed faulty baseUrl rewrites

Fixes #1452
May help #1377
This commit is contained in:
Dan Brown 2019-05-19 16:25:05 +01:00
parent 5470a9e035
commit 8ae35f645a
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
3 changed files with 31 additions and 4 deletions

View File

@ -123,10 +123,11 @@ function baseUrl($path, $forceAppDomain = false)
// 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 (!empty($base) && strpos($path, $base) === 0) { if (!empty($base) && strpos($path, $base) === 0) {
$path = trim(substr($path, strlen($base) - 1)); $path = substr($path, strlen($base));
} else {
$explodedPath = explode('/', $path);
$path = implode('/', array_splice($explodedPath, 3));
} }
$explodedPath = explode('/', $path);
$path = implode('/', array_splice($explodedPath, 3));
} }
// Return normal url path if not specified in config // Return normal url path if not specified in config
@ -134,7 +135,7 @@ function baseUrl($path, $forceAppDomain = false)
return url($path); return url($path);
} }
return $base . '/' . $path; return $base . '/' . ltrim($path, '/');
} }
/** /**

View File

@ -1,5 +1,6 @@
<?php namespace Tests; <?php namespace Tests;
use BookStack\Entities\Page;
use BookStack\Notifications\ConfirmEmail; use BookStack\Notifications\ConfirmEmail;
use BookStack\Auth\User; use BookStack\Auth\User;
use BookStack\Settings\SettingService; use BookStack\Settings\SettingService;
@ -334,6 +335,17 @@ class AuthTest extends BrowserKitTest
->seeLink('Sign up'); ->seeLink('Sign up');
} }
public function test_login_redirects_to_initially_requested_url_correctly()
{
config()->set('app.url', 'http://localhost');
$page = Page::query()->first();
$this->visit($page->getUrl())
->seePageUrlIs(baseUrl('/login'));
$this->login('admin@admin.com', 'password')
->seePageUrlIs($page->getUrl());
}
/** /**
* Perform a login * Perform a login
* @param string $email * @param string $email

View File

@ -16,4 +16,18 @@ class HelpersTest extends TestCase
$result = baseUrl('http://example.com/bookstack/', true); $result = baseUrl('http://example.com/bookstack/', true);
$this->assertEquals('http://example.com/bookstack/', $result); $this->assertEquals('http://example.com/bookstack/', $result);
} }
public function test_base_url_force_domain_works_as_expected_with_full_url_given()
{
config()->set('app.url', 'http://example.com');
$result = baseUrl('http://examps.com/books/test/page/cat', true);
$this->assertEquals('http://example.com/books/test/page/cat', $result);
}
public function test_base_url_force_domain_works_when_app_domain_is_same_as_given_url()
{
config()->set('app.url', 'http://example.com');
$result = baseUrl('http://example.com/books/test/page/cat', true);
$this->assertEquals('http://example.com/books/test/page/cat', $result);
}
} }