From: Dan Brown Date: Sun, 19 May 2019 15:25:05 +0000 (+0100) Subject: Fixed faulty baseUrl rewrites X-Git-Tag: v0.26.2~1^2~8 X-Git-Url: http://source.bookstackapp.com/bookstack/commitdiff_plain/8ae35f645af8670c02a5732362d84cc4fdb32497 Fixed faulty baseUrl rewrites Fixes #1452 May help #1377 --- diff --git a/app/helpers.php b/app/helpers.php index 65b61c9f0..0fedf2e8d 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -123,10 +123,11 @@ function baseUrl($path, $forceAppDomain = false) // Remove non-specified domain if forced and we have a domain if ($isFullUrl && $forceAppDomain) { 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 @@ -134,7 +135,7 @@ function baseUrl($path, $forceAppDomain = false) return url($path); } - return $base . '/' . $path; + return $base . '/' . ltrim($path, '/'); } /** diff --git a/tests/Auth/AuthTest.php b/tests/Auth/AuthTest.php index c39ef68e5..0399f2b81 100644 --- a/tests/Auth/AuthTest.php +++ b/tests/Auth/AuthTest.php @@ -1,5 +1,6 @@ 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 * @param string $email diff --git a/tests/Unit/HelpersTest.php b/tests/Unit/HelpersTest.php index 30b0085d6..c8f4ce294 100644 --- a/tests/Unit/HelpersTest.php +++ b/tests/Unit/HelpersTest.php @@ -16,4 +16,18 @@ class HelpersTest extends TestCase $result = baseUrl('http://example.com/bookstack/', true); $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); + } } \ No newline at end of file