This repository has been archived by the owner on Jan 8, 2020. It is now read-only.
/
AuthenticationService.php
167 lines (149 loc) · 3.98 KB
/
AuthenticationService.php
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @package Zend_Authentication
*/
namespace Zend\Authentication;
/**
* @category Zend
* @package Zend_Authentication
*/
class AuthenticationService
{
/**
* Persistent storage handler
*
* @var Storage\StorageInterface
*/
protected $storage = null;
/**
* Authentication adapter
*
* @var Adapter\AdapterInterface
*/
protected $adapter = null;
/**
* Constructor
*
* @param Storage\StorageInterface $storage
* @param Adapter\AdapterInterface $adapter
*/
public function __construct(Storage\StorageInterface $storage = null, Adapter\AdapterInterface $adapter = null)
{
if (null !== $storage) {
$this->setStorage($storage);
}
if (null !== $adapter) {
$this->setAdapter($adapter);
}
}
/**
* Returns the authentication adapter
*
* The adapter does not have a default if the storage adapter has not been set.
*
* @return Adapter\AdapterInterface|null
*/
public function getAdapter()
{
return $this->adapter;
}
/**
* Sets the authentication adapter
*
* @param Adapter\AdapterInterface $adapter
* @return AuthenticationService Provides a fluent interface
*/
public function setAdapter(Adapter\AdapterInterface $adapter)
{
$this->adapter = $adapter;
return $this;
}
/**
* Returns the persistent storage handler
*
* Session storage is used by default unless a different storage adapter has been set.
*
* @return Storage\StorageInterface
*/
public function getStorage()
{
if (null === $this->storage) {
$this->setStorage(new Storage\Session());
}
return $this->storage;
}
/**
* Sets the persistent storage handler
*
* @param Storage\StorageInterface $storage
* @return AuthenticationService Provides a fluent interface
*/
public function setStorage(Storage\StorageInterface $storage)
{
$this->storage = $storage;
return $this;
}
/**
* Authenticates against the supplied adapter
*
* @param Adapter\AdapterInterface $adapter
* @return Result
* @throws Exception\RuntimeException
*/
public function authenticate(Adapter\AdapterInterface $adapter = null)
{
if (!$adapter) {
if (!$adapter = $this->getAdapter()) {
throw new Exception\RuntimeException('An adapter must be set or passed prior to calling authenticate()');
}
}
$result = $adapter->authenticate();
/**
* ZF-7546 - prevent multiple successive calls from storing inconsistent results
* Ensure storage has clean state
*/
if ($this->hasIdentity()) {
$this->clearIdentity();
}
if ($result->isValid()) {
$this->getStorage()->write($result->getIdentity());
}
return $result;
}
/**
* Returns true if and only if an identity is available from storage
*
* @return bool
*/
public function hasIdentity()
{
return !$this->getStorage()->isEmpty();
}
/**
* Returns the identity from storage or null if no identity is available
*
* @return mixed|null
*/
public function getIdentity()
{
$storage = $this->getStorage();
if ($storage->isEmpty()) {
return null;
}
return $storage->read();
}
/**
* Clears the identity from persistent storage
*
* @return void
*/
public function clearIdentity()
{
$this->getStorage()->clear();
}
}