[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/auth/management/ -> PhabricatorAuthManagementRefreshWorkflow.php (source)

   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  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1