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
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, '/');
}
/**

View File

@ -1,5 +1,6 @@
<?php namespace Tests;
use BookStack\Entities\Page;
use BookStack\Notifications\ConfirmEmail;
use BookStack\Auth\User;
use BookStack\Settings\SettingService;
@ -334,6 +335,17 @@ class AuthTest extends BrowserKitTest
->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

View File

@ -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);
}
}