@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 PhabricatorAuthProviderViewController
4 extends PhabricatorAuthProviderConfigController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $this->requireApplicationCapability(
8 AuthManageProvidersCapability::CAPABILITY);
9
10 $viewer = $this->getViewer();
11 $id = $request->getURIData('id');
12
13 $config = id(new PhabricatorAuthProviderConfigQuery())
14 ->setViewer($viewer)
15 ->requireCapabilities(
16 array(
17 PhabricatorPolicyCapability::CAN_VIEW,
18 PhabricatorPolicyCapability::CAN_EDIT,
19 ))
20 ->withIDs(array($id))
21 ->executeOne();
22 if (!$config) {
23 return new Aphront404Response();
24 }
25
26 $header = $this->buildHeaderView($config);
27 $properties = $this->buildPropertiesView($config);
28 $curtain = $this->buildCurtain($config);
29
30 $timeline = $this->buildTransactionTimeline(
31 $config,
32 new PhabricatorAuthProviderConfigTransactionQuery());
33 $timeline->setShouldTerminate(true);
34
35 $view = id(new PHUITwoColumnView())
36 ->setHeader($header)
37 ->setCurtain($curtain)
38 ->addPropertySection(pht('Details'), $properties)
39 ->setMainColumn($timeline);
40
41 $crumbs = $this->buildApplicationCrumbs()
42 ->addTextCrumb($config->getObjectName())
43 ->setBorder(true);
44
45 return $this->newPage()
46 ->setTitle(pht('Auth Provider: %s', $config->getDisplayName()))
47 ->setCrumbs($crumbs)
48 ->appendChild($view);
49 }
50
51 private function buildHeaderView(PhabricatorAuthProviderConfig $config) {
52 $viewer = $this->getViewer();
53
54 $view = id(new PHUIHeaderView())
55 ->setViewer($viewer)
56 ->setHeader($config->getDisplayName());
57
58 if ($config->getIsEnabled()) {
59 $view->setStatus('fa-check', 'bluegrey', pht('Enabled'));
60 } else {
61 $view->setStatus('fa-ban', 'red', pht('Disabled'));
62 }
63
64 return $view;
65 }
66
67 private function buildCurtain(PhabricatorAuthProviderConfig $config) {
68 $viewer = $this->getViewer();
69 $id = $config->getID();
70
71 $can_edit = PhabricatorPolicyFilter::hasCapability(
72 $viewer,
73 $config,
74 PhabricatorPolicyCapability::CAN_EDIT);
75
76 $curtain = $this->newCurtainView($config);
77
78 $curtain->addAction(
79 id(new PhabricatorActionView())
80 ->setName(pht('Edit Auth Provider'))
81 ->setIcon('fa-pencil')
82 ->setHref($this->getApplicationURI("config/edit/{$id}/"))
83 ->setDisabled(!$can_edit)
84 ->setWorkflow(!$can_edit));
85
86 if ($config->getIsEnabled()) {
87 $disable_uri = $this->getApplicationURI('config/disable/'.$id.'/');
88 $disable_icon = 'fa-ban';
89 $disable_text = pht('Disable Provider');
90 } else {
91 $disable_uri = $this->getApplicationURI('config/enable/'.$id.'/');
92 $disable_icon = 'fa-check';
93 $disable_text = pht('Enable Provider');
94 }
95
96 $curtain->addAction(
97 id(new PhabricatorActionView())
98 ->setName($disable_text)
99 ->setIcon($disable_icon)
100 ->setHref($disable_uri)
101 ->setDisabled(!$can_edit)
102 ->setWorkflow(true));
103
104 return $curtain;
105 }
106
107 private function buildPropertiesView(PhabricatorAuthProviderConfig $config) {
108 $viewer = $this->getViewer();
109
110 $view = id(new PHUIPropertyListView())
111 ->setViewer($viewer);
112
113 $view->addProperty(
114 pht('Provider Type'),
115 $config->getProvider()->getProviderName());
116
117 $status = $this->buildStatus($config);
118 $view->addProperty(pht('Status'), $status);
119
120 return $view;
121 }
122
123 private function buildStatus(PhabricatorAuthProviderConfig $config) {
124 $viewer = $this->getViewer();
125 $view = id(new PHUIStatusListView())
126 ->setViewer($viewer);
127
128 $icon_enabled = PHUIStatusItemView::ICON_ACCEPT;
129 $icon_disabled = PHUIStatusItemView::ICON_REJECT;
130
131 $icon_map = array(
132 true => $icon_enabled,
133 false => $icon_disabled,
134 );
135
136 $color_map = array(
137 true => 'green',
138 false => 'red',
139 );
140
141 $provider = $config->getProvider();
142
143 $view->addItem(
144 id(new PHUIStatusItemView())
145 ->setIcon(
146 $icon_map[$config->getIsEnabled()],
147 $color_map[$config->getIsEnabled()])
148 ->setTarget(pht('Provider Enabled')));
149
150 $view->addItem(
151 id(new PHUIStatusItemView())
152 ->setIcon(
153 $icon_map[$config->getShouldAllowLogin()],
154 $color_map[$config->getShouldAllowLogin()])
155 ->setTarget(pht('Allow Logins')));
156
157 $view->addItem(
158 id(new PHUIStatusItemView())
159 ->setIcon(
160 $icon_map[$config->getShouldAllowRegistration()],
161 $color_map[$config->getShouldAllowRegistration()])
162 ->setTarget(pht('Allow Registration')));
163
164 $view->addItem(
165 id(new PHUIStatusItemView())
166 ->setIcon(
167 $icon_map[$config->getShouldAllowLink()],
168 $color_map[$config->getShouldAllowLink()])
169 ->setTarget(pht('Allow Account Linking')));
170
171 $view->addItem(
172 id(new PHUIStatusItemView())
173 ->setIcon(
174 $icon_map[$config->getShouldAllowUnlink()],
175 $color_map[$config->getShouldAllowUnlink()])
176 ->setTarget(pht('Allow Account Unlinking')));
177
178 if ($provider->shouldAllowEmailTrustConfiguration()) {
179 $view->addItem(
180 id(new PHUIStatusItemView())
181 ->setIcon(
182 $icon_map[$config->getShouldTrustEmails()],
183 $color_map[$config->getShouldTrustEmails()])
184 ->setTarget(pht('Trust Email Addresses')));
185 }
186
187 if ($provider->supportsAutoLogin()) {
188 $view->addItem(
189 id(new PHUIStatusItemView())
190 ->setIcon(
191 $icon_map[$config->getShouldAutoLogin()],
192 $color_map[$config->getShouldAutoLogin()])
193 ->setTarget(pht('Allow Auto Login')));
194 }
195
196 return $view;
197 }
198
199}