mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-04-14 07:02:46 +08:00

Extracted logout to the login service so the logic can be shared instead of re-implemented at each stage. For this, the SocialAuthService was split so the driver management is in its own class, so it can be used elsewhere without use (or circular dependencies) of the SocialAuthService. During review of #4467
93 lines
2.8 KiB
PHP
93 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace BookStack\Access\Controllers;
|
|
|
|
use BookStack\Access\LoginService;
|
|
use BookStack\Access\RegistrationService;
|
|
use BookStack\Access\SocialDriverManager;
|
|
use BookStack\Exceptions\StoppedAuthenticationException;
|
|
use BookStack\Exceptions\UserRegistrationException;
|
|
use BookStack\Http\Controller;
|
|
use Illuminate\Contracts\Validation\Validator as ValidatorContract;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Validation\Rules\Password;
|
|
|
|
class RegisterController extends Controller
|
|
{
|
|
protected SocialDriverManager $socialDriverManager;
|
|
protected RegistrationService $registrationService;
|
|
protected LoginService $loginService;
|
|
|
|
/**
|
|
* Create a new controller instance.
|
|
*/
|
|
public function __construct(
|
|
SocialDriverManager $socialDriverManager,
|
|
RegistrationService $registrationService,
|
|
LoginService $loginService
|
|
) {
|
|
$this->middleware('guest');
|
|
$this->middleware('guard:standard');
|
|
|
|
$this->socialDriverManager = $socialDriverManager;
|
|
$this->registrationService = $registrationService;
|
|
$this->loginService = $loginService;
|
|
}
|
|
|
|
/**
|
|
* Show the application registration form.
|
|
*
|
|
* @throws UserRegistrationException
|
|
*/
|
|
public function getRegister()
|
|
{
|
|
$this->registrationService->ensureRegistrationAllowed();
|
|
$socialDrivers = $this->socialDriverManager->getActive();
|
|
|
|
return view('auth.register', [
|
|
'socialDrivers' => $socialDrivers,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Handle a registration request for the application.
|
|
*
|
|
* @throws UserRegistrationException
|
|
* @throws StoppedAuthenticationException
|
|
*/
|
|
public function postRegister(Request $request)
|
|
{
|
|
$this->registrationService->ensureRegistrationAllowed();
|
|
$this->validator($request->all())->validate();
|
|
$userData = $request->all();
|
|
|
|
try {
|
|
$user = $this->registrationService->registerUser($userData);
|
|
$this->loginService->login($user, auth()->getDefaultDriver());
|
|
} catch (UserRegistrationException $exception) {
|
|
if ($exception->getMessage()) {
|
|
$this->showErrorNotification($exception->getMessage());
|
|
}
|
|
|
|
return redirect($exception->redirectLocation);
|
|
}
|
|
|
|
$this->showSuccessNotification(trans('auth.register_success'));
|
|
|
|
return redirect('/');
|
|
}
|
|
|
|
/**
|
|
* Get a validator for an incoming registration request.
|
|
*/
|
|
protected function validator(array $data): ValidatorContract
|
|
{
|
|
return Validator::make($data, [
|
|
'name' => ['required', 'min:2', 'max:100'],
|
|
'email' => ['required', 'email', 'max:255', 'unique:users'],
|
|
'password' => ['required', Password::default()],
|
|
]);
|
|
}
|
|
}
|