123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- <?php
-
- namespace Illuminate\Auth\Passwords;
-
- use Illuminate\Support\Str;
- use InvalidArgumentException;
- use Illuminate\Contracts\Auth\PasswordBrokerFactory as FactoryContract;
-
- /**
- * @mixin \Illuminate\Contracts\Auth\PasswordBroker
- */
- class PasswordBrokerManager implements FactoryContract
- {
- /**
- * The application instance.
- *
- * @var \Illuminate\Foundation\Application
- */
- protected $app;
-
- /**
- * The array of created "drivers".
- *
- * @var array
- */
- protected $brokers = [];
-
- /**
- * Create a new PasswordBroker manager instance.
- *
- * @param \Illuminate\Foundation\Application $app
- * @return void
- */
- public function __construct($app)
- {
- $this->app = $app;
- }
-
- /**
- * Attempt to get the broker from the local cache.
- *
- * @param string|null $name
- * @return \Illuminate\Contracts\Auth\PasswordBroker
- */
- public function broker($name = null)
- {
- $name = $name ?: $this->getDefaultDriver();
-
- return isset($this->brokers[$name])
- ? $this->brokers[$name]
- : $this->brokers[$name] = $this->resolve($name);
- }
-
- /**
- * Resolve the given broker.
- *
- * @param string $name
- * @return \Illuminate\Contracts\Auth\PasswordBroker
- *
- * @throws \InvalidArgumentException
- */
- protected function resolve($name)
- {
- $config = $this->getConfig($name);
-
- if (is_null($config)) {
- throw new InvalidArgumentException("Password resetter [{$name}] is not defined.");
- }
-
- // The password broker uses a token repository to validate tokens and send user
- // password e-mails, as well as validating that password reset process as an
- // aggregate service of sorts providing a convenient interface for resets.
- return new PasswordBroker(
- $this->createTokenRepository($config),
- $this->app['auth']->createUserProvider($config['provider'] ?? null)
- );
- }
-
- /**
- * Create a token repository instance based on the given configuration.
- *
- * @param array $config
- * @return \Illuminate\Auth\Passwords\TokenRepositoryInterface
- */
- protected function createTokenRepository(array $config)
- {
- $key = $this->app['config']['app.key'];
-
- if (Str::startsWith($key, 'base64:')) {
- $key = base64_decode(substr($key, 7));
- }
-
- $connection = $config['connection'] ?? null;
-
- return new DatabaseTokenRepository(
- $this->app['db']->connection($connection),
- $this->app['hash'],
- $config['table'],
- $key,
- $config['expire']
- );
- }
-
- /**
- * Get the password broker configuration.
- *
- * @param string $name
- * @return array
- */
- protected function getConfig($name)
- {
- return $this->app['config']["auth.passwords.{$name}"];
- }
-
- /**
- * Get the default password broker name.
- *
- * @return string
- */
- public function getDefaultDriver()
- {
- return $this->app['config']['auth.defaults.passwords'];
- }
-
- /**
- * Set the default password broker name.
- *
- * @param string $name
- * @return void
- */
- public function setDefaultDriver($name)
- {
- $this->app['config']['auth.defaults.passwords'] = $name;
- }
-
- /**
- * Dynamically call the default driver instance.
- *
- * @param string $method
- * @param array $parameters
- * @return mixed
- */
- public function __call($method, $parameters)
- {
- return $this->broker()->{$method}(...$parameters);
- }
- }
|