Basic user management
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domains\UserManagement\Controllers;
|
||||
|
||||
use App\Domains\UserManagement\Actions\UserActivation\UserActivationCommand;
|
||||
use App\Domains\UserManagement\Actions\UserActivation\UserActivationRequest;
|
||||
use App\Domains\UserManagement\Actions\UserActivation\UserDeactivationCommand;
|
||||
use App\Domains\UserManagement\Actions\UserActivation\UserDeactivationRequest;
|
||||
use App\Domains\UserManagement\Actions\UserChangePassword\UserChangePasswordCommand;
|
||||
use App\Domains\UserManagement\Actions\UserChangePassword\UserChangePasswordRequest;
|
||||
use App\Domains\UserManagement\Actions\UserRegistration\UserRegistrationCommand;
|
||||
use App\Domains\UserManagement\Actions\UserRegistration\UserRegistrationRequest;
|
||||
use App\Enumerations\UserRole;
|
||||
use App\Models\User;
|
||||
use App\Providers\InertiaProvider;
|
||||
use App\Scopes\CommonController;
|
||||
use App\ValueObjects\EmailAddress;
|
||||
use Carbon\Traits\Date;
|
||||
use DateTime;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class EmailVerificationController extends CommonController
|
||||
{
|
||||
public function verifyEmailForm(Request $request) {
|
||||
$inertiaProvider = new InertiaProvider('UserManagement/VerifyEmail', ['appName' => app('tenant')->name]);
|
||||
return $inertiaProvider->render();
|
||||
}
|
||||
|
||||
public function doVerification(Request $request) : JsonResponse
|
||||
{
|
||||
|
||||
$user = $this->users->findByUsername($request->get('email'));
|
||||
if ($user === null) {
|
||||
return response()->json([
|
||||
'error_types' => [
|
||||
'email' => 'Die E-Mail-Adresse konnte nicht zugeordnet werden.',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
if (new DateTime() > DateTime::createFromFormat('Y-m-d H:i:s', $user->activation_token_expires_at)) {
|
||||
return response()->json([
|
||||
'error_types' => [
|
||||
'verificationToken' => 'Der Sicherheitsschlüssel ist abgelaufen.',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
if (!$this->users->checkVerificationToken($user, $request->get('verificationToken'))) {
|
||||
return response()->json([
|
||||
'error_types' => [
|
||||
'verificationToken' => 'Der Sicherheitsschlüssel ist nicht korrekt',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
$userActivationRequest = new UserActivationRequest($user);
|
||||
$userActivationCommand = new UserActivationCommand($userActivationRequest);
|
||||
$activationResult = $userActivationCommand->execute();
|
||||
|
||||
|
||||
if (!$activationResult->success) {
|
||||
return response()->json([
|
||||
'error_types' => [
|
||||
'verificationToken' => 'Ein allgemeiner Fehler ist aufgetreten. Bitte versuche es später noch einmal.',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
$userPasswordResetRequest = new UserChangePasswordRequest($user, $request->get('password'));
|
||||
$userPasswordResetCommand = new UserChangePasswordCommand($userPasswordResetRequest);
|
||||
$userPasswordResetCommand->execute();
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Dein Account wurde aktiviert.Du kannst dich nun mit deinem neuen Passwort einloggen.'
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -3,10 +3,11 @@
|
||||
namespace App\Domains\UserManagement\Controllers;
|
||||
|
||||
use App\Providers\InertiaProvider;
|
||||
use App\Scopes\CommonController;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class LoginController {
|
||||
class LoginController extends CommonController {
|
||||
public function loginForm(Request $request) {
|
||||
$errors = [];
|
||||
|
||||
@@ -32,6 +33,12 @@ class LoginController {
|
||||
'password.required' => 'Bitte gib dein Passwort ein.',
|
||||
]);
|
||||
|
||||
$user = $this->users->findByUsername($request->get('username'));
|
||||
if ($user !== null && $user->password === null) {
|
||||
return redirect()->intended('/register/verifyEmail');
|
||||
}
|
||||
|
||||
|
||||
#$credentials = ['username' => 'development', 'password' => 'development'];
|
||||
|
||||
if (!Auth::attempt($credentials)) {
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domains\UserManagement\Controllers;
|
||||
|
||||
use App\Domains\MessageSystem\Actions\SendMessage\SendMessageCommand;
|
||||
use App\Domains\MessageSystem\Actions\SendMessage\SendMessageRequest;
|
||||
use App\Domains\UserManagement\Actions\UserRegistration\UserRegistrationCommand;
|
||||
use App\Domains\UserManagement\Actions\UserRegistration\UserRegistrationRequest;
|
||||
use App\Enumerations\MessageType;
|
||||
use App\Enumerations\UserRole;
|
||||
use App\Providers\InertiaProvider;
|
||||
use App\Scopes\CommonController;
|
||||
use App\ValueObjects\EmailAddress;
|
||||
use App\ValueObjects\MessageRecipient;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class RegistrationController extends CommonController {
|
||||
public function loginForm(Request $request) {
|
||||
$errors = [];
|
||||
|
||||
if ($request->session()->has('errors')) {
|
||||
$errors = $request->session()->get('errors')->getBag('default')->getMessages();
|
||||
}
|
||||
|
||||
|
||||
$inertiaProvider = new InertiaProvider('UserManagement/Registration', ['errors' => $errors, 'appName' => app('tenant')->name]);
|
||||
return $inertiaProvider->render();
|
||||
}
|
||||
|
||||
public function doRegistration(Request $request) : JsonResponse {
|
||||
|
||||
$user = $this->users->findByUsername($request->get('email'));
|
||||
if ($user !== null) {
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Dieser Account existiert bereits.'
|
||||
]);
|
||||
}
|
||||
|
||||
$email = EmailAddress::fromString($request->get('email'));
|
||||
$userRoleMain = UserRole::USER_ROLE_USER;
|
||||
$userRoleLocalGroup = UserRole::USER_ROLE_USER;
|
||||
|
||||
$localGroup = app('tenant')->slug === 'lv' ? $request->get('localGroup') : app('tenant')->slug;
|
||||
|
||||
|
||||
$registrationRequest = new UserRegistrationRequest(
|
||||
$request->get('firstname'),
|
||||
$request->get('lastname'),
|
||||
$request->get('nickname'),
|
||||
$email,
|
||||
$userRoleMain,
|
||||
$userRoleLocalGroup,
|
||||
$localGroup
|
||||
);
|
||||
|
||||
$registrationCommand = new UserRegistrationCommand($registrationRequest);
|
||||
$result = $registrationCommand->execute();
|
||||
|
||||
if (!$result->success) {
|
||||
return response()->json([
|
||||
'status' => 'error',
|
||||
'message' => 'Beim Erstellen des Accounts ist ein Fehler aufgetreten.'
|
||||
]);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Registrierung erfolgreich! Bitte prüfe nun dein E-Mail-Postfach'
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domains\UserManagement\Controllers;
|
||||
|
||||
use App\Domains\UserManagement\Actions\GenerateActivationToken\GenerateActivationTokenCommand;
|
||||
use App\Domains\UserManagement\Actions\GenerateActivationToken\GenerateActivationTokenRequest;
|
||||
use App\Domains\UserManagement\Actions\GenerateActivationToken\GenerateActivationTokenResponse;
|
||||
use App\Domains\UserManagement\Actions\UserActivation\UserActivationCommand;
|
||||
use App\Domains\UserManagement\Actions\UserActivation\UserActivationRequest;
|
||||
use App\Providers\InertiaProvider;
|
||||
use App\Scopes\CommonController;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ResetPasswordController extends CommonController {
|
||||
public function resetPasswordForm() {
|
||||
$inertiaProvider = new InertiaProvider('UserManagement/ResetPassword', []);
|
||||
return $inertiaProvider->render();
|
||||
}
|
||||
|
||||
public function doResetPassword(Request $request) : JsonResponse {
|
||||
$user = $this->users->findByUsername($request->get('email'));
|
||||
|
||||
if (null !== $user) {
|
||||
$expirationDate = new \DateTime()->modify('+15 Minutes');
|
||||
|
||||
$resetAccountRequest = new GenerateActivationTokenRequest($user, $expirationDate);
|
||||
$resetAccountCommand = new GenerateActivationTokenCommand($resetAccountRequest);
|
||||
$resetAccountCommand->execute();
|
||||
}
|
||||
|
||||
|
||||
return response()->json([
|
||||
'status' => 'success',
|
||||
'message' => 'Falls deine E-Mail-Adresse gefunden wurde, erhältst du nun eine E-Mail mit weiteren Schritten zum Zurücksetzen deines Passwortes.'
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user