Skip to content

Commit 87a84b4

Browse files
committed
Created spa mode
1 parent 3788ed0 commit 87a84b4

File tree

153 files changed

+235544
-11656
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

153 files changed

+235544
-11656
lines changed

.env.example

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
APP_NAME=APP_NAME=Qaravel
1+
APP_NAME=Qaravel
22
APP_ENV=local
33
APP_KEY=base64:WxtI6bGfS2nBHzH5VCosFroXjrDpNnrbfEIeyMea0xI=
44
APP_DEBUG=true

.env.frontend

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# This is your .env file
22
# The data added here will be propagated to the client
33
# example:
4-
# PORT=8080
4+
# PORT=9001
55
APP_ENV=Development
6-
APP_NAME=Qaravel
6+
APP_NAME=qaravel
77
API_URL=http://qaravel.gomedia/api/
88
COOKIE_URL=#

LICENSE

+151-148
Large diffs are not rendered by default.

app/Exceptions/Handler.php

+20
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace App\Exceptions;
44

5+
use Throwable;
6+
use Illuminate\Auth\Access\AuthorizationException;
57
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
68

79
class Handler extends ExceptionHandler
@@ -34,4 +36,22 @@ public function register()
3436
{
3537
//
3638
}
39+
40+
/**
41+
* Render an exception into an HTTP response.
42+
*
43+
* @param \Illuminate\Http\Request $request
44+
* @param \Throwable $e
45+
* @return \Symfony\Component\HttpFoundation\Response
46+
*
47+
* @throws \Throwable
48+
*/
49+
public function render($request, Throwable $e)
50+
{
51+
if ($e instanceof AuthorizationException) {
52+
$e = new AuthorizationException('You do not have permission to access. Please contact your administrator to request access.', $e->getCode());
53+
}
54+
55+
return parent::render($request, $e);
56+
}
3757
}

app/Http/Controllers/Auth/AuthController.php

+116-31
Original file line numberDiff line numberDiff line change
@@ -2,66 +2,106 @@
22

33
namespace App\Http\Controllers\Auth;
44

5+
use App\Models\Core\File;
56
use Illuminate\Http\Request;
7+
use App\Notifications\UserLogin;
68
use App\Http\Controllers\Controller;
9+
use App\Models\User;
710
use Illuminate\Support\Facades\Auth;
811
use Illuminate\Support\Facades\Hash;
912

1013
class AuthController extends Controller
1114
{
12-
public function login(Request $request)
15+
public function login(Request $request, $guard = 'users')
1316
{
1417
$request->validate(
1518
[
16-
'email' => "required|email|exists:users,email",
19+
'email' => "required|email|exists:{$guard},email",
1720
'password' => 'required',
1821
],
1922
[
2023
'email.required' => 'Your email address is required.',
21-
'email.exists' => 'Your email address doesn\'t exists.',
24+
'email.exists' => 'Your email address doens\'t exists.',
2225
'password.required' => 'Your password is required.',
2326
]
2427
);
25-
26-
if (Auth::attempt($request->only(['email', 'password']))) {
27-
return $this->me();
28+
if (Auth::guard($guard)->attempt($request->only(['email', 'password']))) {
29+
if (!$request->user($guard)->is_active) {
30+
Auth::guard($guard)->logout();
31+
abort(403, 'Your account has been disabled and cannot access this application. Please contact with admin.');
32+
}
33+
$request->user($guard)->logs()->create([
34+
'type' => 'login'
35+
]);
36+
$request->user($guard)->notify(new UserLogin($request));
37+
return $this->me($guard);
2838
} else {
2939
return response()->json([
30-
'message' => 'Your password doesn\'t match with record.',
31-
'errors' => [
32-
'password' => ['Your password doesn\'t match with our records.']
33-
]
40+
'message' => 'Your password doesn\'t match with record.',
41+
'errors' => [
42+
'password' => ['Your password doesn\'t match with our records.']
43+
]
3444
], 403);
3545
}
3646
}
3747

38-
public function logout(Request $request)
48+
public function logout(Request $request, $guard = 'users')
3949
{
40-
Auth::guard('users')->logout();
41-
return response()->json([
42-
'message' => 'You have been successfully logged out!'
43-
], 200);
50+
Auth::guard($guard)->logout();
51+
return response()->json([
52+
'message' => 'You have been successfully logged out!'
53+
], 200);
54+
}
55+
56+
public function me($guard = null)
57+
{
58+
59+
$user = request()->user($guard)->fresh([
60+
'address'
61+
]);
62+
if (guard() == 'users') {
63+
$user = $user->append('default_payment_method')->toArray();
64+
} else if (guard() == 'admins') {
65+
$user = $user->append('modules')->toArray();
66+
}
67+
$user['guard'] = guard();
68+
69+
return response()->json($user, 200);
4470
}
4571

46-
public function update(Request $request)
72+
public function update(Request $request, $guard = 'users')
4773
{
48-
$user = $request->user();
74+
$user = $request->user($guard);
4975

5076
$rules = [
5177
'first_name' => 'required',
5278
'last_name' => 'required',
53-
'email' => "email|unique:users,email,{$user->id}",
79+
'address' => 'required',
80+
'email' => "email|unique:{$guard},email,{$user->id}",
5481
];
5582

5683
// Validate those rules
5784
$this->validate($request, $rules);
5885

59-
$user->update($request->input());
86+
$user->update($request->only([
87+
'first_name',
88+
'last_name',
89+
'email',
90+
'phone_number',
91+
]));
6092

61-
return response()->json($request->user()->load('roles', 'permissions'), 200);
93+
// add address to the user
94+
$user->updateOrCreateAddress($request->input('address'));
95+
96+
if ($request->avatar && !empty($request->avatar)) {
97+
$image = File::find($request->avatar['id']);
98+
$user->avatar()->save($image);
99+
}
100+
101+
return $this->me($guard);
62102
}
63103

64-
public function password(Request $request)
104+
public function password(Request $request, $guard = 'users')
65105
{
66106
$rules = [
67107
'old_password' => 'required',
@@ -71,24 +111,69 @@ public function password(Request $request)
71111
// Validate those rules
72112
$this->validate($request, $rules);
73113

74-
$user = $request->user();
114+
$user = $request->user($guard);
75115
if (Hash::check($request->old_password, $user->password)) {
76-
$user->update([
77-
'password' => bcrypt($request->password)
78-
]);
116+
$user->update([
117+
'password' => bcrypt($request->password)
118+
]);
79119
} else {
80-
return response()->json([
81-
'message' => 'Old password doesn\'t match!'
82-
], 404);
120+
return response()->json([
121+
'message' => 'Old password doesn\'t match!'
122+
], 404);
83123
}
84124

85125
return response()->json([
86-
'message' => 'Password has been changed successfully!'
126+
'message' => 'Password has been changed successfully!'
87127
], 200);
88128
}
89129

90-
public function me()
130+
public function signup(Request $request, $guard = 'users')
91131
{
92-
return response()->json(request()->user()->load('roles', 'permissions'), 200);
132+
$rules = [
133+
'email' => 'required|email|unique:users',
134+
'plan' => 'required',
135+
'first_name' => 'required',
136+
'last_name' => 'required',
137+
'phone_number' => 'required',
138+
'line1' => 'required',
139+
'city' => 'required',
140+
'postal_code' => 'required',
141+
'country' => 'required',
142+
'password' => 'required|min:6|confirmed',
143+
];
144+
145+
// Validate those rules
146+
$this->validate($request, $rules);
147+
148+
$data = $request->only([
149+
'email',
150+
'plan',
151+
'first_name',
152+
'last_name',
153+
'email',
154+
'phone_number',
155+
'line1',
156+
'city',
157+
'postal_code',
158+
'country',
159+
'password',
160+
]);
161+
162+
$data['password'] = Hash::make($request->password);
163+
164+
// create the user
165+
$user = User::create($data);
166+
167+
// add address to the user
168+
$user->updateOrCreateAddress($data);
169+
170+
// login by user id
171+
Auth::guard($guard)->loginUsingId($user->id);
172+
173+
$user->logs()->create([
174+
'type' => 'login'
175+
]);
176+
177+
return $this->me($guard);
93178
}
94179
}

app/Http/Controllers/Auth/ForgotPasswordController.php

+57-58
Original file line numberDiff line numberDiff line change
@@ -9,73 +9,72 @@
99
use Illuminate\Support\Facades\Password;
1010
use Illuminate\Auth\Events\PasswordReset;
1111
use Illuminate\Contracts\Auth\PasswordBroker;
12-
use Illuminate\Mail\Message;
1312

1413
class ForgotPasswordController extends Controller
1514
{
15+
public function request(Request $request, $guard = null)
16+
{
17+
$request->validate(
18+
[
19+
'email' => "required|email|exists:{$guard},email",
20+
],
21+
[
22+
'email.required' => 'Email address is required.',
23+
]
24+
);
1625

17-
public function request(Request $request)
18-
{
19-
$request->validate([
20-
'email' => 'required|email',
21-
],
22-
[
23-
'email.required'=> 'Email address is required.',
24-
]
25-
);
26+
$status = Password::broker($guard)->sendResetLink($request->only('email'));
27+
if ($status === Password::INVALID_USER) {
28+
return response()->json([
29+
'message' => 'User not found!'
30+
], 403);
31+
} elseif ($status === PasswordBroker::RESET_THROTTLED) {
32+
return response()->json([
33+
'message' => 'Reset password email already sent. Please try again after sometime!'
34+
], 403);
35+
}
2636

27-
$status = Password::broker('users')->sendResetLink($request->only('email'));
28-
if ($status === Password::INVALID_USER) {
29-
return response()->json([
30-
'message' => 'User not found!'
31-
], 403);
32-
} elseif ($status === PasswordBroker::RESET_THROTTLED) {
33-
return response()->json([
34-
'message' => 'Reset password email already sent. Please try again after sometime!'
35-
], 403);
36-
}
37+
return response()->json([
38+
'status' => $status,
39+
'message' => 'Password reset link sent successfully!'
40+
], 200);
41+
}
3742

38-
return response()->json([
39-
'status' => $status,
40-
'message' => 'Password reset link sent successfully!'
41-
], 200);
42-
}
43+
public function reset(Request $request, $guard = null)
44+
{
45+
$request->validate(
46+
[
47+
'password' => 'required|min:6|same:password_confirmation',
48+
'password_confirmation' => 'required'
49+
],
50+
[
51+
'password.required' => 'Password is required.',
52+
'password_confirmation.required' => 'Password Confirm is required.'
53+
]
54+
);
4355

44-
public function reset(Request $request)
45-
{
46-
$request->validate([
47-
'password' => 'required|min:6|same:password_confirmation',
48-
'password_confirmation' => 'required'
49-
],
50-
[
51-
'password.required'=> 'Password is required.',
52-
'password_confirmation.required'=> 'Password Confirm is required.'
53-
]
54-
);
56+
$status = Password::broker($guard)->reset(
57+
$request->only('email', 'password', 'password_confirmation', 'token'),
58+
function ($user, $password) use ($request) {
59+
$user->forceFill([
60+
'password' => Hash::make($password)
61+
])->save();
5562

56-
$status = Password::reset(
57-
$request->only('email', 'password', 'password_confirmation', 'token'),
58-
function ($user, $password) use ($request) {
59-
$user->forceFill([
60-
'password' => Hash::make($password)
61-
])->save();
63+
$user->setRememberToken(Str::random(60));
6264

63-
$user->setRememberToken(Str::random(60));
65+
event(new PasswordReset($user));
66+
}
67+
);
6468

65-
event(new PasswordReset($user));
66-
}
67-
);
68-
69-
if ($status !== Password::PASSWORD_RESET) {
70-
return response()->json([
71-
'message' => 'Invalid token or token may expired!'
72-
], 403);
73-
}
74-
75-
return response()->json([
76-
'status' => $status,
77-
'message' => 'Password reset successfully!'
78-
], 200);
79-
}
69+
if ($status !== Password::PASSWORD_RESET) {
70+
return response()->json([
71+
'message' => 'Invalid token or token may expired!'
72+
], 403);
73+
}
8074

75+
return response()->json([
76+
'status' => $status,
77+
'message' => 'Password reset successfully!'
78+
], 200);
79+
}
8180
}

0 commit comments

Comments
 (0)