GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
File: /var/www/console.fixgini.com/app/Http/Controllers/Authentication/SetNewPassword.php
<?php

namespace App\Http\Controllers\Authentication;

use App\Models\User;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use App\Models\OtpVerification;
use App\Services\ActivityLogger;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use App\Notifications\LogAlertNotification;
use Illuminate\Support\Facades\Notification;
use Illuminate\Validation\ValidationException;

class SetNewPassword extends Controller
{
    public function setNewPassword(Request $request)
    {
        try {
            $validatedData = $request->validate([
                'token' => 'required|numeric|exists:otp_verifications,otp|digits:6',
                'email' => 'required|email|exists:otp_verifications,email',
                'password' => 'required|valid_password',
                'device_name' => 'required|string',
            ]);
        } catch (ValidationException $e) {
            Log::alert('Failed : ' . $e->getMessage());
            return response()->json(['status' => 'error', 'message' => $e->getMessage()], 422);
        }

        try {
            // Find the user by email
            $user = User::where('email', $validatedData['email'])->first();

            if ($user) {
                // Update the user's password
                $user->forceFill([
                    'password' => Hash::make($validatedData['password']),
                    'remember_token' => Str::random(60),
                ])->save();

                // Log the activity
                $device = $validatedData['device_name'];
                $activityLogger = app(ActivityLogger::class);
                $activityLogger->log('User changed PIN from mobile phone (API)', $user->id, $user->role, $device);

                // delete the otp records of the user
                OtpVerification::where('email', $validatedData['email'])->delete();

                return response()->json(['status' => 'success', 'message' => 'Password reset.'], 200);
            } else {
                Log::error('User not found for email: ' . $validatedData['email']);
                return response()->json(['status' => 'error', 'message' => 'Unable to reset password.'], 422);
            }
        } catch (\Throwable $th) {
            $message = 'An error occurred during password reset: ' . $th->getMessage();
            Log::alert($message);
            return response()->json(['status' => 'error', 'message' => 'Unable to reset password.'], 500);
        }
    }
 
}