Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 95
UserController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 9
420
0.00% covered (danger)
0.00%
0 / 95
 __construct
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 2
 getPermissions
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 14
 getUser
0.00% covered (danger)
0.00%
0 / 1
30
0.00% covered (danger)
0.00%
0 / 24
 register
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 13
 updateUser
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 13
 affectUserToEntities
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 5
 unactiveUser
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 activeUser
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 4
 index
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 16
1<?php
2
3namespace Qmp\Laravel\ApiGateway\Controllers\Auth;
4
5use App\User;
6use Illuminate\Http\Request;
7use Illuminate\Support\Facades\Log;
8use Illuminate\Support\Facades\Validator;
9use Qmp\Laravel\Acls\Exceptions\RolePermissionException;
10use Qmp\Laravel\Acls\Facades\Role;
11use Qmp\Laravel\ApiGateway\Controllers\AbstractApiController;
12use Qmp\Laravel\AuthConnector\Authenticator\AuthUser;
13use Qmp\Laravel\AuthConnector\Authenticator\AuthJwt;
14use Symfony\Component\HttpFoundation\Response;
15use Qmp\Laravel\Acls\Client\Client as AclsClient;
16
17use Qmp\Laravel\MicroService\Client\Client;
18use Qmp\Laravel\MicroService\Client\Tools\Request as ClientRequest;
19
20class 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}