mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-20 03:16:18 +00:00
Added control-upon-access of the default favicon.ico file
This commit is contained in:
parent
da42fc7457
commit
f333db8e4f
3 changed files with 34 additions and 10 deletions
|
@ -136,7 +136,7 @@ class HomeController extends Controller
|
||||||
*/
|
*/
|
||||||
public function favicon(FaviconHandler $favicons)
|
public function favicon(FaviconHandler $favicons)
|
||||||
{
|
{
|
||||||
$favicons->restoreOriginalIfNotExists();
|
$exists = $favicons->restoreOriginalIfNotExists();
|
||||||
return response()->file($favicons->getPath());
|
return response()->file($exists ? $favicons->getPath() : $favicons->getOriginalPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,25 +35,29 @@ class FaviconHandler
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restore the original favicon image.
|
* Restore the original favicon image.
|
||||||
|
* Returned boolean indicates if the copy occurred.
|
||||||
*/
|
*/
|
||||||
public function restoreOriginal(): void
|
public function restoreOriginal(): bool
|
||||||
{
|
{
|
||||||
$original = public_path('icon.ico');
|
$permissionItem = file_exists($this->path) ? $this->path : dirname($this->path);
|
||||||
if (!is_writeable($this->path)) {
|
if (!is_writeable($permissionItem)) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
copy($original, $this->path);
|
return copy($this->getOriginalPath(), $this->path);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restore the original favicon image if no favicon image is already in use.
|
* Restore the original favicon image if no favicon image is already in use.
|
||||||
|
* Returns a boolean to indicate if the file exists.
|
||||||
*/
|
*/
|
||||||
public function restoreOriginalIfNotExists(): void
|
public function restoreOriginalIfNotExists(): bool
|
||||||
{
|
{
|
||||||
if (!file_exists($this->path)) {
|
if (file_exists($this->path)) {
|
||||||
$this->restoreOriginal();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $this->restoreOriginal();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -64,6 +68,14 @@ class FaviconHandler
|
||||||
return $this->path;
|
return $this->path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the path of the original favicon copy.
|
||||||
|
*/
|
||||||
|
public function getOriginalPath(): string
|
||||||
|
{
|
||||||
|
return public_path('icon.ico');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert PNG image data to ICO file format.
|
* Convert PNG image data to ICO file format.
|
||||||
* Built following the file format info from Wikipedia:
|
* Built following the file format info from Wikipedia:
|
||||||
|
|
|
@ -155,6 +155,18 @@ class PublicActionTest extends TestCase
|
||||||
$this->get('/robots.txt')->assertSee("User-agent: *\nDisallow: /");
|
$this->get('/robots.txt')->assertSee("User-agent: *\nDisallow: /");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_default_favicon_file_created_upon_access()
|
||||||
|
{
|
||||||
|
$faviconPath = public_path('favicon.ico');
|
||||||
|
if (file_exists($faviconPath)) {
|
||||||
|
unlink($faviconPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertFileDoesNotExist($faviconPath);
|
||||||
|
$this->get('/favicon.ico');
|
||||||
|
$this->assertFileExists($faviconPath);
|
||||||
|
}
|
||||||
|
|
||||||
public function test_public_view_then_login_redirects_to_previous_content()
|
public function test_public_view_then_login_redirects_to_previous_content()
|
||||||
{
|
{
|
||||||
$this->setSettings(['app-public' => 'true']);
|
$this->setSettings(['app-public' => 'true']);
|
||||||
|
|
Loading…
Add table
Reference in a new issue