@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 upstream/main 80 lines 2.2 kB view raw
1<?php 2 3final 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}