partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit 083c3862334dbdbdf0ca05c802f221a065917cae
parent a5209d9be97d99358f3ab4bf434ae8fbee06e47f
Author: Felicitus <felicitus@felicitus.org>
Date:   Mon, 12 Oct 2015 13:13:26 +0200

Added legacy user provider to authenticate existing users w/ md5 hashes

Diffstat:
Mapp/config/config_partkeepr.yml | 5+++++
Msrc/PartKeepr/AuthBundle/Entity/User.php | 54+++++++++++++++++++++++++++++++++++++++++++++++-------
Asrc/PartKeepr/AuthBundle/Security/User/LegacyUserProvider.php | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 105 insertions(+), 7 deletions(-)

diff --git a/app/config/config_partkeepr.yml b/app/config/config_partkeepr.yml @@ -1,4 +1,9 @@ services: + partkeepr_legacy_user_provider: + class: PartKeepr\AuthBundle\Security\User\LegacyUserProvider + arguments: + - "@doctrine.orm.default_entity_manager" + footprint.category_path_listener: class: PartKeepr\FootprintBundle\Listeners\CategoryPathListener arguments: diff --git a/src/PartKeepr/AuthBundle/Entity/User.php b/src/PartKeepr/AuthBundle/Entity/User.php @@ -4,6 +4,8 @@ namespace PartKeepr\AuthBundle\Entity; use Doctrine\ORM\Mapping as ORM; use PartKeepr\DoctrineReflectionBundle\Annotation\TargetService; use PartKeepr\Util\BaseEntity; +use Symfony\Component\Security\Core\User\EquatableInterface; +use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Validator\Constraints as Assert; @@ -14,7 +16,7 @@ use Symfony\Component\Validator\Constraints as Assert; * uniqueConstraints={@ORM\UniqueConstraint(name="username_provider", columns={"username", "provider_id"})}) * @TargetService(uri="/api/users") */ -class User extends BaseEntity +class User extends BaseEntity implements UserInterface, EquatableInterface { /** * @ORM\Column(length=50) @@ -40,6 +42,13 @@ class User extends BaseEntity private $admin; /** + * Marks a user as a legacy user (=old md5 auth) + * @ORM\Column(type="boolean") + * @var boolean + */ + private $legacy; + + /** * @ORM\Column(type="datetime",nullable=true) */ private $lastSeen; @@ -240,6 +249,22 @@ class User extends BaseEntity } /** + * Returns if the user is a legacy user + * @return bool + */ + public function isLegacy () { + return $this->legacy; + } + + /** + * Marks a user as a legacy user + * @param bool|true $legacy + */ + public function setLegacy ($legacy = true) { + $this->legacy = $legacy; + } + + /** * Retrieve the last seen flag for a user. * * @return \DateTime @@ -249,13 +274,28 @@ class User extends BaseEntity return $this->lastSeen; } - /** - * Unserializes the user. - * - * @param string $serialized - */ - public function unserialize($serialized) + public function getRoles () { + return array(); + } + + public function getSalt () { + return ""; + } + + public function eraseCredentials () { + + } + + public function isEqualTo(UserInterface $user) { + if (!$user instanceof User) { + return false; + } + + if ($this->getUsername() != $user->getUsername()) { + return false; + } + return true; } } diff --git a/src/PartKeepr/AuthBundle/Security/User/LegacyUserProvider.php b/src/PartKeepr/AuthBundle/Security/User/LegacyUserProvider.php @@ -0,0 +1,53 @@ +<?php +namespace PartKeepr\AuthBundle\Security\User; + + +use Doctrine\ORM\EntityManager; +use PartKeepr\AuthBundle\Entity\User; +use Symfony\Component\Security\Core\Exception\UnsupportedUserException; +use Symfony\Component\Security\Core\Exception\UsernameNotFoundException; +use Symfony\Component\Security\Core\User\UserInterface; +use Symfony\Component\Security\Core\User\UserProviderInterface; + +class LegacyUserProvider implements UserProviderInterface +{ + /** + * @var EntityManager + */ + private $entityManager; + + public function __construct (EntityManager $entityManager) { + $this->entityManager = $entityManager; + } + + public function loadUserByUsername($username) + { + $repository = $this->entityManager->getRepository("PartKeepr\\AuthBundle\\Entity\\User"); + + $user = $repository->findOneBy(array("username" => $username, "legacy" => true)); + + if ($user !== null) { + return $user; + } + + throw new UsernameNotFoundException( + sprintf('Username "%s" does not exist.', $username) + ); + } + + public function refreshUser(UserInterface $user) + { + if (!$user instanceof User) { + throw new UnsupportedUserException( + sprintf('Instances of "%s" are not supported.', get_class($user)) + ); + } + + return $this->loadUserByUsername($user->getUsername()); + } + + public function supportsClass($class) + { + return $class === 'PartKeepr\\AuthBundle\\Entity\\User'; + } +}