@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
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 207 lines 6.2 kB view raw
1<?php 2 3final class PhabricatorPhabricatorAuthProvider 4 extends PhabricatorOAuth2AuthProvider { 5 6 const PROPERTY_PHABRICATOR_NAME = 'oauth2:phabricator:name'; 7 const PROPERTY_PHABRICATOR_URI = 'oauth2:phabricator:uri'; 8 9 public function getProviderName() { 10 return PlatformSymbols::getPlatformServerName(); 11 } 12 13 public function getConfigurationHelp() { 14 if ($this->isCreate()) { 15 return pht( 16 "**Step 1 of 2 - Name Remote Server**\n\n". 17 'Choose a permanent name for the remote server you want to connect '. 18 'to. This name is used internally to keep track of the remote '. 19 'server, in case the URL changes later.'); 20 } 21 22 return parent::getConfigurationHelp(); 23 } 24 protected function getProviderConfigurationHelp() { 25 $config = $this->getProviderConfig(); 26 $base_uri = rtrim( 27 $config->getProperty(self::PROPERTY_PHABRICATOR_URI), '/'); 28 $login_uri = PhabricatorEnv::getURI($this->getLoginURI()); 29 30 return pht( 31 "**Step 2 of 2 - Configure OAuth Server**\n\n". 32 "To configure OAuth, create a new application here:". 33 "\n\n". 34 "%s". 35 "\n\n". 36 "When creating your application, use these settings:". 37 "\n\n". 38 " - **Redirect URI:** Set this to: `%s`". 39 "\n\n". 40 "After completing configuration, copy the **Client ID** and ". 41 "**Client Secret** to the fields above. (You may need to generate the ". 42 "client secret by clicking 'New Secret' first.)", 43 $base_uri.'/oauthserver/edit/', 44 $login_uri); 45 } 46 47 protected function newOAuthAdapter() { 48 $config = $this->getProviderConfig(); 49 return id(new PhutilPhabricatorAuthAdapter()) 50 ->setAdapterDomain($config->getProviderDomain()) 51 ->setPhabricatorBaseURI( 52 $config->getProperty(self::PROPERTY_PHABRICATOR_URI)); 53 } 54 55 protected function getLoginIcon() { 56 return PlatformSymbols::getPlatformServerName(); 57 } 58 59 private function isCreate() { 60 return !$this->getProviderConfig()->getID(); 61 } 62 63 public function readFormValuesFromProvider() { 64 $config = $this->getProviderConfig(); 65 $uri = $config->getProperty(self::PROPERTY_PHABRICATOR_URI); 66 67 return parent::readFormValuesFromProvider() + array( 68 self::PROPERTY_PHABRICATOR_NAME => $this->getProviderDomain(), 69 self::PROPERTY_PHABRICATOR_URI => $uri, 70 ); 71 } 72 73 public function readFormValuesFromRequest(AphrontRequest $request) { 74 $is_setup = $this->isCreate(); 75 if ($is_setup) { 76 $parent_values = array(); 77 $name = $request->getStr(self::PROPERTY_PHABRICATOR_NAME); 78 } else { 79 $parent_values = parent::readFormValuesFromRequest($request); 80 $name = $this->getProviderDomain(); 81 } 82 83 return $parent_values + array( 84 self::PROPERTY_PHABRICATOR_NAME => $name, 85 self::PROPERTY_PHABRICATOR_URI => 86 $request->getStr(self::PROPERTY_PHABRICATOR_URI), 87 ); 88 } 89 90 public function processEditForm( 91 AphrontRequest $request, 92 array $values) { 93 94 $is_setup = $this->isCreate(); 95 96 if (!$is_setup) { 97 list($errors, $issues, $values) = 98 parent::processEditForm($request, $values); 99 } else { 100 $errors = array(); 101 $issues = array(); 102 } 103 104 $key_name = self::PROPERTY_PHABRICATOR_NAME; 105 $key_uri = self::PROPERTY_PHABRICATOR_URI; 106 107 if (!strlen($values[$key_name])) { 108 $errors[] = pht('Server name is required.'); 109 $issues[$key_name] = pht('Required'); 110 } else if (!preg_match('/^[a-z0-9.]+\z/', $values[$key_name])) { 111 $errors[] = pht( 112 'Server name must contain only lowercase letters, '. 113 'digits, and periods.'); 114 $issues[$key_name] = pht('Invalid'); 115 } 116 117 if (!strlen($values[$key_uri])) { 118 $errors[] = pht('Base URI is required.'); 119 $issues[$key_uri] = pht('Required'); 120 } else { 121 $uri = new PhutilURI($values[$key_uri]); 122 if (!$uri->getProtocol()) { 123 $errors[] = pht( 124 'Base URI should include protocol (like "%s").', 125 'https://'); 126 $issues[$key_uri] = pht('Invalid'); 127 } 128 } 129 130 if (!$errors && $is_setup) { 131 $config = $this->getProviderConfig(); 132 133 $config->setProviderDomain($values[$key_name]); 134 } 135 136 return array($errors, $issues, $values); 137 } 138 139 public function extendEditForm( 140 AphrontRequest $request, 141 AphrontFormView $form, 142 array $values, 143 array $issues) { 144 145 $is_setup = $this->isCreate(); 146 147 $e_required = $request->isFormPost() ? null : true; 148 149 $v_name = $values[self::PROPERTY_PHABRICATOR_NAME]; 150 if ($is_setup) { 151 $e_name = idx($issues, self::PROPERTY_PHABRICATOR_NAME, $e_required); 152 } else { 153 $e_name = null; 154 } 155 156 $v_uri = $values[self::PROPERTY_PHABRICATOR_URI]; 157 $e_uri = idx($issues, self::PROPERTY_PHABRICATOR_URI, $e_required); 158 159 if ($is_setup) { 160 $form 161 ->appendChild( 162 id(new AphrontFormTextControl()) 163 ->setLabel(pht('Server Name')) 164 ->setValue($v_name) 165 ->setName(self::PROPERTY_PHABRICATOR_NAME) 166 ->setError($e_name) 167 ->setCaption(pht( 168 'Use lowercase letters, digits, and periods. For example: %s', 169 phutil_tag( 170 'tt', 171 array(), 172 'example.oauthserver')))); 173 } else { 174 $form 175 ->appendChild( 176 id(new AphrontFormStaticControl()) 177 ->setLabel(pht('Server Name')) 178 ->setValue($v_name)); 179 } 180 181 $form 182 ->appendChild( 183 id(new AphrontFormTextControl()) 184 ->setLabel(pht('Base URI')) 185 ->setValue($v_uri) 186 ->setName(self::PROPERTY_PHABRICATOR_URI) 187 ->setCaption( 188 pht( 189 'The URI where the OAuth server is installed. For example: %s', 190 phutil_tag('tt', array(), 'https://devtools.example.com/'))) 191 ->setError($e_uri)); 192 193 if (!$is_setup) { 194 parent::extendEditForm($request, $form, $values, $issues); 195 } 196 } 197 198 public function hasSetupStep() { 199 return true; 200 } 201 202 public function getPhabricatorURI() { 203 $config = $this->getProviderConfig(); 204 return $config->getProperty(self::PROPERTY_PHABRICATOR_URI); 205 } 206 207}