Path: blob/master/src/applications/auth/management/PhabricatorAuthManagementRefreshWorkflow.php
12256 views
<?php12final class PhabricatorAuthManagementRefreshWorkflow3extends PhabricatorAuthManagementWorkflow {45protected function didConstruct() {6$this7->setName('refresh')8->setExamples('**refresh**')9->setSynopsis(10pht(11'Refresh OAuth access tokens. This is primarily useful for '.12'development and debugging.'))13->setArguments(14array(15array(16'name' => 'user',17'param' => 'user',18'help' => pht('Refresh tokens for a given user.'),19),20));21}2223public function execute(PhutilArgumentParser $args) {24$console = PhutilConsole::getConsole();25$viewer = $this->getViewer();2627$query = id(new PhabricatorExternalAccountQuery())28->setViewer($viewer)29->requireCapabilities(30array(31PhabricatorPolicyCapability::CAN_VIEW,32PhabricatorPolicyCapability::CAN_EDIT,33));3435$username = $args->getArg('user');36if (strlen($username)) {37$user = id(new PhabricatorPeopleQuery())38->setViewer($viewer)39->withUsernames(array($username))40->executeOne();41if ($user) {42$query->withUserPHIDs(array($user->getPHID()));43} else {44throw new PhutilArgumentUsageException(45pht('No such user "%s"!', $username));46}47}4849$accounts = $query->execute();5051if (!$accounts) {52throw new PhutilArgumentUsageException(53pht('No accounts match the arguments!'));54} else {55$console->writeOut(56"%s\n",57pht(58'Found %s account(s) to refresh.',59phutil_count($accounts)));60}6162$providers = PhabricatorAuthProvider::getAllEnabledProviders();63$providers = mpull($providers, null, 'getProviderConfigPHID');6465foreach ($accounts as $account) {66$console->writeOut(67"%s\n",68pht(69'Refreshing account #%d.',70$account->getID()));7172$config_phid = $account->getProviderConfigPHID();73if (empty($providers[$config_phid])) {74$console->writeOut(75"> %s\n",76pht('Skipping, provider is not enabled or does not exist.'));77continue;78}7980$provider = $providers[$config_phid];81if (!($provider instanceof PhabricatorOAuth2AuthProvider)) {82$console->writeOut(83"> %s\n",84pht('Skipping, provider is not an OAuth2 provider.'));85continue;86}8788$adapter = $provider->getAdapter();89if (!$adapter->supportsTokenRefresh()) {90$console->writeOut(91"> %s\n",92pht('Skipping, provider does not support token refresh.'));93continue;94}9596$refresh_token = $account->getProperty('oauth.token.refresh');97if (!$refresh_token) {98$console->writeOut(99"> %s\n",100pht('Skipping, provider has no stored refresh token.'));101continue;102}103104$console->writeOut(105"+ %s\n",106pht(107'Refreshing token, current token expires in %s seconds.',108new PhutilNumber(109$account->getProperty('oauth.token.access.expires') - time())));110111$token = $provider->getOAuthAccessToken($account, $force_refresh = true);112if (!$token) {113$console->writeOut(114"* %s\n",115pht('Unable to refresh token!'));116continue;117}118119$console->writeOut(120"+ %s\n",121pht(122'Refreshed token, new token expires in %s seconds.',123new PhutilNumber(124$account->getProperty('oauth.token.access.expires') - time())));125126}127128$console->writeOut("%s\n", pht('Done.'));129130return 0;131}132133}134135136