Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/auth/controller/mfa/PhabricatorAuthFactorProviderEditController.php
12262 views
1
<?php
2
3
final class PhabricatorAuthFactorProviderEditController
4
extends PhabricatorAuthFactorProviderController {
5
6
public function handleRequest(AphrontRequest $request) {
7
$this->requireApplicationCapability(
8
AuthManageProvidersCapability::CAPABILITY);
9
10
$engine = id(new PhabricatorAuthFactorProviderEditEngine())
11
->setController($this);
12
13
$id = $request->getURIData('id');
14
if (!$id) {
15
$factor_key = $request->getStr('providerFactorKey');
16
17
$map = PhabricatorAuthFactor::getAllFactors();
18
$factor = idx($map, $factor_key);
19
if (!$factor) {
20
return $this->buildFactorSelectionResponse();
21
}
22
23
$engine
24
->addContextParameter('providerFactorKey', $factor_key)
25
->setProviderFactor($factor);
26
}
27
28
return $engine->buildResponse();
29
}
30
31
private function buildFactorSelectionResponse() {
32
$request = $this->getRequest();
33
$viewer = $this->getViewer();
34
35
$cancel_uri = $this->getApplicationURI('mfa/');
36
37
$factors = PhabricatorAuthFactor::getAllFactors();
38
39
$menu = id(new PHUIObjectItemListView())
40
->setUser($viewer)
41
->setBig(true)
42
->setFlush(true);
43
44
$factors = msortv($factors, 'newSortVector');
45
46
foreach ($factors as $factor_key => $factor) {
47
$factor_uri = id(new PhutilURI('/mfa/edit/'))
48
->replaceQueryParam('providerFactorKey', $factor_key);
49
$factor_uri = $this->getApplicationURI($factor_uri);
50
51
$is_enabled = $factor->canCreateNewProvider();
52
53
$item = id(new PHUIObjectItemView())
54
->setHeader($factor->getFactorName())
55
->setImageIcon($factor->newIconView())
56
->addAttribute($factor->getFactorCreateHelp());
57
58
if ($is_enabled) {
59
$item
60
->setHref($factor_uri)
61
->setClickable(true);
62
} else {
63
$item->setDisabled(true);
64
}
65
66
$create_description = $factor->getProviderCreateDescription();
67
if ($create_description) {
68
$item->appendChild($create_description);
69
}
70
71
$menu->addItem($item);
72
}
73
74
return $this->newDialog()
75
->setTitle(pht('Choose Provider Type'))
76
->appendChild($menu)
77
->addCancelButton($cancel_uri);
78
}
79
80
}
81
82