Loading config/module.config.php +6 −4 Original line number Diff line number Diff line Loading @@ -4,12 +4,14 @@ namespace UnicaenAuthToken; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain; use Doctrine\ORM\Mapping\Driver\XmlDriver; use UnicaenAuth\Entity\Db\User; use UnicaenAuth\Guard\PrivilegeController; use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider; use UnicaenAuthToken\Authentication\Adapter\TokenAdapter; use UnicaenAuthToken\Authentication\Adapter\TokenAdapterFactory; use UnicaenAuthToken\Controller\TokenController; use UnicaenAuthToken\Controller\TokenControllerFactory; use UnicaenAuthToken\Entity\Db\AbstractUserToken; use UnicaenAuthToken\Entity\Db\UserToken; use UnicaenAuthToken\Form\TokenLoginForm; use UnicaenAuthToken\Form\TokenLoginFormFactory; Loading @@ -30,7 +32,7 @@ use Zend\Router\Http\Segment; return [ 'unicaen-auth-token' => [ /** * Classe d'entité Doctrine mappant un jeton utilistauer en base de données. * Classe d'entité Doctrine mappant un jeton utilisateur en base de données. */ 'user_token_entity_class' => UserToken::class, ], Loading Loading @@ -80,7 +82,7 @@ return [ 'bjyauthorize' => [ 'resource_providers' => [ 'BjyAuthorize\Provider\Resource\Config' => [ UserToken::RESOURCE_ID => [], AbstractUserToken::RESOURCE_ID => [], ], ], 'rule_providers' => [ Loading @@ -94,7 +96,7 @@ return [ TokenPrivilege::PROLONGER, TokenPrivilege::TESTER, ], 'resources' => UserToken::RESOURCE_ID, 'resources' => AbstractUserToken::RESOURCE_ID, ], ], ], Loading Loading @@ -204,7 +206,7 @@ return [ 'creer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/creer[/:username]', 'route' => '/creer[/:user]', 'defaults' => [ 'action' => 'creer', ], Loading config/unicaen-auth-token.global.php.dist +1 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace UnicaenAuthToken; use UnicaenAuth\Entity\Db\User; use UnicaenAuthToken\Entity\Db\UserToken; return [ Loading src/UnicaenAuthToken/Controller/TokenController.php +25 −23 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ use InvalidArgumentException; use UnicaenAuth\Controller\AuthController; use UnicaenAuth\Entity\Db\UserInterface; use UnicaenAuth\Service\Traits\UserServiceAwareTrait; use UnicaenAuthToken\Entity\Db\UserToken; use UnicaenAuthToken\Entity\Db\AbstractUserToken; use UnicaenAuthToken\Form\UserTokenForm; use UnicaenAuthToken\Service\TokenServiceAwareTrait; use UnicaenAuthToken\Service\TokenServiceException; Loading Loading @@ -55,18 +55,24 @@ class TokenController extends AbstractActionController $redirect = $this->params()->fromQuery('redirect', 'unicaen-auth-token/token'); $userId = $this->params('user'); if ($userId !== null && $userToken = $this->tokenService->findUserTokenByUserId($userId)) { try { $userToken = $this->tokenService->createUserToken(); } catch (TokenServiceException $e) { throw new \RuntimeException("Erreur rencontrée lors de la création du jeton", null, $e); } if ($userId !== null) { if ($existingUserToken = $this->tokenService->findUserTokenByUserId($userId)) { throw new InvalidArgumentException(sprintf( "Il existe déjà un jeton pour l'utilisateur %d (date d'expiration : %s).", $userToken->getUserId(), $userToken->getExpiredOnToString() $existingUserToken->getUserId(), $existingUserToken->getExpiredOnToString() )); } $userToken = $this->tokenService->createUserToken(); if ($userId !== null) { $userToken->setUserId($userId); $user = $this->fetchUserById($userId); $userToken->setUser($user); } $this->form->bind($userToken); if ($this->getRequest()->isPost()) { Loading Loading @@ -192,9 +198,9 @@ class TokenController extends AbstractActionController } /** * @return UserToken * @return AbstractUserToken */ private function getRequestedUserToken(): UserToken private function getRequestedUserToken(): AbstractUserToken { $id = $this->params('userToken'); if ($id === null) { Loading @@ -209,25 +215,21 @@ class TokenController extends AbstractActionController return $userToken; } private function getRequestedUser(): ?UserInterface { $userId = $this->params('user'); if ($userId === null) { return null; } return $this->fetchUserById($userId); } /** * @param int $id * @return \UnicaenAuth\Entity\Db\UserInterface */ private function fetchUserById(int $id): UserInterface { /** @var UserInterface $user */ $user = $this->userService->getUserMapper()->findById($id); if ($user === null) { throw new InvalidArgumentException(sprintf("Aucun utilisateur trouvé avec l'id %d.", $id)); } if (! $user instanceof UserInterface) { throw new InvalidArgumentException("L'utilisateur spécifié dans la requête n'est pas de type " . UserInterface::class); throw new InvalidArgumentException(sprintf( "Le service de recherche d'utilisateur doit retourner des instances de type %s.", UserInterface::class )); } return $user; Loading src/UnicaenAuthToken/Entity/Db/AbstractUserToken.php 0 → 100644 +350 −0 Original line number Diff line number Diff line <?php namespace UnicaenAuthToken\Entity\Db; use Application\Constants; use DateTime; use InvalidArgumentException; use UnicaenAuth\Entity\Db\UserInterface; use Zend\Permissions\Acl\Resource\ResourceInterface; abstract class AbstractUserToken implements ResourceInterface { const RESOURCE_ID = 'UserToken'; /** * @var integer */ protected $id; /** * @var string */ protected $token; /** * @var string|null */ protected $action; /** * @var int */ protected $actionsCount; /** * @var int */ protected $actionsMaxCount; /** * @var \DateTime */ protected $createdOn; /** * @var \DateTime */ protected $expiredOn; /** * @var \DateTime */ protected $lastUsedOn; /** * @var int */ protected $userId; /** * @var \UnicaenAuth\Entity\Db\UserInterface */ protected $user; /** * AbstractUserToken constructor. */ public function __construct() { $this->actionsCount = 0; $this->createdOn = new DateTime('now'); $this->actionsMaxCount = 0; // pas de limite $this->expiredOn = new DateTime('+1 week'); } /** * @inheritDoc */ public function getResourceId(): string { return self::RESOURCE_ID; } /** * @return int|null */ public function getId(): ?int { return $this->id; } /** * @return int|null */ public function getUserId(): ?int { return $this->userId; } /** * @param int $userId * @return self */ public function setUserId(int $userId): self { $this->userId = $userId; return $this; } /** * @param \UnicaenAuth\Entity\Db\UserInterface $user * @return self */ public function setUser(UserInterface $user): self { $this->user = $user; $this->userId = $user->getId(); return $this; } /** * @return \UnicaenAuth\Entity\Db\UserInterface|null */ public function getUser(): ?UserInterface { return $this->user; } /** * @return string|null */ public function getUserToString(): ?string { return (string) $this->user; } /** * @return string|null */ public function getToken(): ?string { return $this->token; } /** * @param string $token * @return self */ public function setToken(string $token): self { $this->token = $token; return $this; } /** * @return string|null */ public function getAction(): ?string { return $this->action; } /** * @param string|null $action * @return self */ public function setAction(string $action = null): self { $this->action = $action; return $this; } /** * @return int */ public function getActionsCount(): int { return $this->actionsCount; } /** * @return string */ public function getActionsCountToString(): string { return $this->actionsCount . ' fois'; } /** * @param int $actionsCount * @return self */ public function setActionsCount(int $actionsCount): self { $this->actionsCount = $actionsCount; return $this; } /** * @return self */ public function incrementActionsCount(): self { $this->actionsCount++; return $this; } /** * @return int */ public function getActionsMaxCount(): int { return $this->actionsMaxCount; } /** * @return string */ public function getActionsMaxCountToString(): string { return $this->actionsMaxCount > 0 ? ($this->actionsMaxCount . ' fois') : "Illimité"; } /** * @param int $actionsMaxCount * @return self */ public function setActionsMaxCount(int $actionsMaxCount): self { $this->actionsMaxCount = $actionsMaxCount; return $this; } /** * @return bool */ public function isActionsMaxCountReached(): bool { if ($this->actionsMaxCount <= 0) { return false; } return $this->actionsCount >= $this->actionsMaxCount; } /** * @return \DateTime */ public function getCreatedOn(): DateTime { return $this->createdOn; } /** * @return string */ public function getCreatedOnToString(): string { return $this->createdOn ? $this->createdOn->format(Constants::DATETIME_FORMAT) : ''; } /** * @param \DateTime|null $createdOn null = now * @return self */ public function setCreatedOn(DateTime $createdOn = null): self { $this->createdOn = $createdOn ?: new DateTime('now'); return $this; } /** * @return \DateTime */ public function getExpiredOn(): DateTime { return $this->expiredOn; } /** * @return string */ public function getExpiredOnToString(): string { return $this->expiredOn ? $this->expiredOn->format(Constants::DATETIME_FORMAT) : ''; } /** * @return bool */ public function isExpired(): bool { if ($this->expiredOn === null) { return false; } return new DateTime('now') > $this->expiredOn; } /** * @param \DateTime $expiredOn * @return self */ public function setExpiredOn(DateTime $expiredOn): self { $this->expiredOn = $expiredOn; return $this; } /** * @param string $spec Ex: '+1 day', '+1 hour' * @return self */ public function modifyExpiredOn(string $spec): self { $result = $this->expiredOn->modify($spec); if ($result === false) { throw new InvalidArgumentException("Impossible de modifier la date avec ça : " . $spec); } $this->setExpiredOn(clone $result); // nouvelle référence obligatoire return $this; } /** * @return \DateTime|null */ public function getLastUsedOn(): ?DateTime { return $this->lastUsedOn; } /** * @return string */ public function getLastUsedOnToString(): string { return $this->lastUsedOn ? $this->lastUsedOn->format('d/m/Y H:i:s') : ''; } /** * @param \DateTime|null $lastUsedOn null = now * @return self */ public function setLastUsedOn(DateTime $lastUsedOn = null): self { $this->lastUsedOn = $lastUsedOn ?: new DateTime('now'); return $this; } } No newline at end of file src/UnicaenAuthToken/Entity/Db/UserToken.php +34 −344 Original line number Diff line number Diff line Loading @@ -2,349 +2,39 @@ namespace UnicaenAuthToken\Entity\Db; use Application\Constants; use DateTime; use InvalidArgumentException; use UnicaenAuth\Entity\Db\UserInterface; use Zend\Permissions\Acl\Resource\ResourceInterface; class UserToken implements ResourceInterface { const RESOURCE_ID = 'UserToken'; /** * @var integer */ protected $id; /** * @var string */ protected $token; /** * @var string|null */ protected $action; /** * @var int */ protected $actionsCount; /** * @var int */ protected $actionsMaxCount; /** * @var \DateTime */ protected $createdOn; /** * @var \DateTime */ protected $expiredOn; /** * @var \DateTime */ protected $lastUsedOn; /** * @var int */ protected $userId; /** * @var UserInterface */ protected $user; // Attention, non mappé ! /** * UserToken constructor. */ public function __construct() { $this->actionsCount = 0; $this->createdOn = new DateTime('now'); $this->actionsMaxCount = 0; // pas de limite $this->expiredOn = new DateTime('+1 week'); } /** * @inheritDoc */ public function getResourceId(): string { return self::RESOURCE_ID; } /** * @return int|null */ public function getId(): ?int { return $this->id; } /** * @return int|null */ public function getUserId(): ?int { return $this->userId; } /** * @param int $userId * @return self */ public function setUserId(int $userId): self { $this->userId = $userId; return $this; } /** * @param \UnicaenAuth\Entity\Db\UserInterface $user * @return self */ public function setUser(UserInterface $user): self { $this->user = $user; $this->setUserId($user->getId()); return $this; } /** * @return \UnicaenAuth\Entity\Db\UserInterface */ public function getUser(): ?UserInterface { return $this->user; } /** * @return string|null */ public function getUserToString(): ?string { return (string) $this->user; } /** * @return string|null */ public function getToken(): ?string { return $this->token; } /** * @param string $token * @return self */ public function setToken(string $token): self { $this->token = $token; return $this; } /** * @return string|null */ public function getAction(): ?string { return $this->action; } /** * @param string|null $action * @return self */ public function setAction(string $action = null): self { $this->action = $action; return $this; } /** * @return int */ public function getActionsCount(): int { return $this->actionsCount; } /** * @return string */ public function getActionsCountToString(): string { return $this->actionsCount . ' fois'; } /** * @param int $actionsCount * @return self */ public function setActionsCount(int $actionsCount): self { $this->actionsCount = $actionsCount; return $this; } /** * @return self */ public function incrementActionsCount(): self { $this->actionsCount++; return $this; } /** * @return int */ public function getActionsMaxCount(): int { return $this->actionsMaxCount; } /** * @return string */ public function getActionsMaxCountToString(): string { return $this->actionsMaxCount > 0 ? ($this->actionsMaxCount . ' fois') : "Illimité"; } /** * @param int $actionsMaxCount * @return self */ public function setActionsMaxCount(int $actionsMaxCount): self { $this->actionsMaxCount = $actionsMaxCount; return $this; } /** * @return bool */ public function isActionsMaxCountReached(): bool { if ($this->actionsMaxCount <= 0) { return false; } return $this->actionsCount >= $this->actionsMaxCount; } /** * @return \DateTime */ public function getCreatedOn(): DateTime { return $this->createdOn; } /** * @return string */ public function getCreatedOnToString(): string { return $this->createdOn ? $this->createdOn->format(Constants::DATETIME_FORMAT) : ''; } /** * @param \DateTime|null $createdOn null = now * @return self */ public function setCreatedOn(DateTime $createdOn = null): self { $this->createdOn = $createdOn ?: new DateTime('now'); return $this; } /** * @return \DateTime */ public function getExpiredOn(): DateTime { return $this->expiredOn; } /** * @return string */ public function getExpiredOnToString(): string { return $this->expiredOn ? $this->expiredOn->format(Constants::DATETIME_FORMAT) : ''; } /** * @return bool */ public function isExpired(): bool { if ($this->expiredOn === null) { return false; } return new DateTime('now') > $this->expiredOn; } /** * @param \DateTime $expiredOn * @return self */ public function setExpiredOn(DateTime $expiredOn): self { $this->expiredOn = $expiredOn; return $this; } /** * @param string $spec Ex: '+1 day', '+1 hour' * @return self */ public function modifyExpiredOn(string $spec): self { $result = $this->expiredOn->modify($spec); if ($result === false) { throw new InvalidArgumentException("Impossible de modifier la date avec ça : " . $spec); } $this->setExpiredOn(clone $result); // nouvelle référence obligatoire return $this; } /** * @return \DateTime|null */ public function getLastUsedOn(): ?DateTime { return $this->lastUsedOn; } /** * @return string */ public function getLastUsedOnToString(): string { return $this->lastUsedOn ? $this->lastUsedOn->format('d/m/Y H:i:s') : ''; } /** * @param \DateTime|null $lastUsedOn null = now * @return self */ public function setLastUsedOn(DateTime $lastUsedOn = null): self { $this->lastUsedOn = $lastUsedOn ?: new DateTime('now'); return $this; } class UserToken extends AbstractUserToken { // /** // * @var int // */ // protected $userId; // // /** // * @return int|null // */ // public function getUserId(): ?int // { // return $this->userId; // } // // /** // * @param int $userId // * @return self // */ // public function setUserId(int $userId): self // { // $this->userId = $userId; // return $this; // } // // /** // * @inheritDoc // */ // public function setUser($user): self // { // parent::setUser($user); // $this->userId = $user->getId(); // // return $this; // } } No newline at end of file Loading
config/module.config.php +6 −4 Original line number Diff line number Diff line Loading @@ -4,12 +4,14 @@ namespace UnicaenAuthToken; use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain; use Doctrine\ORM\Mapping\Driver\XmlDriver; use UnicaenAuth\Entity\Db\User; use UnicaenAuth\Guard\PrivilegeController; use UnicaenAuth\Provider\Rule\PrivilegeRuleProvider; use UnicaenAuthToken\Authentication\Adapter\TokenAdapter; use UnicaenAuthToken\Authentication\Adapter\TokenAdapterFactory; use UnicaenAuthToken\Controller\TokenController; use UnicaenAuthToken\Controller\TokenControllerFactory; use UnicaenAuthToken\Entity\Db\AbstractUserToken; use UnicaenAuthToken\Entity\Db\UserToken; use UnicaenAuthToken\Form\TokenLoginForm; use UnicaenAuthToken\Form\TokenLoginFormFactory; Loading @@ -30,7 +32,7 @@ use Zend\Router\Http\Segment; return [ 'unicaen-auth-token' => [ /** * Classe d'entité Doctrine mappant un jeton utilistauer en base de données. * Classe d'entité Doctrine mappant un jeton utilisateur en base de données. */ 'user_token_entity_class' => UserToken::class, ], Loading Loading @@ -80,7 +82,7 @@ return [ 'bjyauthorize' => [ 'resource_providers' => [ 'BjyAuthorize\Provider\Resource\Config' => [ UserToken::RESOURCE_ID => [], AbstractUserToken::RESOURCE_ID => [], ], ], 'rule_providers' => [ Loading @@ -94,7 +96,7 @@ return [ TokenPrivilege::PROLONGER, TokenPrivilege::TESTER, ], 'resources' => UserToken::RESOURCE_ID, 'resources' => AbstractUserToken::RESOURCE_ID, ], ], ], Loading Loading @@ -204,7 +206,7 @@ return [ 'creer' => [ 'type' => Segment::class, 'options' => [ 'route' => '/creer[/:username]', 'route' => '/creer[/:user]', 'defaults' => [ 'action' => 'creer', ], Loading
config/unicaen-auth-token.global.php.dist +1 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ namespace UnicaenAuthToken; use UnicaenAuth\Entity\Db\User; use UnicaenAuthToken\Entity\Db\UserToken; return [ Loading
src/UnicaenAuthToken/Controller/TokenController.php +25 −23 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ use InvalidArgumentException; use UnicaenAuth\Controller\AuthController; use UnicaenAuth\Entity\Db\UserInterface; use UnicaenAuth\Service\Traits\UserServiceAwareTrait; use UnicaenAuthToken\Entity\Db\UserToken; use UnicaenAuthToken\Entity\Db\AbstractUserToken; use UnicaenAuthToken\Form\UserTokenForm; use UnicaenAuthToken\Service\TokenServiceAwareTrait; use UnicaenAuthToken\Service\TokenServiceException; Loading Loading @@ -55,18 +55,24 @@ class TokenController extends AbstractActionController $redirect = $this->params()->fromQuery('redirect', 'unicaen-auth-token/token'); $userId = $this->params('user'); if ($userId !== null && $userToken = $this->tokenService->findUserTokenByUserId($userId)) { try { $userToken = $this->tokenService->createUserToken(); } catch (TokenServiceException $e) { throw new \RuntimeException("Erreur rencontrée lors de la création du jeton", null, $e); } if ($userId !== null) { if ($existingUserToken = $this->tokenService->findUserTokenByUserId($userId)) { throw new InvalidArgumentException(sprintf( "Il existe déjà un jeton pour l'utilisateur %d (date d'expiration : %s).", $userToken->getUserId(), $userToken->getExpiredOnToString() $existingUserToken->getUserId(), $existingUserToken->getExpiredOnToString() )); } $userToken = $this->tokenService->createUserToken(); if ($userId !== null) { $userToken->setUserId($userId); $user = $this->fetchUserById($userId); $userToken->setUser($user); } $this->form->bind($userToken); if ($this->getRequest()->isPost()) { Loading Loading @@ -192,9 +198,9 @@ class TokenController extends AbstractActionController } /** * @return UserToken * @return AbstractUserToken */ private function getRequestedUserToken(): UserToken private function getRequestedUserToken(): AbstractUserToken { $id = $this->params('userToken'); if ($id === null) { Loading @@ -209,25 +215,21 @@ class TokenController extends AbstractActionController return $userToken; } private function getRequestedUser(): ?UserInterface { $userId = $this->params('user'); if ($userId === null) { return null; } return $this->fetchUserById($userId); } /** * @param int $id * @return \UnicaenAuth\Entity\Db\UserInterface */ private function fetchUserById(int $id): UserInterface { /** @var UserInterface $user */ $user = $this->userService->getUserMapper()->findById($id); if ($user === null) { throw new InvalidArgumentException(sprintf("Aucun utilisateur trouvé avec l'id %d.", $id)); } if (! $user instanceof UserInterface) { throw new InvalidArgumentException("L'utilisateur spécifié dans la requête n'est pas de type " . UserInterface::class); throw new InvalidArgumentException(sprintf( "Le service de recherche d'utilisateur doit retourner des instances de type %s.", UserInterface::class )); } return $user; Loading
src/UnicaenAuthToken/Entity/Db/AbstractUserToken.php 0 → 100644 +350 −0 Original line number Diff line number Diff line <?php namespace UnicaenAuthToken\Entity\Db; use Application\Constants; use DateTime; use InvalidArgumentException; use UnicaenAuth\Entity\Db\UserInterface; use Zend\Permissions\Acl\Resource\ResourceInterface; abstract class AbstractUserToken implements ResourceInterface { const RESOURCE_ID = 'UserToken'; /** * @var integer */ protected $id; /** * @var string */ protected $token; /** * @var string|null */ protected $action; /** * @var int */ protected $actionsCount; /** * @var int */ protected $actionsMaxCount; /** * @var \DateTime */ protected $createdOn; /** * @var \DateTime */ protected $expiredOn; /** * @var \DateTime */ protected $lastUsedOn; /** * @var int */ protected $userId; /** * @var \UnicaenAuth\Entity\Db\UserInterface */ protected $user; /** * AbstractUserToken constructor. */ public function __construct() { $this->actionsCount = 0; $this->createdOn = new DateTime('now'); $this->actionsMaxCount = 0; // pas de limite $this->expiredOn = new DateTime('+1 week'); } /** * @inheritDoc */ public function getResourceId(): string { return self::RESOURCE_ID; } /** * @return int|null */ public function getId(): ?int { return $this->id; } /** * @return int|null */ public function getUserId(): ?int { return $this->userId; } /** * @param int $userId * @return self */ public function setUserId(int $userId): self { $this->userId = $userId; return $this; } /** * @param \UnicaenAuth\Entity\Db\UserInterface $user * @return self */ public function setUser(UserInterface $user): self { $this->user = $user; $this->userId = $user->getId(); return $this; } /** * @return \UnicaenAuth\Entity\Db\UserInterface|null */ public function getUser(): ?UserInterface { return $this->user; } /** * @return string|null */ public function getUserToString(): ?string { return (string) $this->user; } /** * @return string|null */ public function getToken(): ?string { return $this->token; } /** * @param string $token * @return self */ public function setToken(string $token): self { $this->token = $token; return $this; } /** * @return string|null */ public function getAction(): ?string { return $this->action; } /** * @param string|null $action * @return self */ public function setAction(string $action = null): self { $this->action = $action; return $this; } /** * @return int */ public function getActionsCount(): int { return $this->actionsCount; } /** * @return string */ public function getActionsCountToString(): string { return $this->actionsCount . ' fois'; } /** * @param int $actionsCount * @return self */ public function setActionsCount(int $actionsCount): self { $this->actionsCount = $actionsCount; return $this; } /** * @return self */ public function incrementActionsCount(): self { $this->actionsCount++; return $this; } /** * @return int */ public function getActionsMaxCount(): int { return $this->actionsMaxCount; } /** * @return string */ public function getActionsMaxCountToString(): string { return $this->actionsMaxCount > 0 ? ($this->actionsMaxCount . ' fois') : "Illimité"; } /** * @param int $actionsMaxCount * @return self */ public function setActionsMaxCount(int $actionsMaxCount): self { $this->actionsMaxCount = $actionsMaxCount; return $this; } /** * @return bool */ public function isActionsMaxCountReached(): bool { if ($this->actionsMaxCount <= 0) { return false; } return $this->actionsCount >= $this->actionsMaxCount; } /** * @return \DateTime */ public function getCreatedOn(): DateTime { return $this->createdOn; } /** * @return string */ public function getCreatedOnToString(): string { return $this->createdOn ? $this->createdOn->format(Constants::DATETIME_FORMAT) : ''; } /** * @param \DateTime|null $createdOn null = now * @return self */ public function setCreatedOn(DateTime $createdOn = null): self { $this->createdOn = $createdOn ?: new DateTime('now'); return $this; } /** * @return \DateTime */ public function getExpiredOn(): DateTime { return $this->expiredOn; } /** * @return string */ public function getExpiredOnToString(): string { return $this->expiredOn ? $this->expiredOn->format(Constants::DATETIME_FORMAT) : ''; } /** * @return bool */ public function isExpired(): bool { if ($this->expiredOn === null) { return false; } return new DateTime('now') > $this->expiredOn; } /** * @param \DateTime $expiredOn * @return self */ public function setExpiredOn(DateTime $expiredOn): self { $this->expiredOn = $expiredOn; return $this; } /** * @param string $spec Ex: '+1 day', '+1 hour' * @return self */ public function modifyExpiredOn(string $spec): self { $result = $this->expiredOn->modify($spec); if ($result === false) { throw new InvalidArgumentException("Impossible de modifier la date avec ça : " . $spec); } $this->setExpiredOn(clone $result); // nouvelle référence obligatoire return $this; } /** * @return \DateTime|null */ public function getLastUsedOn(): ?DateTime { return $this->lastUsedOn; } /** * @return string */ public function getLastUsedOnToString(): string { return $this->lastUsedOn ? $this->lastUsedOn->format('d/m/Y H:i:s') : ''; } /** * @param \DateTime|null $lastUsedOn null = now * @return self */ public function setLastUsedOn(DateTime $lastUsedOn = null): self { $this->lastUsedOn = $lastUsedOn ?: new DateTime('now'); return $this; } } No newline at end of file
src/UnicaenAuthToken/Entity/Db/UserToken.php +34 −344 Original line number Diff line number Diff line Loading @@ -2,349 +2,39 @@ namespace UnicaenAuthToken\Entity\Db; use Application\Constants; use DateTime; use InvalidArgumentException; use UnicaenAuth\Entity\Db\UserInterface; use Zend\Permissions\Acl\Resource\ResourceInterface; class UserToken implements ResourceInterface { const RESOURCE_ID = 'UserToken'; /** * @var integer */ protected $id; /** * @var string */ protected $token; /** * @var string|null */ protected $action; /** * @var int */ protected $actionsCount; /** * @var int */ protected $actionsMaxCount; /** * @var \DateTime */ protected $createdOn; /** * @var \DateTime */ protected $expiredOn; /** * @var \DateTime */ protected $lastUsedOn; /** * @var int */ protected $userId; /** * @var UserInterface */ protected $user; // Attention, non mappé ! /** * UserToken constructor. */ public function __construct() { $this->actionsCount = 0; $this->createdOn = new DateTime('now'); $this->actionsMaxCount = 0; // pas de limite $this->expiredOn = new DateTime('+1 week'); } /** * @inheritDoc */ public function getResourceId(): string { return self::RESOURCE_ID; } /** * @return int|null */ public function getId(): ?int { return $this->id; } /** * @return int|null */ public function getUserId(): ?int { return $this->userId; } /** * @param int $userId * @return self */ public function setUserId(int $userId): self { $this->userId = $userId; return $this; } /** * @param \UnicaenAuth\Entity\Db\UserInterface $user * @return self */ public function setUser(UserInterface $user): self { $this->user = $user; $this->setUserId($user->getId()); return $this; } /** * @return \UnicaenAuth\Entity\Db\UserInterface */ public function getUser(): ?UserInterface { return $this->user; } /** * @return string|null */ public function getUserToString(): ?string { return (string) $this->user; } /** * @return string|null */ public function getToken(): ?string { return $this->token; } /** * @param string $token * @return self */ public function setToken(string $token): self { $this->token = $token; return $this; } /** * @return string|null */ public function getAction(): ?string { return $this->action; } /** * @param string|null $action * @return self */ public function setAction(string $action = null): self { $this->action = $action; return $this; } /** * @return int */ public function getActionsCount(): int { return $this->actionsCount; } /** * @return string */ public function getActionsCountToString(): string { return $this->actionsCount . ' fois'; } /** * @param int $actionsCount * @return self */ public function setActionsCount(int $actionsCount): self { $this->actionsCount = $actionsCount; return $this; } /** * @return self */ public function incrementActionsCount(): self { $this->actionsCount++; return $this; } /** * @return int */ public function getActionsMaxCount(): int { return $this->actionsMaxCount; } /** * @return string */ public function getActionsMaxCountToString(): string { return $this->actionsMaxCount > 0 ? ($this->actionsMaxCount . ' fois') : "Illimité"; } /** * @param int $actionsMaxCount * @return self */ public function setActionsMaxCount(int $actionsMaxCount): self { $this->actionsMaxCount = $actionsMaxCount; return $this; } /** * @return bool */ public function isActionsMaxCountReached(): bool { if ($this->actionsMaxCount <= 0) { return false; } return $this->actionsCount >= $this->actionsMaxCount; } /** * @return \DateTime */ public function getCreatedOn(): DateTime { return $this->createdOn; } /** * @return string */ public function getCreatedOnToString(): string { return $this->createdOn ? $this->createdOn->format(Constants::DATETIME_FORMAT) : ''; } /** * @param \DateTime|null $createdOn null = now * @return self */ public function setCreatedOn(DateTime $createdOn = null): self { $this->createdOn = $createdOn ?: new DateTime('now'); return $this; } /** * @return \DateTime */ public function getExpiredOn(): DateTime { return $this->expiredOn; } /** * @return string */ public function getExpiredOnToString(): string { return $this->expiredOn ? $this->expiredOn->format(Constants::DATETIME_FORMAT) : ''; } /** * @return bool */ public function isExpired(): bool { if ($this->expiredOn === null) { return false; } return new DateTime('now') > $this->expiredOn; } /** * @param \DateTime $expiredOn * @return self */ public function setExpiredOn(DateTime $expiredOn): self { $this->expiredOn = $expiredOn; return $this; } /** * @param string $spec Ex: '+1 day', '+1 hour' * @return self */ public function modifyExpiredOn(string $spec): self { $result = $this->expiredOn->modify($spec); if ($result === false) { throw new InvalidArgumentException("Impossible de modifier la date avec ça : " . $spec); } $this->setExpiredOn(clone $result); // nouvelle référence obligatoire return $this; } /** * @return \DateTime|null */ public function getLastUsedOn(): ?DateTime { return $this->lastUsedOn; } /** * @return string */ public function getLastUsedOnToString(): string { return $this->lastUsedOn ? $this->lastUsedOn->format('d/m/Y H:i:s') : ''; } /** * @param \DateTime|null $lastUsedOn null = now * @return self */ public function setLastUsedOn(DateTime $lastUsedOn = null): self { $this->lastUsedOn = $lastUsedOn ?: new DateTime('now'); return $this; } class UserToken extends AbstractUserToken { // /** // * @var int // */ // protected $userId; // // /** // * @return int|null // */ // public function getUserId(): ?int // { // return $this->userId; // } // // /** // * @param int $userId // * @return self // */ // public function setUserId(int $userId): self // { // $this->userId = $userId; // return $this; // } // // /** // * @inheritDoc // */ // public function setUser($user): self // { // parent::setUser($user); // $this->userId = $user->getId(); // // return $this; // } } No newline at end of file