@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 80 lines 2.3 kB view raw
1<?php 2 3final class PhabricatorAuthConfirmLinkController 4 extends PhabricatorAuthController { 5 6 public function handleRequest(AphrontRequest $request) { 7 $viewer = $this->getViewer(); 8 $accountkey = $request->getURIData('akey'); 9 10 $result = $this->loadAccountForRegistrationOrLinking($accountkey); 11 list($account, $provider, $response) = $result; 12 13 if ($response) { 14 return $response; 15 } 16 17 if (!$provider->shouldAllowAccountLink()) { 18 return $this->renderError(pht('This account is not linkable.')); 19 } 20 21 $panel_uri = '/settings/panel/external/'; 22 23 if ($request->isFormOrHisecPost()) { 24 $workflow_key = sprintf( 25 'account.link(%s)', 26 $account->getPHID()); 27 28 $hisec_token = id(new PhabricatorAuthSessionEngine()) 29 ->setWorkflowKey($workflow_key) 30 ->requireHighSecurityToken($viewer, $request, $panel_uri); 31 32 $account->setUserPHID($viewer->getPHID()); 33 $account->save(); 34 35 $this->clearRegistrationCookies(); 36 37 // TODO: Send the user email about the new account link. 38 39 return id(new AphrontRedirectResponse())->setURI($panel_uri); 40 } 41 42 $dialog = $this->newDialog() 43 ->setTitle(pht('Confirm %s Account Link', $provider->getProviderName())) 44 ->addCancelButton($panel_uri) 45 ->addSubmitButton(pht('Confirm Account Link')); 46 47 $form = id(new PHUIFormLayoutView()) 48 ->setFullWidth(true) 49 ->appendChild( 50 phutil_tag( 51 'div', 52 array( 53 'class' => 'aphront-form-instructions', 54 ), 55 pht( 56 'Confirm the link with this %s account. This account will be '. 57 'able to log in to your %s account.', 58 $provider->getProviderName(), 59 PlatformSymbols::getPlatformServerName()))) 60 ->appendChild( 61 id(new PhabricatorAuthAccountView()) 62 ->setUser($viewer) 63 ->setExternalAccount($account) 64 ->setAuthProvider($provider)); 65 66 $dialog->appendChild($form); 67 68 $crumbs = $this->buildApplicationCrumbs(); 69 $crumbs->addTextCrumb(pht('Confirm Link'), $panel_uri); 70 $crumbs->addTextCrumb($provider->getProviderName()); 71 $crumbs->setBorder(true); 72 73 return $this->newPage() 74 ->setTitle(pht('Confirm External Account Link')) 75 ->setCrumbs($crumbs) 76 ->appendChild($dialog); 77 } 78 79 80}