mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/portal.git
synced 2026-08-19 04:23:59 +00:00
email verification backend
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Jobs;
|
||||
|
||||
use App\Classes\Notifications\UserVerificationEmail;
|
||||
use App\Models\User;
|
||||
use App\Models\UserEmailVerification;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Foundation\Bus\Dispatchable;
|
||||
use Illuminate\Queue\InteractsWithQueue;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class SendUserVerificationEmail implements ShouldQueue
|
||||
{
|
||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||
|
||||
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/** @var UserEmailVerification */
|
||||
private $attempt;
|
||||
|
||||
/**
|
||||
* SendUserVerificationEmail constructor.
|
||||
* @param User $user
|
||||
* @param UserEmailVerification $attempt
|
||||
*/
|
||||
public function __construct(User $user, UserEmailVerification $attempt)
|
||||
{
|
||||
$this->user = $user;
|
||||
$this->attempt = $attempt;
|
||||
}
|
||||
|
||||
|
||||
public function handle()
|
||||
{
|
||||
$this->user->notify(new UserVerificationEmail($this->user, $this->attempt));
|
||||
}
|
||||
}
|
||||
@@ -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'));
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Accounts\Services;
|
||||
|
||||
|
||||
use App\Classes\Exceptions\MalformedRequestException;
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class GeneratesEmailVerificationAttempt
|
||||
{
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @return Model
|
||||
* @throws MalformedRequestException
|
||||
*/
|
||||
public function execute(User $user): Model {
|
||||
try {
|
||||
|
||||
return $user->emailVerification()->create([
|
||||
'token' => Str::random(25),
|
||||
'is_complete' => false,
|
||||
'is_active' => true,
|
||||
'is_sent' => true
|
||||
]);
|
||||
|
||||
} catch (QueryException $exception){
|
||||
throw new MalformedRequestException($exception->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Notifications;
|
||||
|
||||
|
||||
use App\Models\User;
|
||||
use App\Models\UserEmailVerification;
|
||||
use Illuminate\Notifications\Messages\MailMessage;
|
||||
|
||||
class UserVerificationEmail extends AbstractEmail
|
||||
{
|
||||
|
||||
/** @var User */
|
||||
private $user;
|
||||
|
||||
/** @var UserEmailVerification */
|
||||
private $attempt;
|
||||
|
||||
/**
|
||||
* UserVerificationEmail constructor.
|
||||
* @param User $user
|
||||
* @param UserEmailVerification $attempt
|
||||
*/
|
||||
public function __construct(User $user, UserEmailVerification $attempt)
|
||||
{
|
||||
$this->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]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -43,6 +43,10 @@ class User extends AbstractModel implements
|
||||
return [];
|
||||
}
|
||||
|
||||
public function emailVerification(): HasMany {
|
||||
return $this->hasMany(UserEmailVerification::class, 'email', 'email');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return HasMany
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
class UserEmailVerification extends AbstractModel
|
||||
{
|
||||
protected $table = 'user_email_verifications';
|
||||
|
||||
public $fillable = [
|
||||
'token', 'is_complete', 'is_active', 'is_sent'
|
||||
];
|
||||
/**
|
||||
* @param $query
|
||||
* @return mixed
|
||||
*/
|
||||
public function scopeActive($query){
|
||||
return $query->where('is_active', true)->where('is_complete', false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return BelongsTo
|
||||
*/
|
||||
public function user(): BelongsTo {
|
||||
return $this->belongsTo(User::class, 'email', 'email');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user