-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathUsersController.php
More file actions
81 lines (71 loc) · 2.26 KB
/
UsersController.php
File metadata and controls
81 lines (71 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
namespace App\Controllers;
use App\Enums\RolesEnum;
use App\Models\User;
use Core\Http\Controllers\Controller;
use Core\Http\Request;
use Firebase\JWT\JWT;
use Lib\Authentication\Auth;
use function array_map;
use function getenv;
use function hash;
use function json_encode;
use function password_hash;
class UsersController extends Controller
{
public function register(Request $request): void
{
$params = $request->getBody();
$params['role_id'] = RolesEnum::PROFESSOR->value;
$user = new User($params);
if ($user->isValid()) {
if ($user->save()) {
echo json_encode(['success' => 'Usuário criado com sucesso']);
} else {
echo json_encode(['error' => $user->getErrors()]);
}
} else {
echo json_encode(['error' => $user->getErrors()]);
}
}
public function login(Request $request): void
{
$params = $request->getBody();
$user = User::findByUniversityRegistry($params['university_registry']);
if ($user && $user->authenticate($params['password'])) {
Auth::login($user);
$payload = [
"iss" => "http://localhost",
"aud" => "http://localhost",
"iat" => time(),
"exp" => time() + (60 * 60),
"user_id" => $user->id
];
$token = JWT::encode($payload, $_ENV['PASSWORD_KEY_HASH'], 'HS256');
echo json_encode([
'success' => 'Logado com sucesso',
'role' => $user->roleName(),
'token' => $token
]);
} else {
http_response_code(400);
echo json_encode(['error' => 'Credenciais erradas']);
}
}
public function destroy(): void
{
Auth::logout();
echo json_encode(['success' => 'Logout feito com sucesso']);
}
public function professors(): void
{
$professors = User::where(['role_id' => RolesEnum::PROFESSOR->value]);
$professorsArray = array_map(function ($professor) {
return [
'id' => $professor->id,
'name' => $professor->name,
];
}, $professors);
echo json_encode(['data' => $professorsArray]);
}
}