diff --git a/app/Classes/Modules/Accounts/ControllersLogic/UserEmailVerificationLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/UserEmailVerificationLogic.php new file mode 100644 index 00000000..bae6f5eb --- /dev/null +++ b/app/Classes/Modules/Accounts/ControllersLogic/UserEmailVerificationLogic.php @@ -0,0 +1,76 @@ + 'Email Verification', + 'message' => 'You have successfully verified your email address' + ]; + } + + /** @var emailVerificationActiveAttemptExists */ + private $emailVerificationActiveAttemptExists; + + /** @var CompletesEmailVerificationAttempt */ + private $completesEmailVerificationAttempt; + + /** @var FetchesEmailVerificationAttempt */ + private $fetchesEmailVerificationAttempt; + + /** @var VerifiesUser */ + private $verifiesUser; + + /** + * UserEmailVerificationLogic constructor. + * @param EmailVerificationActiveAttemptExists $emailVerificationActiveAttemptExists + * @param CompletesEmailVerificationAttempt $completesEmailVerificationAttempt + * @param FetchesEmailVerificationAttempt $fetchesEmailVerificationAttempt + * @param VerifiesUser $verifiesUser + */ + public function __construct(EmailVerificationActiveAttemptExists $emailVerificationActiveAttemptExists, CompletesEmailVerificationAttempt $completesEmailVerificationAttempt, FetchesEmailVerificationAttempt $fetchesEmailVerificationAttempt, VerifiesUser $verifiesUser) + { + $this->emailVerificationActiveAttemptExists = $emailVerificationActiveAttemptExists; + $this->completesEmailVerificationAttempt = $completesEmailVerificationAttempt; + $this->fetchesEmailVerificationAttempt = $fetchesEmailVerificationAttempt; + $this->verifiesUser = $verifiesUser; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws MalformedRequestException + * @throws ResourceNotFoundException + */ + public function logic(Request $request) : JsonResponse { + + $token = $request->input('token'); + + $this->emailVerificationActiveAttemptExists->execute($token); + + /** @var UserEmailVerification $attempt */ + $attempt = $this->fetchesEmailVerificationAttempt->execute(['token' => $token]); + + $this->completesEmailVerificationAttempt->execute($attempt); + + $this->verifiesUser->execute($attempt->user); + + return $this->response([]); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/Services/CompletesEmailVerificationAttempt.php b/app/Classes/Modules/Accounts/Services/CompletesEmailVerificationAttempt.php new file mode 100644 index 00000000..bba1705f --- /dev/null +++ b/app/Classes/Modules/Accounts/Services/CompletesEmailVerificationAttempt.php @@ -0,0 +1,24 @@ +is_complete = true; + return $this->handler($model); + } + +} diff --git a/app/Classes/Modules/Accounts/Services/FetchesEmailVerificationAttempt.php b/app/Classes/Modules/Accounts/Services/FetchesEmailVerificationAttempt.php new file mode 100644 index 00000000..ed835693 --- /dev/null +++ b/app/Classes/Modules/Accounts/Services/FetchesEmailVerificationAttempt.php @@ -0,0 +1,35 @@ +repository = $repository; + } + + + /** + * @return Builder + */ + public function getRepository(): Builder + { + return $this->repository->newQuery(); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/Services/VerifiesUser.php b/app/Classes/Modules/Accounts/Services/VerifiesUser.php new file mode 100644 index 00000000..6d9e296c --- /dev/null +++ b/app/Classes/Modules/Accounts/Services/VerifiesUser.php @@ -0,0 +1,29 @@ +status = ApprovalStatus::APPROVED; + + return $this->handler($model); + + } + +} diff --git a/app/Classes/Modules/Accounts/Standards/Criteria/EmailVerificationActiveAttemptExists.php b/app/Classes/Modules/Accounts/Standards/Criteria/EmailVerificationActiveAttemptExists.php new file mode 100644 index 00000000..5df54812 --- /dev/null +++ b/app/Classes/Modules/Accounts/Standards/Criteria/EmailVerificationActiveAttemptExists.php @@ -0,0 +1,40 @@ +repository = $repository; + } + + + /** + * @param string $token + * @return bool + * @throws ResourceNotFoundException + */ + public function execute(string $token){ + + if(!$this->repository->active()->where('token', $token)->first()){ + throw new ResourceNotFoundException('The email verification token has expired or doesn\'t exist'); + } + + return true; + + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Accounts/UserEmailVerificationController.php b/app/Http/Controllers/Accounts/UserEmailVerificationController.php new file mode 100644 index 00000000..aee42b67 --- /dev/null +++ b/app/Http/Controllers/Accounts/UserEmailVerificationController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/routes/account.php b/routes/account.php index 38fcd6d5..ab30988a 100644 --- a/routes/account.php +++ b/routes/account.php @@ -24,4 +24,8 @@ Route::group(['prefix' => 'account', 'namespace' => 'Accounts', 'as' => 'account Route::post('/reset', 'ResetPasswordController@reset')->name('reset'); }); }); + + Route::group(['prefix' => 'email', 'as' => 'email.'], function () { + Route::post('/verify', 'UserEmailVerificationController@verify')->name('verify'); + }); });