diff --git a/app/Http/Controllers/APIS/AdminApi/UsersController.php b/app/Http/Controllers/APIS/AdminApi/UsersController.php index 9c8dfec..9478958 100644 --- a/app/Http/Controllers/APIS/AdminApi/UsersController.php +++ b/app/Http/Controllers/APIS/AdminApi/UsersController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Http\Requests\CreateUserRequest; use App\Mail\Admin\UserCreatedMail; +use App\Mail\UserLink; use App\Models\User; use App\Services\AdminService; use Exception; @@ -305,7 +306,7 @@ class UsersController extends Controller 'message' => 'User created successfully', 'data' => [ 'user_id' => $userId, - 'token'=>$randomToken, + 'token' => $randomToken, 'activation_link' => $newActivationLink, // 'external_service_response' => $serviceResponse ] @@ -481,7 +482,7 @@ class UsersController extends Controller // } - public function activate($id,$token, Request $request) + public function activate($id, $token, Request $request) { try { @@ -759,4 +760,91 @@ class UsersController extends Controller return jsonResponseWithErrorMessage($e->getMessage(), 500); } } + + public function userEmailCheck(Request $request) + { + try { + $validator = Validator::make($request->all(), [ + 'email' => 'required|email' + ]); + + if ($validator->fails()) { + return response()->json([ + 'success' => false, + 'message' => 'Validation failed', + 'errors' => $validator->errors() + ], 422); + } + + $email = $request->input('email'); + $user = User::where('email', $email)->first(); + + if ($user) { + + // If user + $mailData = [ + 'name' => $user->first_name, + 'user_id' => $user->id, + ]; + + Mail::to($user->email)->send(new UserLink($mailData)); + + return response()->json([ + 'success' => true, + 'message' => 'Email exists', + 'user_id' => $user->id + ], 200); + } + + return response()->json([ + 'success' => false, + 'message' => 'Email does not exist' + ], 404); + } catch (Exception $e) { + Log::error("An error occurred while checking email: " . $e->getMessage()); + return response()->json(['error' => 'Failed to check email', 'details' => $e->getMessage()], 500); + } + } + + public function userUpdatePassword(Request $request) + { + try { + $validator = Validator::make($request->all(), [ + 'user_id' => 'required', + 'password' => 'required' + ]); + + if ($validator->fails()) { + return response()->json([ + 'success' => false, + 'message' => 'Validation failed', + 'errors' => $validator->errors() + ], 422); + } + + $userId = $request->input('user_id'); + $password = $request->input('password'); + + $user = User::find($userId); + + if (!$user) { + return response()->json([ + 'success' => false, + 'message' => 'User not found' + ], 404); + } + + // Update password + $user->password = Hash::make($password); + $user->save(); + + return response()->json([ + 'success' => true, + 'message' => 'Password updated successfully' + ], 200); + } catch (Exception $e) { + Log::error("An error occurred while updating password: " . $e->getMessage()); + return response()->json(['error' => 'Failed to update password', 'details' => $e->getMessage()], 500); + } + } } diff --git a/app/Mail/UserLink.php b/app/Mail/UserLink.php new file mode 100644 index 0000000..fa49a58 --- /dev/null +++ b/app/Mail/UserLink.php @@ -0,0 +1,59 @@ +mailData = $mailData; + + } + + + + /** + * Get the message envelope. + */ + public function envelope(): Envelope + { + return new Envelope( + subject: 'Update Password', + ); + } + + /** + * Get the message content definition. + */ + public function content(): Content + { + return new Content( + view: 'view.user_update_password', + ); + } + + /** + * Get the attachments for the message. + * + * @return array + */ + public function attachments(): array + { + return []; + } +} diff --git a/resources/views/Mails/user_update_password.blade.php b/resources/views/Mails/user_update_password.blade.php new file mode 100644 index 0000000..71da024 --- /dev/null +++ b/resources/views/Mails/user_update_password.blade.php @@ -0,0 +1,26 @@ + + + + + Update Your Password + + +

Hello, {{ $user['name'] }}!

+ +

We received a request to update the password for your account.

+ +

If you made this request, you can update your password using the link below:

+ +

+ + Update Password + +

+ + +

If you did not request a password update, no action is needed. Your account is secure.

+ +

Thank you,
The Support Team

+ + diff --git a/routes/customer_api.php b/routes/customer_api.php index 4318333..74ba706 100644 --- a/routes/customer_api.php +++ b/routes/customer_api.php @@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\APIS\CustomerApi\UserAssetLinkController; use Tymon\JWTAuth\Facades\JWTAuth; use App\Http\Controllers\AlarmControllerCommon; - +use App\Http\Controllers\APIS\AdminApi\UsersController; use App\Http\Controllers\APIS\CustomerApi\AuthController; use App\Http\Controllers\APIS\CustomerApi\CustomerDeviceInfoController; use App\Http\Controllers\APIS\CustomerApi\TelemetryController; @@ -63,4 +63,12 @@ Route::middleware(['customerApiBasicAuth'])->group(function () { Route::post('/get-user-alarms', [TelemetryController::class, 'getUserAlarms']); Route::get('/get-user-device-by-asset/{assetId}', [TelemetryController::class, 'getUserDeviceByAsset']); Route::get('/get-user-assets', [TelemetryController::class, 'getUserAssets']); + + + }); + + // user password update + Route::get('/user-password-update-link', [UsersController::class, 'userEmailCheck']); + Route::post('/user-password-update', [UsersController::class, 'userUpdatePassword'])->name('user.password.update'); +