Path : /var/www/html/thb_loan_system/vendor/cartalyst/sentinel/src/Users/ |
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
Current File : /var/www/html/thb_loan_system/vendor/cartalyst/sentinel/src/Users/IlluminateUserRepository.php |
<?php /* * Part of the Sentinel package. * * NOTICE OF LICENSE * * Licensed under the 3-clause BSD License. * * This source file is subject to the 3-clause BSD License that is * bundled with this package in the LICENSE file. * * @package Sentinel * @version 6.0.0 * @author Cartalyst LLC * @license BSD License (3-clause) * @copyright (c) 2011-2022, Cartalyst LLC * @link https://cartalyst.com */ namespace Cartalyst\Sentinel\Users; use Closure; use Carbon\Carbon; use InvalidArgumentException; use Cartalyst\Support\Traits\EventTrait; use Illuminate\Contracts\Events\Dispatcher; use Cartalyst\Support\Traits\RepositoryTrait; use Cartalyst\Sentinel\Hashing\HasherInterface; class IlluminateUserRepository implements UserRepositoryInterface { use EventTrait, RepositoryTrait; /** * The Hasher instance. * * @var \Cartalyst\Sentinel\Hashing\HasherInterface */ protected $hasher; /** * The User model FQCN. * * @var string */ protected $model = EloquentUser::class; /** * Constructor. * * @param \Cartalyst\Sentinel\Hashing\HasherInterface $hasher * @param \Illuminate\Contracts\Events\Dispatcher $dispatcher * @param string|null $model * * @return void */ public function __construct(HasherInterface $hasher, Dispatcher $dispatcher = null, string $model = null) { $this->hasher = $hasher; $this->dispatcher = $dispatcher; $this->model = $model; } /** * {@inheritdoc} */ public function findById(int $id): ?UserInterface { return $this->createModel()->newQuery()->find($id); } /** * {@inheritdoc} */ public function findByCredentials(array $credentials): ?UserInterface { if (empty($credentials)) { return null; } $instance = $this->createModel(); $loginNames = $instance->getLoginNames(); [$logins] = $this->parseCredentials($credentials, $loginNames); if (empty($logins)) { return null; } $query = $instance->newQuery(); if (is_array($logins)) { foreach ($logins as $key => $value) { $query->where($key, $value); } } else { $query->whereNested(function ($query) use ($loginNames, $logins) { foreach ($loginNames as $index => $name) { $method = $index === 0 ? 'where' : 'orWhere'; $query->{$method}($name, $logins); } }); } return $query->first(); } /** * {@inheritdoc} */ public function findByPersistenceCode(string $code): ?UserInterface { return $this->createModel() ->newQuery() ->whereHas('persistences', function ($q) use ($code) { $q->where('code', $code); }) ->first() ; } /** * {@inheritdoc} */ public function recordLogin(UserInterface $user): bool { $user->last_login = Carbon::now(); return (bool) $user->save(); } /** * {@inheritdoc} */ public function recordLogout(UserInterface $user): bool { return (bool) $user->save(); } /** * {@inheritdoc} */ public function validateCredentials(UserInterface $user, array $credentials): bool { return $this->hasher->check($credentials['password'], $user->password); } /** * {@inheritdoc} */ public function validForCreation(array $credentials): bool { return $this->validateUser($credentials); } /** * {@inheritdoc} */ public function validForUpdate($user, array $credentials): bool { if ($user instanceof UserInterface) { $user = $user->getUserId(); } return $this->validateUser($credentials, $user); } /** * {@inheritdoc} */ public function create(array $credentials, Closure $callback = null): ?UserInterface { $user = $this->createModel(); $this->fireEvent('sentinel.user.creating', compact('user', 'credentials')); $this->fill($user, $credentials); if ($callback) { $result = $callback($user); if ($result === false) { return null; } } $user->save(); $this->fireEvent('sentinel.user.created', compact('user', 'credentials')); return $user; } /** * {@inheritdoc} */ public function update($user, array $credentials): UserInterface { if (! $user instanceof UserInterface) { $user = $this->findById($user); } $this->fireEvent('sentinel.user.updating', compact('user', 'credentials')); $this->fill($user, $credentials); $user->save(); $this->fireEvent('sentinel.user.updated', compact('user', 'credentials')); return $user; } /** * Fills a user with the given credentials, intelligently. * * @param \Cartalyst\Sentinel\Users\UserInterface $user * @param array $credentials * * @return void */ public function fill(UserInterface $user, array $credentials): void { $this->fireEvent('sentinel.user.filling', compact('user', 'credentials')); $loginNames = $user->getLoginNames(); [$logins, $password, $attributes] = $this->parseCredentials($credentials, $loginNames); if (is_array($logins)) { $user->fill($logins); } else { $loginName = reset($loginNames); $user->fill([ $loginName => $logins, ]); } $user->fill($attributes); if (isset($password)) { $password = $this->hasher->hash($password); $user->fill([ 'password' => $password, ]); } $this->fireEvent('sentinel.user.filled', compact('user', 'credentials')); } /** * Returns the hasher instance. * * @return \Cartalyst\Sentinel\Hashing\HasherInterface */ public function getHasher(): HasherInterface { return $this->hasher; } /** * Sets the hasher instance. * * @param \Cartalyst\Sentinel\Hashing\HasherInterface $hasher * * @return void */ public function setHasher(HasherInterface $hasher): void { $this->hasher = $hasher; } /** * Parses the given credentials to return logins, password and others. * * @param array $credentials * @param array $loginNames * * @throws \InvalidArgumentException * * @return array */ protected function parseCredentials(array $credentials, array $loginNames): array { if (isset($credentials['password'])) { $password = $credentials['password']; unset($credentials['password']); } else { $password = null; } $passedNames = array_intersect_key($credentials, array_flip($loginNames)); if (count($passedNames) > 0) { $logins = []; foreach ($passedNames as $name => $value) { $logins[$name] = $credentials[$name]; unset($credentials[$name]); } } elseif (isset($credentials['login'])) { $logins = $credentials['login']; unset($credentials['login']); } else { $logins = []; } return [$logins, $password, $credentials]; } /** * Validates the user. * * @param array $credentials * @param int $id * * @throws \InvalidArgumentException * * @return bool */ protected function validateUser(array $credentials, int $id = null): bool { $instance = $this->createModel(); $loginNames = $instance->getLoginNames(); // We will simply parse credentials which checks logins and passwords [$logins, $password] = $this->parseCredentials($credentials, $loginNames); if ($id === null) { if (empty($logins)) { throw new InvalidArgumentException('No [login] credential was passed.'); } if (empty($password)) { throw new InvalidArgumentException('You have not passed a [password].'); } } return true; } }