/**
* @param string $context
* @param SecurityContextConfiguration $configuration
* @return Security
*/
public function create($context, SecurityContextConfiguration $configuration)
{
$persistences = $this->repositories->createPersistenceRepository($context);
$roles = $this->repositories->createRoleRepository($context);
$users = $this->repositories->createUserRepository($context, $persistences, $roles);
$sentinel = new Sentinel($persistences, $users, $roles, $this->repositories->createActivationRepository($context), $this->container->make(Dispatcher::class));
foreach ($configuration->listCheckpoints() as $key => $checkpoint) {
$sentinel->addCheckpoint($key, $this->makeCheckpoint($checkpoint, $configuration));
}
$sentinel->setReminderRepository($this->repositories->createReminderRepository($context, $users));
$sentinel->setRequestCredentials(function () {
$request = $this->container->make('request');
$login = $request->getUser();
$password = $request->getPassword();
if ($login === null && $password === null) {
return;
}
return compact('login', 'password');
});
$sentinel->creatingBasicResponse(function () {
$headers = ['WWW-Authenticate' => 'Basic'];
return new Response('Invalid credentials.', 401, $headers);
});
$security = new Security($sentinel, $this->repositories->createPermissionRepository($context));
$this->bindUrlGenerator($security);
$security->setLoginRoute($configuration->getLoginRoute());
return $security;
}