From 383794b2ffad6584bc1cd726c6690089bc1ce129 Mon Sep 17 00:00:00 2001 From: obenny Date: Mon, 7 Sep 2020 15:39:17 +0800 Subject: [PATCH 1/2] email verifiaction comment --- .../Modules/Accounts/ControllersLogic/CreateUserLogic.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateUserLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateUserLogic.php index 7bce7f7e..422c1d15 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/CreateUserLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateUserLogic.php @@ -103,6 +103,8 @@ class CreateUserLogic extends AbstractControllerLogic /** @var User $user */ $user = $this->createsUser->execute($registrationObject); + /** send email verification */ + $request->request->set('name', $request->input('company_name')); /** @var Company $company */ @@ -125,4 +127,4 @@ class CreateUserLogic extends AbstractControllerLogic } } -} \ No newline at end of file +} From 502b10879f7c1c95279a72e87a0a231a8b0998ba Mon Sep 17 00:00:00 2001 From: obenny Date: Tue, 8 Sep 2020 11:26:50 +0800 Subject: [PATCH 2/2] email verification backend --- .../Jobs/SendUserVerificationEmail.php | 41 +++++++++++++++++++ .../ControllersLogic/CreateUserLogic.php | 18 +++++++- .../GeneratesEmailVerificationAttempt.php | 35 ++++++++++++++++ .../Notifications/UserVerificationEmail.php | 39 ++++++++++++++++++ app/Models/User.php | 4 ++ app/Models/UserEmailVerification.php | 28 +++++++++++++ 6 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 app/Classes/Jobs/SendUserVerificationEmail.php create mode 100644 app/Classes/Modules/Accounts/Services/GeneratesEmailVerificationAttempt.php create mode 100644 app/Classes/Notifications/UserVerificationEmail.php create mode 100644 app/Models/UserEmailVerification.php diff --git a/app/Classes/Jobs/SendUserVerificationEmail.php b/app/Classes/Jobs/SendUserVerificationEmail.php new file mode 100644 index 00000000..2bb54f47 --- /dev/null +++ b/app/Classes/Jobs/SendUserVerificationEmail.php @@ -0,0 +1,41 @@ +user = $user; + $this->attempt = $attempt; + } + + + public function handle() + { + $this->user->notify(new UserVerificationEmail($this->user, $this->attempt)); + } +} diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateUserLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateUserLogic.php index 422c1d15..bc89f14b 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/CreateUserLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateUserLogic.php @@ -4,8 +4,10 @@ namespace App\Classes\Modules\Accounts\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; +use App\Classes\Jobs\SendUserVerificationEmail; use App\Classes\Modules\Accounts\DataTransferObjects\RegistrationObject; use App\Classes\Modules\Accounts\Services\CreatesUser; +use App\Classes\Modules\Accounts\Services\GeneratesEmailVerificationAttempt; use App\Classes\Modules\Accounts\Standards\Rules\CanCreateUser; use App\Classes\Modules\Companies\DataTransferObjects\ConnectionObject; use App\Classes\Modules\Companies\DataTransferObjects\EmployeeObject; @@ -60,6 +62,12 @@ class CreateUserLogic extends AbstractControllerLogic /** @var AuthenticateUserLogic */ private $authenticateUserLogic; + /** @var GeneratesEmailVerificationAttempt */ + private $generatesEmailVerificationAttempt; + + /** @var SendUserVerificationEmail */ + private $sendUserVerificationEmail; + /** * CreateUserLogic constructor. * @param GeneratesUniqueAccountNumber $generatesUniqueAccountNumber @@ -71,8 +79,10 @@ class CreateUserLogic extends AbstractControllerLogic * @param CreatesCompanyConnection $createsCompanyConnection * @param CreateContactProcessor $createContactProcessor * @param AuthenticateUserLogic $authenticateUserLogic + * @param GeneratesEmailVerificationAttempt $generatesEmailVerificationAttempt + * @param SendUserVerificationEmail $sendUserVerificationEmail */ - public function __construct(GeneratesUniqueAccountNumber $generatesUniqueAccountNumber, CanCreateUser $canCreateUser, CreatesUser $createsUser, CreateCompanyProcessor $createCompanyProcessor, CreatesCompanyModule $createsCompanyModule, CreatesCompanyEmployee $createsCompanyEmployee, CreatesCompanyConnection $createsCompanyConnection, CreateContactProcessor $createContactProcessor, AuthenticateUserLogic $authenticateUserLogic) + public function __construct(GeneratesUniqueAccountNumber $generatesUniqueAccountNumber, CanCreateUser $canCreateUser, CreatesUser $createsUser, CreateCompanyProcessor $createCompanyProcessor, CreatesCompanyModule $createsCompanyModule, CreatesCompanyEmployee $createsCompanyEmployee, CreatesCompanyConnection $createsCompanyConnection, CreateContactProcessor $createContactProcessor, AuthenticateUserLogic $authenticateUserLogic, GeneratesEmailVerificationAttempt $generatesEmailVerificationAttempt, SendUserVerificationEmail $sendUserVerificationEmail) { $this->generatesUniqueAccountNumber = $generatesUniqueAccountNumber; $this->canCreateUser = $canCreateUser; @@ -83,6 +93,8 @@ class CreateUserLogic extends AbstractControllerLogic $this->createsCompanyConnection = $createsCompanyConnection; $this->createContactProcessor = $createContactProcessor; $this->authenticateUserLogic = $authenticateUserLogic; + $this->generatesEmailVerificationAttempt = $generatesEmailVerificationAttempt; + $this->sendUserVerificationEmail = $sendUserVerificationEmail; } @@ -103,7 +115,9 @@ class CreateUserLogic extends AbstractControllerLogic /** @var User $user */ $user = $this->createsUser->execute($registrationObject); - /** send email verification */ + $attempt = $this->generatesEmailVerificationAttempt->execute($user); + + $this->sendUserVerificationEmail::dispatch($user, $attempt); $request->request->set('name', $request->input('company_name')); diff --git a/app/Classes/Modules/Accounts/Services/GeneratesEmailVerificationAttempt.php b/app/Classes/Modules/Accounts/Services/GeneratesEmailVerificationAttempt.php new file mode 100644 index 00000000..f39f2540 --- /dev/null +++ b/app/Classes/Modules/Accounts/Services/GeneratesEmailVerificationAttempt.php @@ -0,0 +1,35 @@ +emailVerification()->create([ + 'token' => Str::random(25), + 'is_complete' => false, + 'is_active' => true, + 'is_sent' => true + ]); + + } catch (QueryException $exception){ + throw new MalformedRequestException($exception->getMessage()); + } + } + +} diff --git a/app/Classes/Notifications/UserVerificationEmail.php b/app/Classes/Notifications/UserVerificationEmail.php new file mode 100644 index 00000000..9e1282e0 --- /dev/null +++ b/app/Classes/Notifications/UserVerificationEmail.php @@ -0,0 +1,39 @@ +user = $user; + $this->attempt = $attempt; + } + + + public function toMail() + { + return (new MailMessage) + ->subject('Email Verification') + ->view('emails.account.user_verification', ['user' => $this->user, 'attempt' => $this->attempt]); + } + + +} diff --git a/app/Models/User.php b/app/Models/User.php index 955bcc08..6cb5291c 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -43,6 +43,10 @@ class User extends AbstractModel implements return []; } + public function emailVerification(): HasMany { + return $this->hasMany(UserEmailVerification::class, 'email', 'email'); + } + /** * @return HasMany */ diff --git a/app/Models/UserEmailVerification.php b/app/Models/UserEmailVerification.php new file mode 100644 index 00000000..278c8cd6 --- /dev/null +++ b/app/Models/UserEmailVerification.php @@ -0,0 +1,28 @@ +where('is_active', true)->where('is_complete', false); + } + + /** + * @return BelongsTo + */ + public function user(): BelongsTo { + return $this->belongsTo(User::class, 'email', 'email'); + } +}