@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
at recaptime-dev/main 199 lines 5.8 kB view raw
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}