Router::getRoutes()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
namespace Bone\Router;
4
5
use Bone\Contracts\Container\ContainerInterface;
6
use Bone\Http\Middleware\JsonParse;
7
use Bone\Http\RouterInterface;
8
use Bone\OAuth2\Http\Middleware\ResourceServerMiddleware;
0 ignored issues
show
Bug introduced by
The type Bone\OAuth2\Http\Middlew...esourceServerMiddleware was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
9
use Laminas\Diactoros\ResponseFactory;
10
use League\Route\Route;
11
use League\Route\RouteGroup;
12
use League\Route\Router as LeagueRouter;
13
use League\Route\Strategy\JsonStrategy;
14
use Psr\Http\Message\ResponseInterface;
15
use Psr\Http\Message\ServerRequestInterface;
16
use Psr\Http\Server\RequestHandlerInterface;
17
18
class Router extends LeagueRouter implements RequestHandlerInterface, RouterInterface
19
{
20
    /** @return Route[] */
21
    public function getRoutes(): array
22
    {
23
        return $this->routes;
24
    }
25
26
    /** @return RouteGroup[] */
27
    public function getGroups(): array
28
    {
29
        return $this->groups;
30
    }
31
32
    public function apiResource(string $urlSlug, string $controllerClass, ContainerInterface $c): RouteGroup
33
    {
34
        $factory = new ResponseFactory();
35
        $strategy = new JsonStrategy($factory);
36
        $strategy->setContainer($c);
37
        $tokenAuth = $c->get(ResourceServerMiddleware::class);
38
        $group = $this->group('/api', function (RouteGroup $route) use ($controllerClass, $urlSlug) {
39
            $route->map('GET', '/' . $urlSlug, [$controllerClass, 'index']);
40
            $route->map('POST', '/' . $urlSlug, [$controllerClass, 'create']);
41
            $route->map('GET', '/' . $urlSlug . '/{id}', [$controllerClass, 'read']);
42
            $route->map('PATCH', '/' . $urlSlug . '/{id}', [$controllerClass, 'update']);
43
            $route->map('DELETE', '/' . $urlSlug . '/{id}', [$controllerClass, 'delete']);
44
        });
45
        $group->setStrategy($strategy);
46
        $group->middlewares([$tokenAuth, new JsonParse()]);
47
48
        return $group;
49
    }
50
51
    public function adminResource(string $urlSlug, string $controllerClass, ContainerInterface $c, string $role = 'admin'): ?RouteGroup
52
    {
53
        if (!$c->has('Bone\User\Http\Middleware\SessionAuth')) {
54
            error_log('Admin rewsource not added. You must install delboy1978uk/bone-user');
55
56
            return null;
57
        }
58
59
        if (!$c->has('Bone\Passport\Middleware\PassportControlMiddleware')) {
60
            error_log('Admin rewsource not added. You must install delboy1978uk/bone-passport');
61
62
            return null;
63
        }
64
65
        $factory = new ResponseFactory();
66
        $strategy = new JsonStrategy($factory);
67
        $strategy->setContainer($c);
68
        $sessionAuth = $c->get('Bone\User\Http\Middleware\SessionAuth');
69
        $passportAuth = $c->get('Bone\Passport\Middleware\PassportControlMiddleware');
70
        $passportAuth->withOptions($role);
71
        $group = $this->group('/admin', function (RouteGroup $route) use ($controllerClass, $urlSlug) {
72
            $route->map('GET', '/' . $urlSlug, [$controllerClass, 'index']);
73
            $route->map('GET', '/' . $urlSlug . '/create', [$controllerClass, 'create']);
74
            $route->map('GET', '/' . $urlSlug . '/{id}', [$controllerClass, 'view']);
75
            $route->map('GET', '/' . $urlSlug . '/{id}/delete', [$controllerClass, 'delete']);
76
            $route->map('GET', '/' . $urlSlug . '/{id}/edit', [$controllerClass, 'edit']);
77
            $route->map('POST', '/' . $urlSlug . '/create', [$controllerClass, 'create']);
78
            $route->map('POST', '/' . $urlSlug . '/{id}/delete', [$controllerClass, 'delete']);
79
            $route->map('POST', '/' . $urlSlug . '/{id}/edit', [$controllerClass, 'edit']);
80
        });
81
        $group->middlewares([$sessionAuth, $passportAuth]);
82
83
        return $group;
84
    }
85
86
    public function removeRoute(Route $routeToRemove): void
87
    {
88
        foreach ($this->routes as $index => $route) {
89
            if ($route === $routeToRemove) {
90
                unset($this->routes[$index]);
91
            }
92
        }
93
    }
94
95
    public function handle(ServerRequestInterface $request): ResponseInterface
96
    {
97
        return $this->dispatch($request);
98
    }
99
}
100