xref: /webtrees/app/Http/Middleware/NoRouteFound.php (revision 379e735bf03b2ef02d2bf328828aaefcfc3d572a)
1<?php
2/**
3 * webtrees: online genealogy
4 * Copyright (C) 2019 webtrees development team
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16declare(strict_types=1);
17
18namespace Fisharebest\Webtrees\Http\Middleware;
19
20use Fisharebest\Webtrees\Auth;
21use Fisharebest\Webtrees\Http\ViewResponseTrait;
22use Fisharebest\Webtrees\Tree;
23use Psr\Http\Message\ResponseInterface;
24use Psr\Http\Message\ServerRequestInterface;
25use Psr\Http\Server\MiddlewareInterface;
26use Psr\Http\Server\RequestHandlerInterface;
27use function redirect;
28use function route;
29
30/**
31 * Middleware to generate a response when no route was matched.
32 */
33class NoRouteFound implements MiddlewareInterface
34{
35    use ViewResponseTrait;
36
37    /**
38     * @param ServerRequestInterface  $request
39     * @param RequestHandlerInterface $handler
40     *
41     * @return ResponseInterface
42     */
43    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
44    {
45        /** @var Tree|null $tree */
46        $tree = app(Tree::class);
47
48        // The tree exists, we have access to it, and it is fully imported.
49        if ($tree instanceof Tree && $tree->getPreference('imported') === '1') {
50            return redirect(route('tree-page', ['ged' => $tree->name()]));
51        }
52
53        // Not logged in?
54        if (!Auth::check()) {
55            return redirect(route('login', ['url' => $request->getAttribute('request_uri')]));
56        }
57
58        // No tree or tree not imported?
59        if (Auth::isAdmin()) {
60            return redirect(route('admin-trees'));
61        }
62
63        return $this->viewResponse('errors/no-tree-access', ['title' => '']);
64    }
65}
66