1 <?php namespace BookStack\Auth\Access;
3 use BookStack\Auth\SocialAccount;
4 use BookStack\Auth\UserRepo;
5 use BookStack\Exceptions\UserRegistrationException;
8 class RegistrationService
12 protected $emailConfirmationService;
15 * RegistrationService constructor.
17 public function __construct(UserRepo $userRepo, EmailConfirmationService $emailConfirmationService)
19 $this->userRepo = $userRepo;
20 $this->emailConfirmationService = $emailConfirmationService;
25 * Check whether or not registrations are allowed in the app settings.
26 * @throws UserRegistrationException
28 public function checkRegistrationAllowed()
30 if (!setting('registration-enabled') || config('auth.method') === 'ldap') {
31 throw new UserRegistrationException(trans('auth.registrations_disabled'), '/login');
36 * The registrations flow for all users.
37 * @throws UserRegistrationException
39 public function registerUser(array $userData, ?SocialAccount $socialAccount = null, bool $emailVerified = false)
41 $registrationRestrict = setting('registration-restrict');
43 if ($registrationRestrict) {
44 $restrictedEmailDomains = explode(',', str_replace(' ', '', $registrationRestrict));
45 $userEmailDomain = $domain = mb_substr(mb_strrchr($userData['email'], "@"), 1);
46 if (!in_array($userEmailDomain, $restrictedEmailDomains)) {
47 throw new UserRegistrationException(trans('auth.registration_email_domain_invalid'), '/register');
51 $newUser = $this->userRepo->registerNew($userData, $emailVerified);
54 $newUser->socialAccounts()->save($socialAccount);
57 if ($this->emailConfirmationService->confirmationRequired() && !$emailVerified) {
62 $this->emailConfirmationService->sendConfirmation($newUser);
63 } catch (Exception $e) {
64 $message = trans('auth.email_confirm_send_error');
67 throw new UserRegistrationException($message, '/register/confirm');
70 auth()->login($newUser);