Extracted many methods to a new "MetaController" in the process.
use BookStack\Entities\Queries\QueryTopFavourites;
use BookStack\Entities\Tools\PageContent;
use BookStack\Http\Controller;
-use BookStack\Uploads\FaviconHandler;
use BookStack\Util\SimpleListOptions;
use Illuminate\Http\Request;
return view('home.default', $commonData);
}
-
- /**
- * Show the view for /robots.txt.
- */
- public function robots()
- {
- $sitePublic = setting('app-public', false);
- $allowRobots = config('app.allow_robots');
-
- if ($allowRobots === null) {
- $allowRobots = $sitePublic;
- }
-
- return response()
- ->view('misc.robots', ['allowRobots' => $allowRobots])
- ->header('Content-Type', 'text/plain');
- }
-
- /**
- * Show the route for 404 responses.
- */
- public function notFound()
- {
- return response()->view('errors.404', [], 404);
- }
-
- /**
- * Serve the application favicon.
- * Ensures a 'favicon.ico' file exists at the web root location (if writable) to be served
- * directly by the webserver in the future.
- */
- public function favicon(FaviconHandler $favicons)
- {
- $exists = $favicons->restoreOriginalIfNotExists();
- return response()->file($exists ? $favicons->getPath() : $favicons->getOriginalPath());
- }
-
- /**
- * Serve a PWA application manifest.
- */
- public function pwaManifest(PwaManifestBuilder $manifestBuilder)
- {
- return response()->json($manifestBuilder->build());
- }
}
--- /dev/null
+<?php
+
+namespace BookStack\App;
+
+use BookStack\Http\Controller;
+use BookStack\Uploads\FaviconHandler;
+
+class MetaController extends Controller
+{
+ /**
+ * Show the view for /robots.txt.
+ */
+ public function robots()
+ {
+ $sitePublic = setting('app-public', false);
+ $allowRobots = config('app.allow_robots');
+
+ if ($allowRobots === null) {
+ $allowRobots = $sitePublic;
+ }
+
+ return response()
+ ->view('misc.robots', ['allowRobots' => $allowRobots])
+ ->header('Content-Type', 'text/plain');
+ }
+
+ /**
+ * Show the route for 404 responses.
+ */
+ public function notFound()
+ {
+ return response()->view('errors.404', [], 404);
+ }
+
+ /**
+ * Serve the application favicon.
+ * Ensures a 'favicon.ico' file exists at the web root location (if writable) to be served
+ * directly by the webserver in the future.
+ */
+ public function favicon(FaviconHandler $favicons)
+ {
+ $exists = $favicons->restoreOriginalIfNotExists();
+ return response()->file($exists ? $favicons->getPath() : $favicons->getOriginalPath());
+ }
+
+ /**
+ * Serve a PWA application manifest.
+ */
+ public function pwaManifest(PwaManifestBuilder $manifestBuilder)
+ {
+ return response()->json($manifestBuilder->build());
+ }
+
+ /**
+ * Show license information for the application.
+ */
+ public function licenses()
+ {
+ $this->setPageTitle('Licenses');
+
+ return view('help.licenses', [
+ 'license' => file_get_contents(base_path('LICENSE')),
+ 'phpLibData' => file_get_contents(base_path('dev/licensing/php-library-licenses.txt')),
+ 'jsLibData' => file_get_contents(base_path('dev/licensing/js-library-licenses.txt')),
+ ]);
+ }
+}
--- /dev/null
+@extends('layouts.simple')
+
+@section('body')
+
+ <div class="container small">
+
+ <div class="my-l"> </div>
+
+ <div class="card content-wrap auto-height">
+ <h1 class="list-heading">Licenses</h1>
+
+ <p>
+ This page details license information for BookStack in addition to the projects & libraries that are used within BookStack.
+ Many projects listed may only be used in a development context.
+ </p>
+
+ <ul>
+ <li><a href="#bookstack-license">BookStack License</a></li>
+ <li><a href="#php-lib-licenses">PHP Library Licenses</a></li>
+ <li><a href="#js-lib-licenses">JavaScript Library Licenses</a></li>
+ <li><a href="#js-lib-licenses">Other Licenses</a></li>
+ </ul>
+ </div>
+
+ <div id="bookstack-license" class="card content-wrap auto-height">
+ <h3 class="list-heading">BookStack License</h3>
+ <div style="white-space: pre-wrap;" class="mb-m">{{ $license }}</div>
+ <p>BookStack® is a UK registered trade mark of Daniel Brown. </p>
+ </div>
+
+ <div id="php-lib-licenses" class="card content-wrap auto-height">
+ <h3 class="list-heading">PHP Library Licenses</h3>
+ <div style="white-space: pre-wrap;">{{ $phpLibData }}</div>
+ </div>
+
+ <div id="js-lib-licenses" class="card content-wrap auto-height">
+ <h3 class="list-heading">JavaScript Library Licenses</h3>
+ <div style="white-space: pre-wrap;">{{ $jsLibData }}</div>
+ </div>
+
+ <div id="other-licenses" class="card content-wrap auto-height">
+ <h3 class="list-heading">Other Licenses</h3>
+ <div style="white-space: pre-line;">BookStack makes heavy use of PHP:
+ License: PHP License, version 3.01
+ License File: https://www.php.net/license/3_01.txt
+ Copyright: Copyright (c) 1999 - 2019 The PHP Group. All rights reserved.
+ Link: https://www.php.net/
+ -----------
+ BookStack uses Icons from Google Material Icons:
+ License: Apache License Version 2.0
+ License File: https://github.com/google/material-design-icons/blob/master/LICENSE
+ Copyright: Copyright 2020 Google LLC
+ Link: https://github.com/google/material-design-icons
+ -----------
+ BookStack is distributed with TinyMCE:
+ License: MIT
+ License File: https://github.com/tinymce/tinymce/blob/release/6.7/LICENSE.TXT
+ Copyright: Copyright (c) 2022 Ephox Corporation DBA Tiny Technologies, Inc.
+ Link: https://github.com/tinymce/tinymce
+ </div>
+ </div>
+ </div>
+
+@endsection
\ No newline at end of file
use BookStack\Api\ApiDocsController;
use BookStack\Api\UserApiTokenController;
use BookStack\App\HomeController;
+use BookStack\App\MetaController;
use BookStack\Entities\Controllers as EntityControllers;
use BookStack\Http\Middleware\VerifyCsrfToken;
use BookStack\Permissions\PermissionsController;
use Illuminate\View\Middleware\ShareErrorsFromSession;
Route::get('/status', [SettingControllers\StatusController::class, 'show']);
-Route::get('/robots.txt', [HomeController::class, 'robots']);
-Route::get('/favicon.ico', [HomeController::class, 'favicon']);
-Route::get('/manifest.json', [HomeController::class, 'pwaManifest']);
+Route::get('/robots.txt', [MetaController::class, 'robots']);
+Route::get('/favicon.ico', [MetaController::class, 'favicon']);
+Route::get('/manifest.json', [MetaController::class, 'pwaManifest']);
+Route::get('/licenses', [MetaController::class, 'licenses']);
// Authenticated routes...
Route::middleware('auth')->group(function () {
// Metadata routes
Route::view('/help/wysiwyg', 'help.wysiwyg');
-Route::fallback([HomeController::class, 'notFound'])->name('fallback');
+Route::fallback([MetaController::class, 'notFound'])->name('fallback');