<?php // NOTE: We aren't using PhabricatorUserOAuthInfo anywhere here because it is // getting nuked in a future diff. $table = new PhabricatorUser(); $table_name = 'user_oauthinfo'; $conn_w = $table->establishConnection('w'); $xaccount = new PhabricatorExternalAccount(); echo "Migrating OAuth to ExternalAccount...\n"; $domain_map = array( 'disqus' => 'disqus.com', 'facebook' => 'facebook.com', 'github' => 'github.com', 'google' => 'google.com', ); try { $phabricator_oauth_uri = new PhutilURI( PhabricatorEnv::getEnvConfig('phabricator.oauth-uri')); $domain_map['phabricator'] = $phabricator_oauth_uri->getDomain(); } catch (Exception $ex) { // Ignore; this likely indicates that we have removed `phabricator.oauth-uri` // in some future diff. } $rows = queryfx_all( $conn_w, 'SELECT * FROM user_oauthinfo'); foreach ($rows as $row) { echo "Migrating row ID #".$row['id'].".\n"; $user = id(new PhabricatorUser())->loadOneWhere( 'id = %d', $row['userID']); if (!$user) { echo "Bad user ID!\n"; continue; } $domain = idx($domain_map, $row['oauthProvider']); if (empty($domain)) { echo "Unknown OAuth provider!\n"; continue; } $xaccount = id(new PhabricatorExternalAccount()) ->setUserPHID($user->getPHID()) ->setAccountType($row['oauthProvider']) ->setAccountDomain($domain) ->setAccountID($row['oauthUID']) ->setAccountURI($row['accountURI']) ->setUsername($row['accountName']) ->setDateCreated($row['dateCreated']); try { $xaccount->save(); } catch (Exception $ex) { phlog($ex); } } echo "Done.\n";