Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/auth/storage/PhabricatorAuthFactorConfig.php
12256 views
1
<?php
2
3
4
final class PhabricatorAuthFactorConfig
5
extends PhabricatorAuthDAO
6
implements
7
PhabricatorPolicyInterface,
8
PhabricatorDestructibleInterface {
9
10
protected $userPHID;
11
protected $factorProviderPHID;
12
protected $factorName;
13
protected $factorSecret;
14
protected $properties = array();
15
16
private $sessionEngine;
17
private $factorProvider = self::ATTACHABLE;
18
private $mfaSyncToken;
19
20
protected function getConfiguration() {
21
return array(
22
self::CONFIG_SERIALIZATION => array(
23
'properties' => self::SERIALIZATION_JSON,
24
),
25
self::CONFIG_AUX_PHID => true,
26
self::CONFIG_COLUMN_SCHEMA => array(
27
'factorName' => 'text',
28
'factorSecret' => 'text',
29
),
30
self::CONFIG_KEY_SCHEMA => array(
31
'key_user' => array(
32
'columns' => array('userPHID'),
33
),
34
),
35
) + parent::getConfiguration();
36
}
37
38
public function getPHIDType() {
39
return PhabricatorAuthAuthFactorPHIDType::TYPECONST;
40
}
41
42
public function attachFactorProvider(
43
PhabricatorAuthFactorProvider $provider) {
44
$this->factorProvider = $provider;
45
return $this;
46
}
47
48
public function getFactorProvider() {
49
return $this->assertAttached($this->factorProvider);
50
}
51
52
public function setSessionEngine(PhabricatorAuthSessionEngine $engine) {
53
$this->sessionEngine = $engine;
54
return $this;
55
}
56
57
public function getSessionEngine() {
58
if (!$this->sessionEngine) {
59
throw new PhutilInvalidStateException('setSessionEngine');
60
}
61
62
return $this->sessionEngine;
63
}
64
65
public function setMFASyncToken(PhabricatorAuthTemporaryToken $token) {
66
$this->mfaSyncToken = $token;
67
return $this;
68
}
69
70
public function getMFASyncToken() {
71
return $this->mfaSyncToken;
72
}
73
74
public function getAuthFactorConfigProperty($key, $default = null) {
75
return idx($this->properties, $key, $default);
76
}
77
78
public function setAuthFactorConfigProperty($key, $value) {
79
$this->properties[$key] = $value;
80
return $this;
81
}
82
83
public function newSortVector() {
84
return id(new PhutilSortVector())
85
->addInt($this->getFactorProvider()->newStatus()->getOrder())
86
->addInt($this->getID());
87
}
88
89
90
/* -( PhabricatorPolicyInterface )----------------------------------------- */
91
92
93
public function getCapabilities() {
94
return array(
95
PhabricatorPolicyCapability::CAN_VIEW,
96
PhabricatorPolicyCapability::CAN_EDIT,
97
);
98
}
99
100
public function getPolicy($capability) {
101
return $this->getUserPHID();
102
}
103
104
public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
105
return false;
106
}
107
108
109
/* -( PhabricatorDestructibleInterface )----------------------------------- */
110
111
112
public function destroyObjectPermanently(
113
PhabricatorDestructionEngine $engine) {
114
115
$user = id(new PhabricatorPeopleQuery())
116
->setViewer($engine->getViewer())
117
->withPHIDs(array($this->getUserPHID()))
118
->executeOne();
119
120
$this->delete();
121
122
if ($user) {
123
$user->updateMultiFactorEnrollment();
124
}
125
}
126
127
}
128
129