@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class PhabricatorAuthFactorProviderViewController
4 extends PhabricatorAuthFactorProviderController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $viewer = $this->getViewer();
8
9 $this->requireApplicationCapability(
10 AuthManageProvidersCapability::CAPABILITY);
11
12 $provider = id(new PhabricatorAuthFactorProviderQuery())
13 ->setViewer($viewer)
14 ->withIDs(array($request->getURIData('id')))
15 ->executeOne();
16 if (!$provider) {
17 return new Aphront404Response();
18 }
19
20 $crumbs = $this->buildApplicationCrumbs()
21 ->addTextCrumb($provider->getObjectName())
22 ->setBorder(true);
23
24 $header = $this->buildHeaderView($provider);
25 $properties = $this->buildPropertiesView($provider);
26 $curtain = $this->buildCurtain($provider);
27
28
29 $timeline = $this->buildTransactionTimeline(
30 $provider,
31 new PhabricatorAuthFactorProviderTransactionQuery());
32 $timeline->setShouldTerminate(true);
33
34 $view = id(new PHUITwoColumnView())
35 ->setHeader($header)
36 ->setCurtain($curtain)
37 ->setMainColumn(
38 array(
39 $timeline,
40 ))
41 ->addPropertySection(pht('Details'), $properties);
42
43 return $this->newPage()
44 ->setTitle($provider->getDisplayName())
45 ->setCrumbs($crumbs)
46 ->setPageObjectPHIDs(
47 array(
48 $provider->getPHID(),
49 ))
50 ->appendChild($view);
51 }
52
53 private function buildHeaderView(PhabricatorAuthFactorProvider $provider) {
54 $viewer = $this->getViewer();
55
56 $view = id(new PHUIHeaderView())
57 ->setViewer($viewer)
58 ->setHeader($provider->getDisplayName())
59 ->setPolicyObject($provider);
60
61 $status = $provider->newStatus();
62
63 $header_icon = $status->getStatusHeaderIcon();
64 $header_color = $status->getStatusHeaderColor();
65 $header_name = $status->getName();
66 if ($header_icon !== null) {
67 $view->setStatus($header_icon, $header_color, $header_name);
68 }
69
70 return $view;
71 }
72
73 private function buildPropertiesView(
74 PhabricatorAuthFactorProvider $provider) {
75 $viewer = $this->getViewer();
76
77 $view = id(new PHUIPropertyListView())
78 ->setViewer($viewer);
79
80 $view->addProperty(
81 pht('Factor Type'),
82 $provider->getFactor()->getFactorName());
83
84
85 $custom_enroll = $provider->getEnrollMessage();
86 if (phutil_nonempty_string($custom_enroll)) {
87 $view->addSectionHeader(
88 pht('Custom Enroll Message'),
89 PHUIPropertyListView::ICON_SUMMARY);
90 $view->addTextContent(
91 new PHUIRemarkupView($viewer, $custom_enroll));
92 }
93
94 return $view;
95 }
96
97 private function buildCurtain(PhabricatorAuthFactorProvider $provider) {
98 $viewer = $this->getViewer();
99 $id = $provider->getID();
100
101 $can_edit = PhabricatorPolicyFilter::hasCapability(
102 $viewer,
103 $provider,
104 PhabricatorPolicyCapability::CAN_EDIT);
105
106 $curtain = $this->newCurtainView($provider);
107
108 $curtain->addAction(
109 id(new PhabricatorActionView())
110 ->setName(pht('Edit MFA Provider'))
111 ->setIcon('fa-pencil')
112 ->setHref($this->getApplicationURI("mfa/edit/{$id}/"))
113 ->setDisabled(!$can_edit)
114 ->setWorkflow(!$can_edit));
115
116 $curtain->addAction(
117 id(new PhabricatorActionView())
118 ->setName(pht('Customize Enroll Message'))
119 ->setIcon('fa-commenting-o')
120 ->setHref($this->getApplicationURI("mfa/message/{$id}/"))
121 ->setDisabled(!$can_edit)
122 ->setWorkflow(true));
123
124 return $curtain;
125 }
126
127}