Add ability to invite users

This commit is contained in:
James Cole
2022-10-01 12:21:42 +02:00
parent 9bfa52f3ce
commit ee9b651f0f
22 changed files with 656 additions and 115 deletions

View File

@@ -25,6 +25,7 @@ namespace FireflyIII\Http\Controllers\Auth;
use FireflyIII\Events\RegisteredUser;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\Support\Http\Controllers\CreateStuff;
use FireflyIII\User;
use Illuminate\Contracts\Foundation\Application;
@@ -88,11 +89,15 @@ class RegisterController extends Controller
public function register(Request $request)
{
$allowRegistration = $this->allowedToRegister();
$inviteCode = (string) $request->get('invite_code');
$repository = app(UserRepositoryInterface::class);
$validCode = $repository->validateInviteCode($inviteCode);
if (false === $allowRegistration) {
if (false === $allowRegistration && false === $validCode) {
throw new FireflyException('Registration is currently not available :(');
}
$this->validator($request->all())->validate();
$user = $this->createUser($request->all());
Log::info(sprintf('Registered new user %s', $user->email));
@@ -104,6 +109,10 @@ class RegisterController extends Controller
$this->registered($request, $user);
if ($validCode) {
$repository->redeemCode($inviteCode);
}
return redirect($this->redirectPath());
}
@@ -157,4 +166,39 @@ class RegisterController extends Controller
return view('auth.register', compact('isDemoSite', 'email', 'pageTitle'));
}
/**
* Show the application registration form if the invitation code is valid.
*
* @param Request $request
*
* @return Factory|View
* @throws ContainerExceptionInterface
* @throws FireflyException
* @throws NotFoundExceptionInterface
*/
public function showInviteForm(Request $request, string $code)
{
$isDemoSite = app('fireflyconfig')->get('is_demo_site', config('firefly.configuration.is_demo_site'))->data;
$pageTitle = (string) trans('firefly.register_page_title');
$repository = app(UserRepositoryInterface::class);
$allowRegistration = $this->allowedToRegister();
$inviteCode = $code;
$validCode = $repository->validateInviteCode($inviteCode);
if (true === $allowRegistration) {
$message = 'You do not need an invite code on this installation.';
return view('error', compact('message'));
}
if(false === $validCode) {
$message = 'Invalid code.';
return view('error', compact('message'));
}
$email = $request->old('email');
return view('auth.register', compact('isDemoSite', 'email', 'pageTitle', 'inviteCode'));
}
}