large commit

This commit is contained in:
omair saleh
2021-03-11 13:06:02 +08:00
parent 13ddf458db
commit 05401f6bbc
729 changed files with 23312 additions and 7218 deletions
@@ -0,0 +1,71 @@
<?php
namespace App\Classes\Modules\Accounts\Processors;
use App\Classes\Modules\Accounts\DataTransferObjects\AuthenticationCredentialsObject;
use App\Classes\Modules\Accounts\Services\AuthenticatesUser;
use App\Classes\Modules\Accounts\Services\AuthenticationRedirect;
use App\Classes\Modules\Accounts\Services\FetchesUser;
use App\Classes\Modules\Accounts\Services\GeneratesAuthenticationToken;
use App\Classes\Modules\Accounts\Standards\Rules\CanAuthenticateUser;
use Illuminate\Http\Request;
class AuthenticationProcessor
{
/** @var CanAuthenticateUser */
private $canAuthenticateUser;
/** @var AuthenticatesUser */
private $authenticatesUser;
/** @var GeneratesAuthenticationToken */
private $generatesAuthenticationToken;
/** @var FetchesUser */
private $fetchesUser;
/** @var AuthenticationRedirect */
private $authenticationRedirect;
/**
* AuthenticationProcessor constructor.
* @param CanAuthenticateUser $canAuthenticateUser
* @param AuthenticatesUser $authenticatesUser
* @param GeneratesAuthenticationToken $generatesAuthenticationToken
* @param FetchesUser $fetchesUser
* @param AuthenticationRedirect $authenticationRedirect
*/
public function __construct(CanAuthenticateUser $canAuthenticateUser, AuthenticatesUser $authenticatesUser, GeneratesAuthenticationToken $generatesAuthenticationToken, FetchesUser $fetchesUser, AuthenticationRedirect $authenticationRedirect)
{
$this->canAuthenticateUser = $canAuthenticateUser;
$this->authenticatesUser = $authenticatesUser;
$this->generatesAuthenticationToken = $generatesAuthenticationToken;
$this->fetchesUser = $fetchesUser;
$this->authenticationRedirect = $authenticationRedirect;
}
/**
* @param Request $request
* @return array
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\InternalServerErrorException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request): array {
$object = new AuthenticationCredentialsObject($request->input('email'), $request->input('password'));
$this->canAuthenticateUser->passes($object);
$this->authenticatesUser->execute($object);
$user = $this->fetchesUser->execute(['email' => $object->getEmail()]);
return ['access_token' => $this->generatesAuthenticationToken->execute($user), 'redirect_url' => $this->authenticationRedirect->url($user)];
}
}
@@ -0,0 +1,55 @@
<?php
namespace App\Classes\Modules\Accounts\Processors;
use App\Classes\Modules\Accounts\DataTransferObjects\RegistrationObject;
use App\Classes\Modules\Accounts\DataTransferObjects\UserObject;
use App\Classes\Modules\Accounts\Services\CreatesUser;
use App\Classes\Modules\Accounts\Standards\Rules\CanRegisterUser;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Model;
class CreateUserProcessor
{
/** @var CanRegisterUser */
private $canRegisterUser;
/** @var CreatesUser */
private $createsUser;
/**
* CreateUserProcessor constructor.
* @param CanRegisterUser $canRegisterUser
* @param CreatesUser $createsUser
*/
public function __construct(CanRegisterUser $canRegisterUser, CreatesUser $createsUser)
{
$this->canRegisterUser = $canRegisterUser;
$this->createsUser = $createsUser;
}
/**
* @param Request $request
* @param $roleType
* @param $status
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request, $roleType, $status): Model {
$userObject = new RegistrationObject($request->input('name'), $request->input('email'),
$request->input('password'), $request->input('password_confirmation'),
$roleType, $status);
$this->canRegisterUser->passes($userObject);
/** @var User $user_query */
return $this->createsUser->execute($userObject);
}
}
@@ -0,0 +1,59 @@
<?php
namespace App\Classes\Modules\Accounts\Processors;
use App\Classes\Jobs\EmailVerificationAttemptExpiration;
use App\Classes\Jobs\SendUserVerificationEmail;
use App\Classes\Modules\Accounts\Services\GeneratesEmailVerificationAttempt;
use App\Classes\Modules\Accounts\Services\InvalidatesActiveEmailVerificationAttempts;
use App\Models\User;
class GenerateEmailVerificationAttemptProcessor
{
/** @var InvalidatesActiveEmailVerificationAttempts */
private $invalidatesActiveEmailVerificationAttempts;
/** @var GeneratesEmailVerificationAttempt */
private $generatesEmailVerificationAttempt;
/** @var EmailVerificationAttemptExpiration */
private $emailVerificationAttemptExpiration;
/** @var SendUserVerificationEmail */
private $sendUserVerificationEmail;
/**
* GenerateEmailVerificationAttemptProcessor constructor.
* @param InvalidatesActiveEmailVerificationAttempts $invalidatesActiveEmailVerificationAttempts
* @param GeneratesEmailVerificationAttempt $generatesEmailVerificationAttempt
* @param EmailVerificationAttemptExpiration $emailVerificationAttemptExpiration
* @param SendUserVerificationEmail $sendUserVerificationEmail
*/
public function __construct(InvalidatesActiveEmailVerificationAttempts $invalidatesActiveEmailVerificationAttempts, GeneratesEmailVerificationAttempt $generatesEmailVerificationAttempt, EmailVerificationAttemptExpiration $emailVerificationAttemptExpiration, SendUserVerificationEmail $sendUserVerificationEmail)
{
$this->invalidatesActiveEmailVerificationAttempts = $invalidatesActiveEmailVerificationAttempts;
$this->generatesEmailVerificationAttempt = $generatesEmailVerificationAttempt;
$this->emailVerificationAttemptExpiration = $emailVerificationAttemptExpiration;
$this->sendUserVerificationEmail = $sendUserVerificationEmail;
}
/**
* @param User $user
* @return void
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(User $user) {
$this->invalidatesActiveEmailVerificationAttempts->execute($user);
$attempt = $this->generatesEmailVerificationAttempt->execute($user);
$this->emailVerificationAttemptExpiration::dispatch($attempt)->delay(now()->addHours(48));
$this->sendUserVerificationEmail::dispatch($user, $attempt);
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Accounts\Processors;
use App\Classes\Modules\Accounts\Services\GeneratesAuthenticationToken;
use App\Classes\Modules\Accounts\Services\InvalidatesAuthenticationToken;
use App\Models\User;
class RefreshAuthenticationTokenProcessor
{
/** @var InvalidatesAuthenticationToken */
private $invalidatesAuthenticationToken;
/** @var GeneratesAuthenticationToken */
private $generatesAuthenticationToken;
/**
* RefreshAuthenticationTokenLogic constructor.
* @param InvalidatesAuthenticationToken $invalidatesAuthenticationToken
* @param GeneratesAuthenticationToken $generatesAuthenticationToken
*/
public function __construct(InvalidatesAuthenticationToken $invalidatesAuthenticationToken, GeneratesAuthenticationToken $generatesAuthenticationToken)
{
$this->invalidatesAuthenticationToken = $invalidatesAuthenticationToken;
$this->generatesAuthenticationToken = $generatesAuthenticationToken;
}
/**
* @param User $user
* @return array
* @throws \App\Classes\Exceptions\InternalServerErrorException
*/
public function execute(User $user): array {
$this->invalidatesAuthenticationToken->execute();
return ['refresh_token' => $this->generatesAuthenticationToken->execute($user)];
}
}