mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 04:24:12 +00:00
new:[authentication apis]add classes required for email verification API #2
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Accounts\ControllersLogic;
|
||||
|
||||
use App\Classes\Exceptions\MalformedRequestException;
|
||||
use App\Classes\Exceptions\ResourceNotFoundException;
|
||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||
use App\Classes\Modules\Accounts\Services\CompletesEmailVerificationAttempt;
|
||||
use App\Classes\Modules\Accounts\Services\FetchesEmailVerificationAttempt;
|
||||
use App\Classes\Modules\Accounts\Services\VerifiesUser;
|
||||
use App\Classes\Modules\Accounts\Standards\Criteria\EmailVerificationActiveAttemptExists;
|
||||
use App\Models\UserEmailVerification;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class UserEmailVerificationLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
public function notification(): array
|
||||
{
|
||||
return [
|
||||
'title' => '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([]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Accounts\Services;
|
||||
|
||||
|
||||
use App\Classes\Exceptions\MalformedRequestException;
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Models\UserEmailVerification;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class CompletesEmailVerificationAttempt extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param UserEmailVerification $model
|
||||
* @return Model
|
||||
* @throws MalformedRequestException
|
||||
*/
|
||||
public function execute(UserEmailVerification $model): Model {
|
||||
$model->is_complete = true;
|
||||
return $this->handler($model);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Accounts\Services;
|
||||
|
||||
|
||||
use App\Classes\General\Eloquent\AbstractFetchRecord;
|
||||
use App\Models\PasswordReset;
|
||||
use App\Models\UserEmailVerification;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class FetchesEmailVerificationAttempt extends AbstractFetchRecord
|
||||
{
|
||||
|
||||
/** @var UserEmailVerification */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* FetchesResetPasswordToken constructor.
|
||||
* @param UserEmailVerification $repository
|
||||
*/
|
||||
public function __construct(UserEmailVerification $repository)
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Builder
|
||||
*/
|
||||
public function getRepository(): Builder
|
||||
{
|
||||
return $this->repository->newQuery();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Accounts\Services;
|
||||
|
||||
|
||||
use App\Classes\Exceptions\MalformedRequestException;
|
||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Models\User;
|
||||
use App\Models\UserEmailVerification;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class VerifiesUser extends AbstractUpdateRecord
|
||||
{
|
||||
|
||||
/**
|
||||
* @param User $model
|
||||
* @return Model
|
||||
* @throws MalformedRequestException
|
||||
*/
|
||||
public function execute(User $model): Model {
|
||||
|
||||
$model->status = ApprovalStatus::APPROVED;
|
||||
|
||||
return $this->handler($model);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Accounts\Standards\Criteria;
|
||||
|
||||
|
||||
use App\Classes\Exceptions\ResourceNotFoundException;
|
||||
use App\Models\UserEmailVerification;
|
||||
|
||||
class EmailVerificationActiveAttemptExists
|
||||
{
|
||||
|
||||
/** @var UserEmailVerification */
|
||||
private $repository;
|
||||
|
||||
/**
|
||||
* TokenExistsValidation constructor.
|
||||
* @param UserEmailVerification $repository
|
||||
*/
|
||||
public function __construct(UserEmailVerification $repository)
|
||||
{
|
||||
$this->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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Accounts;
|
||||
|
||||
use App\Classes\Modules\Accounts\ControllersLogic\UserEmailVerificationLogic;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class UserEmailVerificationController
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param UserEmailVerificationLogic $logic
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function verify(Request $request, UserEmailVerificationLogic $logic): JsonResponse {
|
||||
return $logic->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user