<?php namespace BookStack\Services;
+use BookStack\Http\Requests\Request;
+use GuzzleHttp\Exception\ClientException;
use Laravel\Socialite\Contracts\Factory as Socialite;
use BookStack\Exceptions\SocialDriverNotConfigured;
use BookStack\Exceptions\SocialSignInException;
protected $socialite;
protected $socialAccount;
- protected $validSocialDrivers = ['google', 'github'];
+ protected $validSocialDrivers = ['google', 'github', 'facebook', 'slack', 'twitter', 'azure', 'okta', 'gitlab', 'twitch'];
/**
* SocialAuthService constructor.
public function handleLoginCallback($socialDriver)
{
$driver = $this->validateDriver($socialDriver);
-
// Get user details from social driver
$socialUser = $this->socialite->driver($driver)->user();
$socialId = $socialUser->getId();
// When a user is not logged in and a matching SocialAccount exists,
// Simply log the user into the application.
if (!$isLoggedIn && $socialAccount !== null) {
- return $this->logUserIn($socialAccount->user);
+ auth()->login($socialAccount->user);
+ return redirect()->intended('/');
}
// When a user is logged in but the social account does not exist,
$message .= trans('errors.social_account_register_instructions', ['socialAccount' => title_case($socialDriver)]);
}
- throw new SocialSignInException($message . '.', '/login');
- }
-
-
- private function logUserIn($user)
- {
- auth()->login($user);
- return redirect('/');
+ throw new SocialSignInException($message, '/login');
}
/**
{
$driver = trim(strtolower($socialDriver));
- if (!in_array($driver, $this->validSocialDrivers)) abort(404, trans('errors.social_driver_not_found'));
- if (!$this->checkDriverConfigured($driver)) throw new SocialDriverNotConfigured(trans('errors.social_driver_not_configured', ['socialAccount' => title_case($socialDriver)]));
+ if (!in_array($driver, $this->validSocialDrivers)) {
+ abort(404, trans('errors.social_driver_not_found'));
+ }
+ if (!$this->checkDriverConfigured($driver)) {
+ throw new SocialDriverNotConfigured(trans('errors.social_driver_not_configured', ['socialAccount' => title_case($socialDriver)]));
+ }
return $driver;
}
public function getActiveDrivers()
{
$activeDrivers = [];
- foreach ($this->validSocialDrivers as $driverName) {
- if ($this->checkDriverConfigured($driverName)) {
- $activeDrivers[$driverName] = true;
+ foreach ($this->validSocialDrivers as $driverKey) {
+ if ($this->checkDriverConfigured($driverKey)) {
+ $activeDrivers[$driverKey] = $this->getDriverName($driverKey);
}
}
return $activeDrivers;
}
+ /**
+ * Get the presentational name for a driver.
+ * @param $driver
+ * @return mixed
+ */
+ public function getDriverName($driver)
+ {
+ return config('services.' . strtolower($driver) . '.name');
+ }
+
/**
* @param string $socialDriver
* @param \Laravel\Socialite\Contracts\User $socialUser
*/
public function detachSocialAccount($socialDriver)
{
- session();
user()->socialAccounts()->where('driver', '=', $socialDriver)->delete();
session()->flash('success', trans('settings.users_social_disconnected', ['socialAccount' => title_case($socialDriver)]));
return redirect(user()->getEditUrl());
}
-
-}
\ No newline at end of file
+}