Skip to content

Commit

Permalink
Added payload field to Token, will be able to store different informa…
Browse files Browse the repository at this point in the history
…tion for each token (#10)
  • Loading branch information
yann-eugone authored Apr 2, 2017
1 parent 2b30712 commit 0563c6a
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 13 deletions.
26 changes: 24 additions & 2 deletions Entity/Token.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ class Token
*/
private $purpose;

/**
* @var array
*/
private $payload = [];

/**
* @var DateTime
*/
Expand Down Expand Up @@ -65,16 +70,25 @@ class Token
* @param string $value
* @param string $purpose
* @param string $duration
* @param array $payload
* @param array $information
*/
public function __construct($userClass, $userId, $value, $purpose, $duration, array $information)
{
public function __construct(
$userClass,
$userId,
$value,
$purpose,
$duration,
array $payload = [],
array $information = []
) {
$this->userClass = $userClass;
$this->userId = $userId;
$this->value = $value;
$this->purpose = $purpose;
$this->createdAt = new DateTime();
$this->expiresAt = (new DateTime())->modify($duration);
$this->payload = $payload;
$this->createdInformation = $information;
}

Expand Down Expand Up @@ -118,6 +132,14 @@ public function getPurpose()
return $this->purpose;
}

/**
* @return array
*/
public function getPayload()
{
return $this->payload;
}

/**
* @return DateTime
*/
Expand Down
3 changes: 2 additions & 1 deletion Factory/TokenFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public function __construct(
/**
* @inheritdoc
*/
public function create($user, $purpose)
public function create($user, $purpose, array $payload = [])
{
$configuration = $this->registry->get($purpose);

Expand All @@ -55,6 +55,7 @@ public function create($user, $purpose)
$configuration->getGenerator()->generate(),
$purpose,
$configuration->getDuration(),
$payload,
$this->informationGuesser->get()
);
}
Expand Down
3 changes: 2 additions & 1 deletion Factory/TokenFactoryInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ interface TokenFactoryInterface
/**
* @param mixed $user
* @param string $purpose
* @param array $payload
*
* @return Token
*/
public function create($user, $purpose);
public function create($user, $purpose, array $payload = []);
}
4 changes: 2 additions & 2 deletions Manager/TokenManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ public function get($purpose, $value)
/**
* @inheritdoc
*/
public function create($purpose, $user)
public function create($purpose, $user, array $payload = [])
{
do {
$token = $this->factory->create($user, $purpose);
$token = $this->factory->create($user, $purpose, $payload);
} while ($this->repository->exists($token->getValue(), $purpose));

$this->repository->create($token);
Expand Down
3 changes: 2 additions & 1 deletion Manager/TokenManagerInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,11 @@ public function get($purpose, $value);
/**
* @param string $purpose
* @param mixed $user
* @param array $payload
*
* @return Token
*/
public function create($purpose, $user);
public function create($purpose, $user, array $payload = []);

/**
* @param Token $token
Expand Down
1 change: 1 addition & 0 deletions Resources/config/doctrine/Token.orm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
<field name="userId" column="user_id" type="string" nullable="false" length="255"/>
<field name="value" column="value" type="string" nullable="false" length="255"/>
<field name="purpose" column="purpose" type="string" nullable="false" length="255"/>
<field name="payload" column="payload" type="json_array" nullable="false" />
<field name="createdAt" column="created_at" type="datetime" nullable="false" />
<field name="createdInformation" column="created_information" type="json_array" nullable="false" />
<field name="expiresAt" column="expires_at" type="datetime" nullable="false" />
Expand Down
4 changes: 3 additions & 1 deletion Tests/Factory/TokenFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,19 +99,21 @@ public function it_create_token_according_to_configuration()
self::assertSame('u1', $token1->getUserId());
self::assertSame(['some', 'precious', 'information'], $token1->getCreatedInformation());
self::assertSame('test-1', $token1->getPurpose());
self::assertSame([], $token1->getPayload());
self::assertSame('uniquetoken-1', $token1->getValue());
self::assertInstanceOf(DateTime::class, $token1->getCreatedAt());
self::assertInstanceOf(DateTime::class, $token1->getExpiresAt());
self::assertNull($token1->getUsedAt());
self::assertNull($token1->getUsedInformation());

$token2 = $this->factory($configuration)->create($user2, 'test-2');
$token2 = $this->factory($configuration)->create($user2, 'test-2', ['payload', 'information']);

self::assertInstanceOf(Token::class, $token2);
self::assertSame('string', $token2->getUserClass());
self::assertSame('u2', $token2->getUserId());
self::assertSame(['some', 'precious', 'information'], $token2->getCreatedInformation());
self::assertSame('test-2', $token2->getPurpose());
self::assertSame(['payload', 'information'], $token2->getPayload());
self::assertSame('uniquetoken-2', $token2->getValue());
self::assertInstanceOf(DateTime::class, $token2->getCreatedAt());
self::assertInstanceOf(DateTime::class, $token2->getExpiresAt());
Expand Down
26 changes: 21 additions & 5 deletions Tests/Manager/TokenManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,28 @@ public function it_get_token_from_repository()
*/
public function it_create_unique_token()
{
$token1 = new Token('string', 'jdoe','unique-token-1', 'reset-password', '+1 day', []);
$token2 = new Token('string', 'jdoe','unique-token-2', 'reset-password', '+1 day', []);
$token1 = new Token(
'string',
'jdoe',
'unique-token-1',
'reset-password',
'+1 day',
['payload', 'information'],
[]
);
$token2 = new Token(
'string',
'jdoe',
'unique-token-2',
'reset-password',
'+1 day',
['payload', 'information'],
['created', 'information']
);

$this->factory->expects($this->exactly(2))
->method('create')
->will($this->onConsecutiveCalls($token1, $token2));
->method('create')
->will($this->onConsecutiveCalls($token1, $token2));

$this->repository->exists('unique-token-1', 'forgot_password')
->shouldBeCalledTimes(1)
Expand All @@ -101,7 +117,7 @@ public function it_create_unique_token()
$this->repository->create($token2)
->shouldBeCalledTimes(1);

$token = $this->manager()->create('forgot_password', 'john-doe');
$token = $this->manager()->create('forgot_password', 'john-doe', ['payload', 'information']);

self::assertSame($token2, $token);
}
Expand Down

0 comments on commit 0563c6a

Please sign in to comment.