This repository was archived by the owner on Jun 9, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCredentials.php
More file actions
102 lines (88 loc) · 2.92 KB
/
Credentials.php
File metadata and controls
102 lines (88 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php namespace nyx\auth;
// External dependencies
use nyx\core;
use nyx\diagnostics;
/**
* Credentials
*
* @package Nyx\Auth
* @version 0.1.0
* @author Michal Chojnacki <m.chojnacki@muyo.io>
* @copyright 2012-2017 Nyx Dev Team
* @link https://github.com/unyx/nyx
*/
class Credentials extends Token implements interfaces\Credentials
{
/**
* The traits of a Credentials instance.
*/
use core\traits\Serializable;
/**
* @var string|interfaces\Credentials The secret associated with the underlying identifier.
*/
protected $secret;
/**
* {@inheritDoc}
*
* @param string|interfaces\Credentials $secret The secret associated with the underlying identifier.
* @throws \InvalidArgumentException When a secret of an invalid type is given.
*/
public function __construct(string $id, $secret)
{
parent::__construct($id);
if (!is_string($secret) && !$secret instanceof interfaces\Credentials) {
throw new \InvalidArgumentException("The [secret] must be either a string or an instance of ".interfaces\Credentials::class.", got [".diagnostics\Debug::getTypeName($secret)."] instead.");
}
$this->secret = $secret;
}
/**
* {@inheritDoc}
*/
public function getSecret()
{
return $this->secret;
}
/**
* {@inheritDoc}
*/
public function matches(interfaces\Token $that) : bool
{
// The interface assumes Token comparisons but we need data from our own, stricter interface.
// @todo Loosen the Token interface to allow mixed types for the matches() method?
if (!$that instanceof interfaces\Credentials) {
return false;
}
// $that's secret will be required more than once so let's reduce calls.
$otherSecret = $that->getSecret();
// In the case of nested Credentials we are going to need to check for equality of the underlying data.
// If only one of the secrets is a Credentials instance, then the control structure will proceed to the
// next block and catch that with the identity comparison (returning false there).
if ($this->secret instanceof interfaces\Credentials && $otherSecret instanceof interfaces\Credentials) {
if (!$this->secret->matches($otherSecret)) {
return false;
}
} elseif ($this->secret !== $otherSecret) {
return false;
}
return parent::matches($that);
}
/**
* {@inheritDoc}
*/
public function unserialize($data)
{
$data = unserialize($data);
$this->id = $data['id'];
$this->secret = $data['secret'];
}
/**
* {@inheritDoc}
*/
public function toArray() : array
{
return [
'id' => $this->id,
'secret' => $this->secret
];
}
}