-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAuthController.php
More file actions
127 lines (110 loc) · 4.23 KB
/
Copy pathAuthController.php
File metadata and controls
127 lines (110 loc) · 4.23 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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
namespace App\Http\Controllers\API;
use App\Http\Controllers\Controller;
use App\Models\ReadingStreak;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Validation\ValidationException;
use Carbon\Carbon;
class AuthController extends Controller
{
// public function __construct()
// {
// $this->middleware('auth:sanctum', ['except' => ['login', 'register']]);
// }
public function login(Request $request)
{
log::info("ZEINABBBBBBBBBBB");
$request->validate([
'username' => 'required|string',
'password' => 'required|string',
]);
$user = User::where('username', $request->username)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
return response()->json([
'message' => 'Invalid credentials',
], 401);
}
return response()->json([
'user_id' => $user->id,
'user' => $user,
'authorization' => [
'token' => $user->createToken('ApiToken')->plainTextToken,
'type' => 'bearer',
'user' => $user,
]
]);
}
public function register(Request $request)
{
try {
$request->validate([
'username' => 'required|unique:users',
'password' => 'required',
'email' => 'required|email|unique:users',
'profile_picture' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
]);
// $email = $request->email;
// Check if the email is valid using Mailboxlayer API
// $response = Http::get('http://apilayer.net/api/check', [
// 'access_key' => 'ca5aa27e3c13cee1304b031599ba9a92',
// 'email' => $email,
// ]);
// if ($response->failed()) {
// throw new \Exception('Failed to validate email. Please try again.');
// }
// $result = $response->json();
// if (isset($result['success']) && !$result['success']) {
// throw new \Exception('Email validation failed. Reason: ' . $result['error']['info']);
// }
// if (!isset($result['format_valid']) || !$result['format_valid'] || !$result['smtp_check']) {
// throw ValidationException::withMessages([
// 'email' => ['The provided email is invalid or does not exist.'],
// ]);
// }
// Save the user record
$user = new User();
$user->username = $request->input('username');
$user->password = bcrypt($request->input('password'));
$user->email = $request->input('email');
if ($request->hasFile('profile_picture')) {
$profilePicture = $request->file('profile_picture');
$profilePicturePath = time() . '.' . $profilePicture->extension();
$profilePicture->move(public_path('profile_picture'), $profilePicturePath);
$user->profile_picture = $profilePicturePath;
}
$user->save();
// Create a reading streak for the newly registered user
$streak = new ReadingStreak([
'last_reading_day' => Carbon::now()->toDateString(),
'streak' => 1,
'longest_streak' => 1,
]);
$user->readingStreak()->save($streak);
return response()->json(['message' => 'User created successfully', 'user' => $user], 201);
} catch (\Exception $e) {
return response()->json(['error' => $e->getMessage()], 500);
}
}
public function logout()
{
Auth::user()->tokens()->delete();
return response()->json([
'message' => 'Successfully logged out',
]);
}
public function refresh()
{
return response()->json([
'user' => Auth::user(),
'authorisation' => [
'token' => Auth::refresh(),
'type' => 'bearer',
]
]);
}
}