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/html/app/Http/Controllers/AuthenticationController.php
<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Services\ApiEndpoints;

use App\Services\DeviceService;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session;

class AuthenticationController extends Controller
{
    protected $deviceService;

    public function __construct(DeviceService $deviceService)
    {
        $this->deviceService = $deviceService;
    }


    protected function getLocation()
    {
        try {
            $clientIp = request()->getClientIp();

            // Check if there's a country data in the session and if the IP matches
            if (Session::has('country') && Session::get('country')['ip'] === $clientIp) {
                info('IP address unchanged, using session data');
                return Session::get('country'); // Use the session data directly
            }

            // If IP is different or no data in session, call the external API
            $response = Http::get("https://ipinfo.io/{$clientIp}?token=55690b2a8bf492");
            if ($response->successful()) {
                $data = $response->json();
                $location = explode(',', $data['loc'] ?? '');
                $latitude = $location[0] ?? '';
                $longitude = $location[1] ?? '';

                // Include city and state in the response if needed
                $data = [
                    'ip' => $clientIp ?? '',
                    'latitude' => $latitude ?? '',
                    'longitude' => $longitude ?? '',
                ];

                // Store the new data in the session
                Session::put('country', $data);

                return $data;
            }
        } catch (\Exception $e) {
            Log::error('Location fetching error: ' . $e->getMessage());
        }

        return null; // Return null if location fetching fails
    }
 
    protected function getDevice()
    {
        if (!Session::has('device_name')) {
            $deviceName = $this->deviceService->getDeviceName();
            Session::put('device_name', $deviceName);
        }
    }

    protected function getLocationAndDevice()
    {
        $this->getLocation();
        $this->getDevice();
    }

    public function welcome()
    {
        $this->getLocationAndDevice();
        return view('welcome');
    }
    

    public function downloadApp()
    {
        return view('pages.download-app');
    }
    public function decisionScreen()
    {
        return view("auth.decision-screen");
    }

    public function sellerNIN()
    {
        return view("auth.nin-registration");
    }

    public function login()
    {
        $this->getLocationAndDevice();
        if (Session::get('token')) {
            return redirect('/services');
        }
        return view('auth.login');
    }

    public function register()
    {
        if (Session::get('token')) {
            return redirect()->intended('/services');
        }
        $this->getLocationAndDevice();
        return view('auth.register');
    }

    public function verifyAccountEmail()
    {
        if (Session::get('token')) {
            return redirect()->intended('/services');
        }
        return view('auth.verify-account-email');
    }

    public function becomeSeller()
    {
        return view('auth.become-a-seller');
    }

    public function forgetPassword()
    {
        if (Session::get('token')) {
            return redirect()->intended('/services');
        }
        return view('auth.forget-password');
    }

    public function setNewPassword()
    {
        if (Session::get('token')) {
            return redirect()->intended('/services');
        }
        return view('auth.set-new-password');
    }

    public function verifyEmail()
    {
         if (Session::get('token')) {
            return redirect()->intended('/services');
        }
        return view('auth.verify-email');
    }

    public function verifyPhone()
    {
        if (Session::get('token')) {
            return redirect()->intended('/services');
        }
        return view('auth.verify-phone');
    }

    public function verifyDeleteAccountOtp()
    { 
        return view('auth.delete-account-otp');
    }

    public function logout()
    {
        Session::flush();
        return redirect()->to('/login')->with('error', 'Logout');
    }

    public function showDeleteAccountForm()
    {
        return view('livewire.auth.delete-account');
    }



     public function showAccountDeleteSuccess()
    {
        return view('livewire.auth.account-deleted');
          
    }


    

    public function requestDeleteOTP(Request $request)
    {
       // dd('got here');
       //  dd($request->all());
        $request->validate([
            'email' => 'required|email',
        ]);

        /*

        $api = new ApiEndpoints();
Http::withHeaders($api->header())

        */
      $api = new ApiEndpoints();
  /*
      // $response = Http::withHeaders(ApiEndpoints::header())->post(ApiEndpoints::sendEmailOtp(), [
        $response = Http::withHeaders(ApiEndpoints::header())->post(ApiEndpoints::sendEmailOtp(), [
            'email' => $request->email,
            'purpose' => 'delete_account', 
        ]);
*/

https://console.fixgini.com/api/v1/send-email-otp
         $response = Http::withHeaders($api->header())
        ->post('https://console.fixgini.com/api/v1/send-email-otp', [
             'email' => $request->email,
            'purpose' => 'delete_account', 
        ]);
/*
        Log::info('Send Email OTP API response', [
        'status' => $response->status(),
        'body'   => $response->body(),
    ]);
*/   /*
        if ($response->successful()) {
         
            return redirect()->route('delete.account.form')->with([
                'success' => 'OTP sent to your email.',
                'show_otp_form' => true, 
            ]);
        } 
*/


        if ($response->successful()) {
    return redirect()->route('delete.account.form')->with([
        'success' => 'OTP sent to your email.',
        'show_otp_form' => true,
        'email' => $request->email,
    ]);
}
        
        
        
        else {
       
            return redirect()->route('delete.account.form')->with('error', 'Failed to send OTP. Please try again.');
        }
    }

   
  public function confirmDeleteAccount(Request $request)
{
    // ✅ Validate input
    $request->validate([
        'email' => 'required|email|exists:users,email',
        'otp'   => 'required|digits:6',
    ]);

    try {
        // ✅ Call single API for OTP verification + account deletion
        $response = Http::post('https://console.fixgini.com/api/v1/confirm-account-delete', [
            'email'   => $request->email,
            'otp'     => $request->otp,
            'purpose' => 'delete_account',
        ]);

        if ($response->successful()) {
            auth()->logout();
            Session::flush();

           return view('livewire.auth.account-deleted');
        }

        // If API returns error (non-200)
        return redirect()
            ->route('delete.account.form')
            ->with('error', $response->json('message') ?? 'Invalid OTP or deletion failed.');

    } catch (\Throwable $e) {
        Log::error("Account deletion error: " . $e->getMessage());

        return redirect()
            ->route('delete.account.form')
            ->with('error', 'Something went wrong. Please try again later.');
    }
}





}