diff --git a/app/Http/Controllers/SocialAuthController.php b/app/Http/Controllers/SocialAuthController.php index 3eab121..9bf69ee 100644 --- a/app/Http/Controllers/SocialAuthController.php +++ b/app/Http/Controllers/SocialAuthController.php @@ -2,15 +2,13 @@ namespace App\Http\Controllers; -use App\Actions\Fortify\CreateNewUser; use App\Models\AuthGroupUser; use App\Models\GoogleAuth; use App\Models\User; -use Illuminate\Http\Request; +use Exception; use Laravel\Fortify\Fortify; use Laravel\Socialite\Facades\Socialite; use Illuminate\Support\Facades\Auth; -use Laravel\Fortify\Features; class SocialAuthController extends Controller { @@ -19,41 +17,52 @@ public function redirectToProvider() return Socialite::driver('google')->redirect(); } - public function handleProviderCallback(Request $request) + public function handleProviderCallback() { - //get user from google - $userFromGoogle = Socialite::driver('google')->user(); + //try get user from google + try { + $userFromGoogle = Socialite::driver('google')->user(); + } catch (Exception $th) { + //return 500 Internal Server Error + throw new Exception('Terjadi kesalahan saat mengambil data dari Google. Silahkan coba beberapa saat lagi. Jika masalah terus berlanjut, hubungi Administrator/Pengembang', 500); + } //check if user_id exists in users_google_auth table $usersGoogleAuth = GoogleAuth::where('google_id', $userFromGoogle->id)->first(); + //check if email from google exists in users table + $userEmail = User::where('email', $userFromGoogle->email)->first(); + if ($usersGoogleAuth) { //if user_id exists, get user from users table then login $users = User::where('id', $usersGoogleAuth->user_id)->first(); Auth::login($users); return redirect()->intended(Fortify::redirects('home')); - } else { - //if user_id does not exist, create new user in users table then login - $users = new User([ - 'email' => $userFromGoogle->email, - 'name' => $userFromGoogle->name, - 'email_verified_at' => now(), - 'password' => bcrypt($userFromGoogle->id), - ]); - $users->save(); - //create new user_id in users_google_auth table - $userGoogleAuth = new GoogleAuth([ - 'user_id' => $users->id, - 'google_id' => $userFromGoogle->id, - 'avatar' => $userFromGoogle->avatar ?? '', - ]); - $users->googleAuth()->save($userGoogleAuth); - - //create new user_id in auth_group_user table - $authGroupUser = new AuthGroupUser(); - $authGroupUser->fromGoogleAccount($userGoogleAuth); - - $users->markEmailAsVerified(); - Auth::login($users); - return redirect()->intended(Fortify::redirects('home')); + } else if ($userEmail) { + //return 409 Conflict + abort(409, 'Email Google anda sudah terdaftar. Silahkan masuk menggunakan email dan kata sandi anda atau gunakan email lain untuk masuk menggunakan Google.'); } + + //if user_id does not exist, create new user in users table then login + $users = new User([ + 'email' => $userFromGoogle->email, + 'name' => $userFromGoogle->name, + 'email_verified_at' => now(), + 'password' => bcrypt($userFromGoogle->id), + ]); + $users->save(); + //create new user_id in users_google_auth table + $userGoogleAuth = new GoogleAuth([ + 'user_id' => $users->id, + 'google_id' => $userFromGoogle->id, + 'avatar' => $userFromGoogle->avatar ?? '', + ]); + $users->googleAuth()->save($userGoogleAuth); + + //create new user_id in auth_group_user table + $authGroupUser = new AuthGroupUser(); + $authGroupUser->fromGoogleAccount($userGoogleAuth); + + $users->markEmailAsVerified(); + Auth::login($users); + return redirect()->intended(Fortify::redirects('home')); } } diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php new file mode 100644 index 0000000..5c586db --- /dev/null +++ b/resources/views/errors/401.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Unauthorized')) +@section('code', '401') +@section('message', __('Unauthorized')) diff --git a/resources/views/errors/402.blade.php b/resources/views/errors/402.blade.php new file mode 100644 index 0000000..3bc23ef --- /dev/null +++ b/resources/views/errors/402.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Payment Required')) +@section('code', '402') +@section('message', __('Payment Required')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 0000000..a5506f0 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Forbidden')) +@section('code', '403') +@section('message', __($exception->getMessage() ?: 'Forbidden')) diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 0000000..7549540 --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Not Found')) +@section('code', '404') +@section('message', __('Not Found')) diff --git a/resources/views/errors/409.blade.php b/resources/views/errors/409.blade.php new file mode 100644 index 0000000..33a6f43 --- /dev/null +++ b/resources/views/errors/409.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Conflict')) +@section('code', '409') +@section('message', $exception->getMessage() ?? __('Conflict')) diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 0000000..c09216e --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Page Expired')) +@section('code', '419') +@section('message', __('Page Expired')) diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php new file mode 100644 index 0000000..f01b07b --- /dev/null +++ b/resources/views/errors/429.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Too Many Requests')) +@section('code', '429') +@section('message', __('Too Many Requests')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 0000000..5501075 --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Server Error')) +@section('code', '500') +@section('message', $exception->getMessage() ?? __('Server Error')) diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 0000000..c5a9dde --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Service Unavailable')) +@section('code', '503') +@section('message', __('Service Unavailable')) diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 0000000..019c2cd --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,53 @@ + + +
+ + + +