| Server IP : 127.0.1.1 / Your IP : 216.73.216.152 Web Server : Apache/2.4.52 (Ubuntu) System : Linux bahcrestlinepropertiesllc 5.15.0-113-generic #123-Ubuntu SMP Mon Jun 10 08:16:17 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/bahcrestline/core/app/Http/Controllers/Auth/ |
Upload File : |
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\User;
use Exception;
use File;
use Helper;
use Illuminate\Support\Facades\Auth;
use Image;
use Laravel\Socialite\Facades\Socialite;
use Redirect;
class SocialAuthController extends Controller
{
/**
* List of providers configured in config/services acts as whitelist
*
* @var array
*/
protected $providers = [
'facebook',
'twitter',
'google',
'linkedin',
'github',
'bitbucket'
];
private $uploadPath = "uploads/users/";
public function __construct()
{
$this->middleware('guest');
}
/**
* Redirect to provider for authentication
*
* @param $driver
* @return mixed
*/
public function redirectToProvider($driver)
{
if (!$this->isProviderAllowed($driver)) {
return $this->sendFailedResponse("{$driver} ".trans('backLang.notCurrentlySupported'));
}
try {
return Socialite::driver($driver)->redirect();
} catch (Exception $e) {
// You should show something simple fail message
return $this->sendFailedResponse($e->getMessage());
}
}
/**
* Check for provider allowed and services configured
*
* @param $driver
* @return bool
*/
private function isProviderAllowed($driver)
{
return in_array($driver, $this->providers) && config()->has("services.{$driver}");
}
/**
* Send a failed response with a msg
*
* @param null $msg
* @return \Illuminate\Http\RedirectResponse
*/
protected function sendFailedResponse($msg = null)
{
return Redirect::to(url('/login'))
->withErrors(['msg' => $msg ?: trans('backLang.UnableToLogin')]);
}
/**
* Handle response of authentication redirect callback
*
* @param $driver
* @return \Illuminate\Http\RedirectResponse
*/
public function handleProviderCallback($driver)
{
try {
$user = Socialite::driver($driver)->user();
} catch (Exception $e) {
return $this->sendFailedResponse($e->getMessage());
}
// check for email in returned user
return empty($user->email)
? $this->sendFailedResponse(trans('backLang.NoEmailReturned')." {$driver}")
: $this->loginOrCreateAccount($user, $driver);
}
protected function loginOrCreateAccount($providerUser, $driver)
{
// check for already has account
$user = User::where('email', $providerUser->getEmail())->first();
// if user already found
if ($user) {
if ($user->photo != "") {
// Delete old Avatar
File::delete($this->getUploadPath() . $user->photo);
}
$photo_filename = "";
if ($providerUser->getAvatar() != "") {
// Save Avatar to uploads folder
$avatar_path = $providerUser->getAvatar();
$photo_filename = time() . rand(1111, 9999);
$extension = pathinfo($avatar_path, PATHINFO_EXTENSION);
if ($extension == 0 || $extension == "") {
$extension = "png";
}
$photo_filename = $photo_filename . '.' . $extension;
//get file content from url
$file_contents = file_get_contents($avatar_path);
$save = file_put_contents($this->getUploadPath() . $photo_filename, $file_contents);
if (!$save) {
$photo_filename = "";
}
}
// update the avatar and provider that might have changed
$user->update([
'photo' => $photo_filename,
'provider' => $driver,
'provider_id' => $providerUser->id,
'access_token' => $providerUser->token
]);
} else {
$photo_filename = "";
if ($providerUser->getAvatar() != "") {
// Save Avatar to uploads folder
$avatar_path = $providerUser->getAvatar();
$photo_filename = time() . rand(1111, 9999);
$extension = pathinfo($avatar_path, PATHINFO_EXTENSION);
if ($extension == 0 || $extension == "") {
$extension = "png";
}
$photo_filename = $photo_filename . '.' . $extension;
//get file content from url
$file_contents = file_get_contents($avatar_path);
$save = file_put_contents($this->getUploadPath() . $photo_filename, $file_contents);
if (!$save) {
$photo_filename = "";
}
}
// create a new user
$user = User::create([
'name' => $providerUser->getName(),
'email' => $providerUser->getEmail(),
'photo' => $photo_filename,
'permissions_id' => Helper::GeneralWebmasterSettings("permission_group"),
'status' => true,
'provider' => $driver,
'provider_id' => $providerUser->getId(),
'access_token' => $providerUser->token,
// user can use reset password to create a password
'password' => ''
]);
}
// login the user
Auth::login($user, true);
return $this->sendSuccessResponse();
}
public function getUploadPath()
{
return $this->uploadPath;
}
public function setUploadPath($uploadPath)
{
$this->uploadPath = Config::get('app.APP_URL') . $uploadPath;
}
/**
* Send a successful response
*
* @return \Illuminate\Http\RedirectResponse
*/
protected function sendSuccessResponse()
{
return redirect()->intended('home');
}
}