-<?php namespace BookStack\Auth\Access;
+<?php
+namespace BookStack\Auth\Access;
+
+use BookStack\Actions\ActivityType;
use BookStack\Auth\SocialAccount;
use BookStack\Auth\User;
use BookStack\Auth\UserRepo;
use BookStack\Exceptions\UserRegistrationException;
+use BookStack\Facades\Activity;
+use BookStack\Facades\Theme;
+use BookStack\Theming\ThemeEvents;
use Exception;
class RegistrationService
{
-
protected $userRepo;
protected $emailConfirmationService;
/**
* Check whether or not registrations are allowed in the app settings.
+ *
* @throws UserRegistrationException
*/
public function ensureRegistrationAllowed()
{
$authMethod = config('auth.method');
$authMethodsWithRegistration = ['standard'];
+
return in_array($authMethod, $authMethodsWithRegistration) && setting('registration-enabled');
}
/**
* The registrations flow for all users.
+ *
* @throws UserRegistrationException
*/
public function registerUser(array $userData, ?SocialAccount $socialAccount = null, bool $emailConfirmed = false): User
// Ensure user does not already exist
$alreadyUser = !is_null($this->userRepo->getByEmail($userEmail));
if ($alreadyUser) {
- throw new UserRegistrationException(trans('errors.error_user_exists_different_creds', ['email' => $userEmail]));
+ throw new UserRegistrationException(trans('errors.error_user_exists_different_creds', ['email' => $userEmail]), '/login');
}
// Create the user
$newUser->socialAccounts()->save($socialAccount);
}
+ Activity::add(ActivityType::AUTH_REGISTER, $socialAccount ?? $newUser);
+ Theme::dispatch(ThemeEvents::AUTH_REGISTER, $socialAccount ? $socialAccount->driver : auth()->getDefaultDriver(), $newUser);
+
// Start email confirmation flow if required
if ($this->emailConfirmationService->confirmationRequired() && !$emailConfirmed) {
$newUser->save();
- $message = '';
try {
$this->emailConfirmationService->sendConfirmation($newUser);
+ session()->flash('sent-email-confirmation', true);
} catch (Exception $e) {
$message = trans('auth.email_confirm_send_error');
- }
- throw new UserRegistrationException($message, '/register/confirm');
+ throw new UserRegistrationException($message, '/register/confirm');
+ }
}
return $newUser;
/**
* Ensure that the given email meets any active email domain registration restrictions.
* Throws if restrictions are active and the email does not match an allowed domain.
+ *
* @throws UserRegistrationException
*/
protected function ensureEmailDomainAllowed(string $userEmail): void
}
$restrictedEmailDomains = explode(',', str_replace(' ', '', $registrationRestrict));
- $userEmailDomain = $domain = mb_substr(mb_strrchr($userEmail, "@"), 1);
+ $userEmailDomain = $domain = mb_substr(mb_strrchr($userEmail, '@'), 1);
if (!in_array($userEmailDomain, $restrictedEmailDomains)) {
$redirect = $this->registrationAllowed() ? '/register' : '/login';
+
throw new UserRegistrationException(trans('auth.registration_email_domain_invalid'), $redirect);
}
}
-
- /**
- * Alias to the UserRepo method of the same name.
- * Attaches the default system role, if configured, to the given user.
- */
- public function attachDefaultRole(User $user): void
- {
- $this->userRepo->attachDefaultRole($user);
- }
-
-}
\ No newline at end of file
+}