[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorAuthManagementRefreshWorkflow 4 extends PhabricatorAuthManagementWorkflow { 5 6 protected function didConstruct() { 7 $this 8 ->setName('refresh') 9 ->setExamples('**refresh**') 10 ->setSynopsis( 11 pht( 12 'Refresh OAuth access tokens. This is primarily useful for '. 13 'development and debugging.')) 14 ->setArguments( 15 array( 16 array( 17 'name' => 'user', 18 'param' => 'user', 19 'help' => 'Refresh tokens for a given user.', 20 ), 21 array( 22 'name' => 'type', 23 'param' => 'provider', 24 'help' => 'Refresh tokens for a given provider type.', 25 ), 26 array( 27 'name' => 'domain', 28 'param' => 'domain', 29 'help' => 'Refresh tokens for a given domain.', 30 ), 31 )); 32 } 33 34 public function execute(PhutilArgumentParser $args) { 35 $console = PhutilConsole::getConsole(); 36 $viewer = $this->getViewer(); 37 38 $query = id(new PhabricatorExternalAccountQuery()) 39 ->setViewer($viewer) 40 ->requireCapabilities( 41 array( 42 PhabricatorPolicyCapability::CAN_VIEW, 43 PhabricatorPolicyCapability::CAN_EDIT, 44 )); 45 46 $username = $args->getArg('user'); 47 if (strlen($username)) { 48 $user = id(new PhabricatorPeopleQuery()) 49 ->setViewer($viewer) 50 ->withUsernames(array($username)) 51 ->executeOne(); 52 if ($user) { 53 $query->withUserPHIDs(array($user->getPHID())); 54 } else { 55 throw new PhutilArgumentUsageException( 56 pht('No such user "%s"!', $username)); 57 } 58 } 59 60 61 $type = $args->getArg('type'); 62 if (strlen($type)) { 63 $query->withAccountTypes(array($type)); 64 } 65 66 $domain = $args->getArg('domain'); 67 if (strlen($domain)) { 68 $query->withAccountDomains(array($domain)); 69 } 70 71 $accounts = $query->execute(); 72 73 if (!$accounts) { 74 throw new PhutilArgumentUsageException( 75 pht('No accounts match the arguments!')); 76 } else { 77 $console->writeOut( 78 "%s\n", 79 pht( 80 'Found %s account(s) to refresh.', 81 new PhutilNumber(count($accounts)))); 82 } 83 84 $providers = PhabricatorAuthProvider::getAllEnabledProviders(); 85 86 foreach ($accounts as $account) { 87 $console->writeOut( 88 "%s\n", 89 pht( 90 'Refreshing account #%d (%s/%s).', 91 $account->getID(), 92 $account->getAccountType(), 93 $account->getAccountDomain())); 94 95 $key = $account->getProviderKey(); 96 if (empty($providers[$key])) { 97 $console->writeOut( 98 "> %s\n", 99 pht('Skipping, provider is not enabled or does not exist.')); 100 continue; 101 } 102 103 $provider = $providers[$key]; 104 if (!($provider instanceof PhabricatorOAuth2AuthProvider)) { 105 $console->writeOut( 106 "> %s\n", 107 pht('Skipping, provider is not an OAuth2 provider.')); 108 continue; 109 } 110 111 $adapter = $provider->getAdapter(); 112 if (!$adapter->supportsTokenRefresh()) { 113 $console->writeOut( 114 "> %s\n", 115 pht('Skipping, provider does not support token refresh.')); 116 continue; 117 } 118 119 $refresh_token = $account->getProperty('oauth.token.refresh'); 120 if (!$refresh_token) { 121 $console->writeOut( 122 "> %s\n", 123 pht('Skipping, provider has no stored refresh token.')); 124 continue; 125 } 126 127 $console->writeOut( 128 "+ %s\n", 129 pht( 130 'Refreshing token, current token expires in %s seconds.', 131 new PhutilNumber( 132 $account->getProperty('oauth.token.access.expires') - time()))); 133 134 $token = $provider->getOAuthAccessToken($account, $force_refresh = true); 135 if (!$token) { 136 $console->writeOut( 137 "* %s\n", 138 pht('Unable to refresh token!')); 139 continue; 140 } 141 142 $console->writeOut( 143 "+ %s\n", 144 pht( 145 'Refreshed token, new token expires in %s seconds.', 146 new PhutilNumber( 147 $account->getProperty('oauth.token.access.expires') - time()))); 148 149 } 150 151 $console->writeOut("%s\n", pht('Done.')); 152 153 return 0; 154 } 155 156 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |