62 lines
1.6 KiB
PHP
62 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace Catalyst\APIBundle\Security;
|
|
|
|
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
|
use Symfony\Component\Security\Core\User\UserInterface;
|
|
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
|
|
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
|
|
use Catalyst\APIBundle\Entity\User;
|
|
|
|
class APIKeyUserProvider implements UserProviderInterface
|
|
{
|
|
protected $em;
|
|
|
|
public function __construct(EntityManagerInterface $em)
|
|
{
|
|
$this->em = $em;
|
|
}
|
|
|
|
public function getUserByAPIKey($api_key)
|
|
{
|
|
$user = $this->em->getRepository(User::class)->find($api_key);
|
|
|
|
return $user;
|
|
}
|
|
|
|
public function getUsernameForAPIKey($apiKey)
|
|
{
|
|
// Look up the username based on the token in the database, via
|
|
// an API call, or do something entirely different
|
|
$username = 'test';
|
|
|
|
return $username;
|
|
}
|
|
|
|
public function loadUserByUsername($username)
|
|
{
|
|
return new User(
|
|
$username,
|
|
null,
|
|
// the roles for the user - you may choose to determine
|
|
// these dynamically somehow based on the user
|
|
array('ROLE_API')
|
|
);
|
|
}
|
|
|
|
public function refreshUser(UserInterface $user)
|
|
{
|
|
// this is used for storing authentication in the session
|
|
// but in this example, the token is sent in each request,
|
|
// so authentication can be stateless. Throwing this exception
|
|
// is proper to make things stateless
|
|
throw new UnsupportedUserException();
|
|
}
|
|
|
|
public function supportsClass($class)
|
|
{
|
|
return User::class === $class;
|
|
}
|
|
}
|