Path: blob/master/src/applications/auth/adapter/PhutilFacebookAuthAdapter.php
12256 views
<?php12/**3* Authentication adapter for Facebook OAuth2.4*/5final class PhutilFacebookAuthAdapter extends PhutilOAuthAuthAdapter {67public function getAdapterType() {8return 'facebook';9}1011public function getAdapterDomain() {12return 'facebook.com';13}1415public function getAccountID() {16return $this->getOAuthAccountData('id');17}1819public function getAccountEmail() {20return $this->getOAuthAccountData('email');21}2223public function getAccountName() {24$link = $this->getOAuthAccountData('link');25if (!$link) {26return null;27}2829$matches = null;30if (!preg_match('@/([^/]+)$@', $link, $matches)) {31return null;32}3334return $matches[1];35}3637public function getAccountImageURI() {38$picture = $this->getOAuthAccountData('picture');39if ($picture) {40$picture_data = idx($picture, 'data');41if ($picture_data) {42return idx($picture_data, 'url');43}44}45return null;46}4748public function getAccountURI() {49return $this->getOAuthAccountData('link');50}5152public function getAccountRealName() {53return $this->getOAuthAccountData('name');54}5556protected function getAuthenticateBaseURI() {57return 'https://www.facebook.com/dialog/oauth';58}5960protected function getTokenBaseURI() {61return 'https://graph.facebook.com/oauth/access_token';62}6364protected function loadOAuthAccountData() {65$fields = array(66'id',67'name',68'email',69'link',70'picture',71);7273$uri = new PhutilURI('https://graph.facebook.com/me');74$uri->replaceQueryParam('access_token', $this->getAccessToken());75$uri->replaceQueryParam('fields', implode(',', $fields));76list($body) = id(new HTTPSFuture($uri))->resolvex();7778$data = null;79try {80$data = phutil_json_decode($body);81} catch (PhutilJSONParserException $ex) {82throw new PhutilProxyException(83pht('Expected valid JSON response from Facebook account data request.'),84$ex);85}8687return $data;88}8990}919293