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