-
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathRegisterController.php
101 lines (83 loc) · 3.28 KB
/
RegisterController.php
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
namespace App\Http\Controllers\Api\Auth;
use App\Events\ApiRegistered;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\RegisterRequest;
use App\Http\Resources\AuthenticateUserResource;
use App\Models\SocialAccount;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class RegisterController extends Controller
{
public function register(RegisterRequest $request): JsonResponse
{
/** @var User $user */
$user = User::query()->create([
'name' => $request->input('name'),
'username' => $request->input('name'),
'email' => strtolower($request->input('email')),
'password' => Hash::make($request->input('password')),
]);
$user->assignRole('company');
//TODO: Send new company registration notification on Slack
event(new ApiRegistered($user));
return response()->json(
array_merge(
['message' => 'Votre compte a été créé avec succès. Un e-mail de vérification vous a été envoyé.'],
$this->userMetaData($user)
)
);
}
public function googleAuthenticator(Request $request): JsonResponse
{
$socialUser = $request->input('socialUser');
$user = User::query()->where('email', $socialUser['email'])->first();
if (! $user) {
/** @var User $user */
$user = User::query()->create([
'name' => $socialUser['name'],
'email' => $socialUser['email'],
'username' => $socialUser['id'],
'email_verified_at' => now(),
'avatar_type' => strtolower($socialUser['provider']),
]);
$user->assignRole('company');
}
if ($user->hasRole('user')) {
return response()->json(['error' => 'Vous n\'êtes pas autorisé à accéder à cette section avec cette adresse e-mail.'], 401);
}
if (! $user->hasProvider($socialUser['provider'])) {
$user->providers()->save(new SocialAccount([
'provider' => strtolower($socialUser['provider']),
'provider_id' => $socialUser['id'],
'token' => $socialUser['idToken'],
'avatar' => $socialUser['photoUrl'],
]));
}
$user->providers()->update([
'token' => $socialUser['idToken'],
'avatar' => $socialUser['photoUrl'],
]);
//TODO: Send welcome email to user 1 hour after registration
//TODO: Send new company registration notification on Slack
$user->last_login_at = Carbon::now();
$user->last_login_ip = $request->ip();
$user->save();
return response()->json([
'message' => 'Votre compte a été cree avec succès via Google.',
'response' => $this->userMetaData($user),
]);
}
private function userMetaData(User $user): array
{
return [
'user' => new AuthenticateUserResource($user),
'token' => $user->createToken($user->email)->plainTextToken,
'roles' => $user->roles()->pluck('name'),
'permissions' => $user->permissions()->pluck('name'),
];
}
}