@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 127 lines 3.5 kB view raw
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}