Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
CRAP | |
0.00% |
0 / 95 |
UserController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
420 | |
0.00% |
0 / 95 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
getPermissions | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 14 |
|||
getUser | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 24 |
|||
register | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 13 |
|||
updateUser | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 13 |
|||
affectUserToEntities | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
unactiveUser | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
activeUser | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
index | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 16 |
1 | <?php |
2 | |
3 | namespace Qmp\Laravel\ApiGateway\Controllers\Auth; |
4 | |
5 | use App\User; |
6 | use Illuminate\Http\Request; |
7 | use Illuminate\Support\Facades\Log; |
8 | use Illuminate\Support\Facades\Validator; |
9 | use Qmp\Laravel\Acls\Exceptions\RolePermissionException; |
10 | use Qmp\Laravel\Acls\Facades\Role; |
11 | use Qmp\Laravel\ApiGateway\Controllers\AbstractApiController; |
12 | use Qmp\Laravel\AuthConnector\Authenticator\AuthUser; |
13 | use Qmp\Laravel\AuthConnector\Authenticator\AuthJwt; |
14 | use Symfony\Component\HttpFoundation\Response; |
15 | use Qmp\Laravel\Acls\Client\Client as AclsClient; |
16 | |
17 | use Qmp\Laravel\MicroService\Client\Client; |
18 | use Qmp\Laravel\MicroService\Client\Tools\Request as ClientRequest; |
19 | |
20 | class UserController extends AbstractApiController |
21 | { |
22 | /** |
23 | * AuthController constructor. |
24 | * @param Request $request |
25 | */ |
26 | public function __construct(Request $request) |
27 | { |
28 | parent::__construct($request); |
29 | } |
30 | |
31 | public function getPermissions(Request $request) { |
32 | Validator::make($request->all(), [ |
33 | 'id' => 'required|integer', |
34 | 'email' => 'required|string|email|max:255' |
35 | ])->validate(); |
36 | |
37 | // Retrieve user by id |
38 | $user = User::find($request->id); |
39 | |
40 | // Check if exist |
41 | if (!$user) { |
42 | // Create if not exist |
43 | $user = new User(); |
44 | $user->id = $request->id; |
45 | $user->email = $request->email; |
46 | $user->entities = []; |
47 | $user->save(); |
48 | } |
49 | |
50 | // check if email correspond to saved profile |
51 | if ($request->email !== $user->email) { |
52 | Log::debug('trying to log with incompatible couple of id/email: ' . var_export(['request' => $request->all(), 'user' => ['id' => $user->id, 'email' => $user->email]], true)); |
53 | return response()->json(['error' => 'trying to log with incompatible couple of id/email'], 403); |
54 | } |
55 | |
56 | // return list of permissions and roles |
57 | return response()->json(AuthJwt::getAllPermissions($user)); |
58 | } |
59 | |
60 | public function getUser(Request $request) { |
61 | Validator::make($request->all(), [ |
62 | 'id' => 'required|integer', |
63 | 'email' => 'required|string|email|max:255' |
64 | ])->validate(); |
65 | |
66 | // Retrieve user by id |
67 | $user = User::find($request->id); |
68 | |
69 | // Check if exist |
70 | if (!$user) { |
71 | // Create if not exist |
72 | $user = new User(); |
73 | $user->id = $request->id; |
74 | $user->email = $request->email; |
75 | $user->entities = []; |
76 | $user->save(); |
77 | } |
78 | |
79 | // check if email correspond to saved profile |
80 | if ($request->email !== $user->email) { |
81 | Log::debug('trying to log with incompatible couple of id/email: ' . var_export(['request' => $request->all(), 'user' => ['id' => $user->id, 'email' => $user->email]], true)); |
82 | return response()->json(['error' => 'trying to log with incompatible couple of id/email'], 403); |
83 | } |
84 | |
85 | |
86 | try { |
87 | AclsClient::role($user->id, ['super_admin']); |
88 | |
89 | $response = $this->getResponseFromService( |
90 | 'service_entities', |
91 | "entity" |
92 | ); |
93 | |
94 | if (is_array($response->content)) { |
95 | Log::debug(var_export([$response->content], true)); |
96 | $user->entities = array_map(function($entity) { |
97 | return $entity['id']; |
98 | }, $response->content); |
99 | } |
100 | } catch(RolePermissionException $e) { |
101 | |
102 | } |
103 | |
104 | // return user |
105 | return response()->json($user); |
106 | } |
107 | |
108 | /** Register new user. |
109 | * |
110 | * @param Request $request |
111 | * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector |
112 | */ |
113 | public function register(Request $request) |
114 | { |
115 | $response = $this->postResponseFromExternal( |
116 | config('auth_service.oauth2.url'), |
117 | 'api/user/register', |
118 | ['body' => $request->all()] |
119 | ); |
120 | |
121 | if (!empty($response->content['user'])) { |
122 | User::create(['id' => $response->content['user']['id'], 'email' => $response->content['user']['email']]); |
123 | $user = User::find($response->content['user']['id']); |
124 | |
125 | $roleEntity = Role::where('name', 'basic')->first(); |
126 | $user->roles()->attach($roleEntity->id); |
127 | } |
128 | |
129 | $user->entities = $request->entities; |
130 | $user->save(); |
131 | $this->affectUserToEntities($user); |
132 | |
133 | return $this->respond($response, Response::HTTP_OK, Response::HTTP_UNPROCESSABLE_ENTITY); |
134 | } |
135 | |
136 | /** Update user. |
137 | * |
138 | * @param $id |
139 | * @param Request $request |
140 | * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector |
141 | */ |
142 | public function updateUser($id, Request $request) |
143 | { |
144 | $response = $this->putResponseFromExternal( |
145 | config('auth_service.oauth2.url'), |
146 | 'api/user/' . $id, |
147 | ['body' => $request->all()] |
148 | ); |
149 | |
150 | $user = User::find($id); |
151 | if (!$user) { |
152 | $user = new User(); |
153 | $user->id = $request->id; |
154 | } |
155 | |
156 | $user->email = $request->email; |
157 | $user->entities = $request->entities; |
158 | $user->save(); |
159 | $this->affectUserToEntities($user); |
160 | |
161 | return $this->respond($response, Response::HTTP_OK, Response::HTTP_UNPROCESSABLE_ENTITY); |
162 | } |
163 | |
164 | protected function affectUserToEntities(User $user) |
165 | { |
166 | $data = [ |
167 | 'user_id' => $user->id, |
168 | 'entity_ids' => $user->entities |
169 | ]; |
170 | $ClientRequest = ClientRequest::createObject('service_entities', 'entity/update-user', ['body' => $data]); |
171 | $response = Client::systemSend('post', $ClientRequest); |
172 | } |
173 | |
174 | /** Unactive user. |
175 | * |
176 | * @param $id |
177 | * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector |
178 | */ |
179 | public function unactiveUser($id) |
180 | { |
181 | $response = $this->putResponseFromExternal( |
182 | config('auth_service.oauth2.url'), |
183 | 'api/user/' . $id . '/unactive' |
184 | ); |
185 | |
186 | return $this->respond($response, Response::HTTP_OK, Response::HTTP_UNPROCESSABLE_ENTITY); |
187 | } |
188 | |
189 | /** Active user. |
190 | * |
191 | * @param $id |
192 | * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector |
193 | */ |
194 | public function activeUser($id) |
195 | { |
196 | $response = $this->putResponseFromExternal( |
197 | config('auth_service.oauth2.url'), |
198 | 'api/user/' . $id . '/active' |
199 | ); |
200 | |
201 | return $this->respond($response, Response::HTTP_OK, Response::HTTP_UNPROCESSABLE_ENTITY); |
202 | } |
203 | |
204 | /** |
205 | * @return \Illuminate\Http\JsonResponse |
206 | */ |
207 | public function index(Request $request) |
208 | { |
209 | $response = $this->getResponseFromExternal( |
210 | config('auth_service.oauth2.url'), |
211 | 'api/user/users', |
212 | [ |
213 | 'query' => $request->all() |
214 | ] |
215 | ); |
216 | |
217 | if (!empty($response->content['data'])) { |
218 | $content = $response->content; |
219 | |
220 | foreach ($content['data'] as $key => $user) { |
221 | $localUser = User::find($user['id']); |
222 | if (!$localUser) { |
223 | User::create(['id' => $user['id'], 'email' => $user['email']]); |
224 | $localUser = User::find($user['id']); |
225 | |
226 | $roleEntity = Role::where('name', 'basic')->first(); |
227 | $localUser->roles()->attach($roleEntity->id); |
228 | } |
229 | $content['data'][$key]['entities'] = $localUser->entities; |
230 | } |
231 | $response->content = $content; |
232 | } |
233 | |
234 | return $this->respond($response, Response::HTTP_OK, Response::HTTP_UNPROCESSABLE_ENTITY); |
235 | } |
236 | |
237 | } |