Completed
Push — master ( f8ccd7...a2ea8b )
by Sherif
13:39
created

UsersController::resendEmailConfirmation()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
1
<?php
2
namespace App\Modules\V1\Acl\Http\Controllers;
3
4
use Illuminate\Foundation\Http\FormRequest;
5
use App\Modules\V1\Core\Http\Controllers\BaseApiController;
6
use App\Modules\V1\Acl\Proxy\LoginProxy;
7
use Illuminate\Http\Request;
8
9
class UsersController extends BaseApiController
10
{
11
    /**
12
     * The name of the model that is used by the base api controller 
13
     * to preform actions like (add, edit ... etc).
14
     * @var string
15
     */
16
    protected $model               = 'users';
17
18
    /**
19
     * List of all route actions that the base api controller
20
     * will skip permissions check for them.
21
     * @var array
22
     */
23
    protected $skipPermissionCheck = ['account', 'logout', 'changePassword', 'saveProfile', 'account'];
24
25
    /**
26
     * List of all route actions that the base api controller
27
     * will skip login check for them.
28
     * @var array
29
     */
30
    protected $skipLoginCheck      = ['login', 'loginSocial', 'register', 'sendreset', 'resetpassword', 'refreshtoken', 'confirmEmail', 'resendEmailConfirmation'];
31
32
    /**
33
     * The validations rules used by the base api controller
34
     * to check before add.
35
     * @var array
36
     */
37
    protected $validationRules     = [
38
        'name'     => 'nullable|string', 
39
        'email'    => 'required|email|unique:users,email,{id}', 
40
        'password' => 'nullable|min:6'
41
    ];
42
43
    /**
44
     * The loginProxy implementation.
45
     * 
46
     * @var \App\Modules\V1\Acl\Proxy\LoginProxy
47
     */
48
    protected $loginProxy;
49
50
    public function __construct(LoginProxy $loginProxy)
51
    {        
52
        $this->loginProxy = $loginProxy;
53
        parent::__construct();
54
    }
55
56
    /**
57
     * Return the logged in user account.
58
     * 
59
     * @return \Illuminate\Http\Response
60
     */
61
    public function account()
62
    {
63
        return \Response::json($this->repo->account($this->relations), 200);
64
    }
65
66
    /**
67
     * Block the user.
68
     *
69
     * @param  integer  $id Id of the user.
70
     * @return \Illuminate\Http\Response
71
     */
72
    public function block($id)
73
    {
74
        return \Response::json($this->repo->block($id), 200);
75
    }
76
77
    /**
78
     * Unblock the user.
79
     *
80
     * @param  integer  $id Id of the user.
81
     * @return \Illuminate\Http\Response
82
     */
83
    public function unblock($id)
84
    {
85
        return \Response::json($this->repo->unblock($id), 200);
86
    }
87
88
    /**
89
     * Logout the user.
90
     * 
91
     * @return \Illuminate\Http\Response
92
     */
93
    public function logout()
94
    {
95
        return \Response::json($this->loginProxy->logout(), 200);
96
    }
97
98
    /**
99
     * Handle a registration request.
100
     *
101
     * @param  \Illuminate\Http\Request  $request
102
     * @return \Illuminate\Http\Response
103
     */
104 View Code Duplication
    public function register(Request $request)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
105
    {
106
        $this->validate($request, [
107
            'name'     => 'nullable|string', 
108
            'email'    => 'required|email|unique:users,email,{id}', 
109
            'password' => 'required|min:6'
110
            ]);
111
112
        return \Response::json($this->repo->register($request->only('name', 'email', 'password')), 200);
113
    }
114
115
    /**
116
     * Handle a login request to the application.
117
     *
118
     * @param  \Illuminate\Http\Request  $request
119
     * @return \Illuminate\Http\Response
120
     */
121
    public function login(Request $request)
122
    {
123
        $this->validate($request, [
124
            'email'    => 'required|email', 
125
            'password' => 'required|min:6'
126
            ]);
127
128
        return \Response::json($this->loginProxy->login($request->only('email', 'password')), 200);
129
    }
130
131
    /**
132
     * Handle a social login request of the none admin to the application.
133
     *
134
     * @param  \Illuminate\Http\Request  $request
135
     * @return \Illuminate\Http\Response
136
     */
137
    public function loginSocial(Request $request)
138
    {
139
        $this->validate($request, [
140
            'auth_code'    => 'required_without:access_token',
141
            'access_token' => 'required_without:auth_code',
142
            'type'         => 'required|in:facebook,google'
143
            ]);
144
145
        return \Response::json($this->repo->loginSocial($request->only('auth_code', 'access_token', 'type')), 200);
146
    }
147
148
    /**
149
     * Assign the given groups to the given user.
150
     *
151
     * @param  \Illuminate\Http\Request  $request
152
     * @return \Illuminate\Http\Response
153
     */
154
    public function assigngroups(Request $request)
155
    {
156
        $this->validate($request, [
157
            'group_ids' => 'required|exists:groups,id', 
158
            'user_id'   => 'required|exists:users,id'
159
            ]);
160
161
        return \Response::json($this->repo->assignGroups($request->get('user_id'), $request->get('group_ids')), 200);
162
    }
163
164
    /**
165
     * Send a reset link to the given user.
166
     *
167
     * @param  \Illuminate\Http\Request  $request
168
     * @return \Illuminate\Http\Response
169
     */
170
    public function sendreset(Request $request)
171
    {
172
        $this->validate($request, ['email' => 'required|email']);
173
174
        return \Response::json($this->repo->sendReset($request->only('email')), 200);
175
    }
176
177
    /**
178
     * Reset the given user's password.
179
     *
180
     * @param  \Illuminate\Http\Request  $request
181
     * @return \Illuminate\Http\Response
182
     */
183
    public function resetpassword(Request $request)
184
    {
185
        $this->validate($request, [
186
            'token'                 => 'required',
187
            'email'                 => 'required|email',
188
            'password'              => 'required|confirmed|min:6',
189
            'password_confirmation' => 'required',
190
        ]);
191
192
        return \Response::json($this->repo->resetPassword($request->only('email', 'password', 'password_confirmation', 'token')), 200);
193
    }
194
195
    /**
196
     * Change the logged in user password.
197
     *
198
     * @param  \Illuminate\Http\Request  $request
199
     * @return \Illuminate\Http\Response
200
     */
201 View Code Duplication
    public function changePassword(Request $request)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
202
    {
203
        $this->validate($request, [
204
            'old_password'          => 'required',
205
            'password'              => 'required|confirmed|min:6',
206
            'password_confirmation' => 'required',
207
        ]);
208
209
        return \Response::json($this->repo->changePassword($request->only('old_password', 'password', 'password_confirmation')), 200);
210
    }
211
212
    /**
213
     * Confirm email using the confirmation code.
214
     *
215
     * @param  \Illuminate\Http\Request  $request
216
     * @return \Illuminate\Http\Response
217
     */
218
    public function confirmEmail(Request $request)
219
    {
220
        $this->validate($request, [
221
            'confirmation_code' => 'required|string|exists:users,confirmation_code'
222
        ]);
223
224
        return \Response::json($this->repo->confirmEmail($request->only('confirmation_code')), 200);
225
    }
226
227
    /**
228
     * Resend the email confirmation mail.
229
     *
230
     * @param  \Illuminate\Http\Request  $request
231
     * @return \Illuminate\Http\Response
232
     */
233
    public function resendEmailConfirmation(Request $request)
234
    {
235
        $this->validate($request, [
236
            'email' => 'required|exists:users,email'
237
        ]);
238
239
        return \Response::json($this->repo->sendConfirmationEmail($request->only('email')), 200);
240
    }
241
242
    /**
243
     * Refresh the expired login token.
244
     *
245
     * @param  \Illuminate\Http\Request  $request
246
     * @return \Illuminate\Http\Response
247
     */
248
    public function refreshtoken(Request $request)
249
    {
250
        $this->validate($request, [
251
            'refreshtoken' => 'required',
252
        ]);
253
254
        return \Response::json($this->loginProxy->refreshtoken($request->get('refreshtoken')), 200);
255
    }
256
257
    /**
258
     * Paginate all users with in the given group.
259
     * 
260
     * @param  \Illuminate\Http\Request  $request
261
     * @param  string $groupName The name of the requested group.
262
     * @param  integer $perPage  Number of rows per page default 15.
263
     * @param  string  $sortBy   The name of the column to sort by.
264
     * @param  boolean $desc     Sort ascending or descinding (1: desc, 0: asc).
265
     * @return \Illuminate\Http\Response
266
     */
267
    public function group(Request $request, $groupName, $perPage = false, $sortBy = 'created_at', $desc = 1)
268
    {
269
        return \Response::json($this->repo->group($request->all(), $groupName, $this->relations, $perPage, $sortBy, $desc), 200);
270
    }
271
272
    /**
273
     * Save the given data to the logged in user.
274
     *
275
     * @param  \Illuminate\Http\Request  $request
276
     * @return \Illuminate\Http\Response
277
     */
278 View Code Duplication
    public function saveProfile(Request $request) 
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
279
    {
280
        $this->validate($request, [
281
            'profile_picture' => 'nullable|base64image',
282
            'name'            => 'nullable|string', 
283
            'email'           => 'required|email|unique:users,email,' . \Auth::id()
284
        ]);
285
286
        return \Response::json($this->repo->saveProfile($request->only('name', 'email')), 200);
287
    }
288
}
289