BoneUserPackage   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 159
Duplicated Lines 0 %

Test Coverage

Coverage 97.09%

Importance

Changes 8
Bugs 0 Features 3
Metric Value
eloc 89
c 8
b 0
f 3
dl 0
loc 159
rs 10
ccs 100
cts 103
cp 0.9709
wmc 12

8 Methods

Rating   Name   Duplication   Size   Complexity  
A addViewExtensions() 0 9 1
A addViews() 0 5 1
A getTranslationsDirectory() 0 3 1
A addRoutes() 0 50 3
A getAssetFolders() 0 4 1
A getFixtures() 0 4 1
A registerConsoleCommands() 0 5 1
A addToContainer() 0 57 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Bone\User;
6
7
use Barnacle\Container;
8
use Barnacle\RegistrationInterface;
9
use Bone\Console\CommandRegistrationInterface;
10
use Bone\Contracts\Container\FixtureProviderInterface;
11
use Bone\Http\Middleware\HalEntity;
12
use Bone\Http\Middleware\JsonParse;
13
use Bone\Http\Middleware\Stack;
14
use Bone\I18n\I18nRegistrationInterface;
15
use Bone\Controller\Init;
16
use Bone\Mail\Service\MailService;
17
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...
18
use Bone\OAuth2\Http\Middleware\ScopeCheck;
0 ignored issues
show
Bug introduced by
The type Bone\OAuth2\Http\Middleware\ScopeCheck 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...
19
use Bone\Paseto\PasetoService;
20
use Bone\Server\SiteConfig;
21
use Bone\User\Controller\BoneUserApiController;
22
use Bone\User\Controller\BoneUserController;
23
use Bone\Router\Router;
24
use Bone\Router\RouterConfigInterface;
25
use Bone\User\Fixtures\LoadUsers;
26
use Bone\User\Http\Controller\Admin\PersonAdminController;
27
use Bone\User\Http\Controller\Api\PersonApiController;
28
use Bone\View\ViewEngine;
29
use Bone\User\Http\Middleware\SessionAuth;
30
use Bone\User\Http\Middleware\SessionAuthRedirect;
31
use Bone\User\View\Helper\LoginWidget;
32
use Bone\View\ViewRegistrationInterface;
33
use Del\Booty\AssetRegistrationInterface;
34
use Del\Console\CreateUserCommand;
35
use Del\Console\ResetPasswordCommand;
36
use Del\Service\UserService;
37
use Del\SessionManager;
38
use Del\UserPackage;
39
use League\Route\RouteGroup;
40
use League\Route\Strategy\JsonStrategy;
41
use Laminas\Diactoros\ResponseFactory;
42
use Laminas\I18n\Translator\Translator;
43
44
class BoneUserPackage implements RegistrationInterface, RouterConfigInterface, I18nRegistrationInterface,
45
                                 AssetRegistrationInterface, ViewRegistrationInterface, CommandRegistrationInterface,
46
                                 FixtureProviderInterface
47
{
48 3
    public function addToContainer(Container $c)
49
    {
50 3
        $c[BoneUserController::class] = $c->factory(function (Container $c) {
51
            /** @var MailService $mailService */
52 1
            $mailService = $c->get(MailService::class);
53
            /** @var UserService $userService */
54 1
            $userService = $c->get(UserService::class);
55 1
            $pasetoService = $c->get(PasetoService::class);
56 1
            $defaultLayout = $c->get('default_layout');
57 1
            $adminLayout = $c->has('admin_layout') ? $c->get('admin_layout') : $defaultLayout;
58 1
            $options = [];
59
60 1
            if ($c->has('bone-user')) {
61 1
                $options = $c->get('bone-user');
62
            }
63
64 1
            $loginRedirectRoute = $options['loginRedirectRoute'] ?? '/user/home';
65 1
            $registrationEnabled = $options['enableRegistration'] ?? true;
66 1
            $profileRequired = $options['requireProfile'] ?? false;
67 1
            $rememberMeCookie = $options['rememberMeCookie'] ?? false;
68 1
            $controller = new BoneUserController($userService, $mailService, $loginRedirectRoute, $adminLayout, $pasetoService, $registrationEnabled, $profileRequired, $rememberMeCookie);
69
70 1
            return  Init::controller($controller, $c);
71 3
        });
72
73 3
        $c[BoneUserApiController::class] = $c->factory(function (Container $c) {
74
            /** @var UserService $userService */
75 1
            $userService = $c->get(UserService::class);
76 1
            $dir = $c->get('uploads_dir');
77 1
            $img = $c->get('image_dir');
78 1
            $tmp = $c->get('temp_dir');
79 1
            $mailService = $c->get(MailService::class);
80
81 1
            return Init::controller(new BoneUserApiController($userService, $dir, $img, $tmp, $mailService), $c);
82 3
        });
83
84
85 3
        $c[SessionAuth::class] = $c->factory(function (Container $c) {
86
            /** @var SessionManager $session */
87 2
            $session = $c->get(SessionManager::class);
88
            /** @var UserService $userService */
89 2
            $userService = $c->get(UserService::class);
90
            /** @var PasetoService $pasetoService */
91 2
            $pasetoService = $c->get(PasetoService::class);
92
93 2
            return new SessionAuth($session, $userService, $pasetoService);
94 3
        });
95
96 3
        $c[SessionAuthRedirect::class] = $c->factory(function (Container $c) {
97
            /** @var SessionManager $session */
98 1
            $session = $c->get(SessionManager::class);
99
            /** @var UserService $userService */
100 1
            $userService = $c->get(UserService::class);
101
            /** @var PasetoService $pasetoService */
102 1
            $pasetoService = $c->get(PasetoService::class);
103
104 1
            return new SessionAuthRedirect($session, $userService, $pasetoService);
105 3
        });
106
    }
107
108 1
    public function getAssetFolders(): array
109
    {
110 1
        return [
111 1
            'bone-user' => dirname(__DIR__) . '/data/assets',
112 1
        ];
113
    }
114
115 1
    public function getTranslationsDirectory(): string
116
    {
117 1
        return dirname(__DIR__) . '/data/translations';
118
    }
119
120 1
    public function addViews(): array
121
    {
122 1
        return [
123 1
            'boneuser' => __DIR__ . '/View/BoneUser/',
124 1
            'email.user' => __DIR__ . '/View/email/',
125 1
        ];
126
    }
127
128 1
    public function addViewExtensions(Container $c): array
129
    {
130 1
        $userService = $c->get(UserService::class);
131 1
        $translator = $c->get(Translator::class);
132 1
        $sessionManager = $c->get(SessionManager::class);
133 1
        $uploadFolder = $c->get('uploads_dir');
134 1
        $loginWidget = new LoginWidget($userService, $translator, $sessionManager, $uploadFolder);
135
136 1
        return [$loginWidget];
137
    }
138
139 1
    public function addRoutes(Container $c, Router $router): Router
140
    {
141 1
        $router->group('/user', function (RouteGroup $route) {
142 1
            $route->map('GET', '/', [BoneUserController::class, 'indexAction']);
143 1
            $route->map('GET', '/lost-password/{email}', [BoneUserController::class, 'forgotPasswordAction']);
144 1
            $route->map('GET', '/login', [BoneUserController::class, 'loginAction']);
145 1
            $route->map('POST', '/login', [BoneUserController::class, 'loginFormAction']);
146 1
            $route->map('GET', '/logout', [BoneUserController::class, 'logoutAction']);
147 1
            $route->map('GET', '/activate/{email}/{token}', [BoneUserController::class, 'activateAction']);
148 1
            $route->map('GET', '/reset-email/{email}/{new-email}/{token}', [BoneUserController::class, 'resetEmailAction']);
149 1
            $route->map('GET', '/reset-password/{email}/{token}', [BoneUserController::class, 'resetPasswordAction']);
150 1
            $route->map('POST', '/reset-password/{email}/{token}', [BoneUserController::class, 'resetPasswordAction']);
151 1
            $route->map('GET', '/resend-activation-mail/{email}', [BoneUserController::class, 'resendActivationEmailAction']);
152 1
        });
153
154 1
        $canRegister = true;
155
156 1
        if ($c->has('bone-user')) {
157 1
            $config = $c->get('bone-user');
158 1
            $canRegister = $config['enableRegistration'] ?? true;
159
        }
160
161 1
        if ($canRegister) {
162 1
            $router->map('GET', '/user/register', [BoneUserController::class, 'registerAction']);
163 1
            $router->map('POST', '/user/register', [BoneUserController::class, 'registerAction']);
164
        }
165
166 1
        $auth = $c->get(SessionAuth::class);
167 1
        $router->map('GET', '/user/change-password', [BoneUserController::class, 'changePasswordAction'])->middleware($auth);
168 1
        $router->map('POST', '/user/change-password', [BoneUserController::class, 'changePasswordAction'])->middleware($auth);
169 1
        $router->map('GET', '/user/change-email', [BoneUserController::class, 'changeEmailAction'])->middleware($auth);
170 1
        $router->map('POST', '/user/change-email', [BoneUserController::class, 'changeEmailAction'])->middleware($auth);
171 1
        $router->map('GET', '/user/edit-profile', [BoneUserController::class, 'editProfileAction'])->middleware($auth);
172 1
        $router->map('POST', '/user/edit-profile', [BoneUserController::class, 'editProfileAction'])->middleware($auth);
173 1
        $router->map('GET', '/user/home', [BoneUserController::class, 'homePageAction'])->middleware($auth);
174 1
        $factory = new ResponseFactory();
175 1
        $strategy = new JsonStrategy($factory);
176 1
        $strategy->setContainer($c);
177
178 1
        $router->group('/api/user', function (RouteGroup $route) use ($auth) {
179 1
            $route->map('POST', '/choose-avatar', [BoneUserApiController::class, 'chooseAvatarAction'])->middleware($auth);
180 1
            $route->map('POST', '/upload-avatar', [BoneUserApiController::class, 'uploadAvatarAction'])->middleware($auth);
181 1
            $route->map('GET', '/avatar', [BoneUserApiController::class, 'avatar'])->middleware($auth);
182 1
        })
183 1
        ->setStrategy($strategy);
184
185 1
        $router->apiResource('people', PersonApiController::class, $c);
186 1
        $router->adminResource('people', PersonAdminController::class, $c);
187
188 1
        return $router;
189
    }
190
191 1
    public function registerConsoleCommands(Container $container): array
192
    {
193 1
        return [
194 1
            new ResetPasswordCommand($container->get(UserService::class)),
195 1
            new CreateUserCommand($container->get(UserService::class)),
196 1
        ];
197
    }
198
199
    public function getFixtures(): array
200
    {
201
        return [
202
            LoadUsers::class
203
        ];
204
    }
205
}
206