diff --git a/modules/authfacebook/lib/Auth/Source/Facebook.php b/modules/authfacebook/lib/Auth/Source/Facebook.php index b922dd05aec61263d5148438f98608e74fc98ec8..aec24d25fa4bb12a85ad0df029ab684b22a6f23e 100644 --- a/modules/authfacebook/lib/Auth/Source/Facebook.php +++ b/modules/authfacebook/lib/Auth/Source/Facebook.php @@ -13,137 +13,137 @@ use SimpleSAML\Module; class Facebook extends \SimpleSAML\Auth\Source { - /** - * The string used to identify our states. - */ - const STAGE_INIT = 'facebook:init'; - - - /** - * The key of the AuthId field in the state. - */ - const AUTHID = 'facebook:AuthId'; - - - /** - * Facebook App ID or API Key - */ - private $api_key; - - - /** - * Facebook App Secret - */ - private $secret; - - - /** - * Which additional data permissions to request from user - */ - private $req_perms; - - - /** - * A comma-separated list of user profile fields to request. - * - * Note that some user fields require appropriate permissions. For - * example, to retrieve the user's primary email address, "email" must - * be specified in both the req_perms and the user_fields parameter. - * - * When empty, only the app-specific user id and name will be returned. - * - * See the Graph API specification for all available user fields: - * https://developers.facebook.com/docs/graph-api/reference/v2.6/user - */ - private $user_fields; - - - /** - * Constructor for this authentication source. - * - * @param array $info Information about this authentication source. - * @param array $config Configuration. - */ - public function __construct($info, $config) + /** + * The string used to identify our states. + */ + const STAGE_INIT = 'facebook:init'; + + + /** + * The key of the AuthId field in the state. + */ + const AUTHID = 'facebook:AuthId'; + + + /** + * Facebook App ID or API Key + */ + private $api_key; + + + /** + * Facebook App Secret + */ + private $secret; + + + /** + * Which additional data permissions to request from user + */ + private $req_perms; + + + /** + * A comma-separated list of user profile fields to request. + * + * Note that some user fields require appropriate permissions. For + * example, to retrieve the user's primary email address, "email" must + * be specified in both the req_perms and the user_fields parameter. + * + * When empty, only the app-specific user id and name will be returned. + * + * See the Graph API specification for all available user fields: + * https://developers.facebook.com/docs/graph-api/reference/v2.6/user + */ + private $user_fields; + + + /** + * Constructor for this authentication source. + * + * @param array $info Information about this authentication source. + * @param array $config Configuration. + */ + public function __construct($info, $config) { - assert(is_array($info)); - assert(is_array($config)); + assert(is_array($info)); + assert(is_array($config)); - // Call the parent constructor first, as required by the interface - parent::__construct($info, $config); + // Call the parent constructor first, as required by the interface + parent::__construct($info, $config); - $cfgParse = \SimpleSAML\Configuration::loadFromArray($config, 'authsources['.var_export($this->authId, true).']'); + $cfgParse = \SimpleSAML\Configuration::loadFromArray($config, 'authsources['.var_export($this->authId, true).']'); - $this->api_key = $cfgParse->getString('api_key'); - $this->secret = $cfgParse->getString('secret'); - $this->req_perms = $cfgParse->getString('req_perms', NULL); - $this->user_fields = $cfgParse->getString('user_fields', NULL); - } - - - /** - * Log-in using Facebook platform - * - * @param array &$state Information about the current authentication. - */ - public function authenticate(&$state) + $this->api_key = $cfgParse->getString('api_key'); + $this->secret = $cfgParse->getString('secret'); + $this->req_perms = $cfgParse->getString('req_perms', NULL); + $this->user_fields = $cfgParse->getString('user_fields', NULL); + } + + + /** + * Log-in using Facebook platform + * + * @param array &$state Information about the current authentication. + */ + public function authenticate(&$state) { - assert(is_array($state)); + assert(is_array($state)); - // We are going to need the authId in order to retrieve this authentication source later - $state[self::AUTHID] = $this->authId; - \SimpleSAML\Auth\State::saveState($state, self::STAGE_INIT); + // We are going to need the authId in order to retrieve this authentication source later + $state[self::AUTHID] = $this->authId; + \SimpleSAML\Auth\State::saveState($state, self::STAGE_INIT); - $facebook = new Module\authfacebook\Facebook(array('appId' => $this->api_key, 'secret' => $this->secret), $state); - $facebook->destroySession(); + $facebook = new Module\authfacebook\Facebook(array('appId' => $this->api_key, 'secret' => $this->secret), $state); + $facebook->destroySession(); - $linkback = Module::getModuleURL('authfacebook/linkback.php'); - $url = $facebook->getLoginUrl(array('redirect_uri' => $linkback, 'scope' => $this->req_perms)); - \SimpleSAML\Auth\State::saveState($state, self::STAGE_INIT); + $linkback = Module::getModuleURL('authfacebook/linkback.php'); + $url = $facebook->getLoginUrl(array('redirect_uri' => $linkback, 'scope' => $this->req_perms)); + \SimpleSAML\Auth\State::saveState($state, self::STAGE_INIT); - \SimpleSAML\Utils\HTTP::redirectTrustedURL($url); - } + \SimpleSAML\Utils\HTTP::redirectTrustedURL($url); + } - public function finalStep(&$state) + public function finalStep(&$state) { - assert(is_array($state)); - - $facebook = new Module\authfacebook\Facebook(array('appId' => $this->api_key, 'secret' => $this->secret), $state); - $uid = $facebook->getUser(); - - if (isset($uid) && $uid) { - try { - $info = $facebook->api("/".$uid.($this->user_fields ? "?fields=".$this->user_fields : "")); - } catch (\FacebookApiException $e) { - throw new \SimpleSAML\Error\AuthSource($this->authId, 'Error getting user profile.', $e); - } - } - - if (!isset($info)) { - throw new \SimpleSAML\Error\AuthSource($this->authId, 'Error getting user profile.'); - } + assert(is_array($state)); + + $facebook = new Module\authfacebook\Facebook(array('appId' => $this->api_key, 'secret' => $this->secret), $state); + $uid = $facebook->getUser(); + + if (isset($uid) && $uid) { + try { + $info = $facebook->api("/".$uid.($this->user_fields ? "?fields=".$this->user_fields : "")); + } catch (\FacebookApiException $e) { + throw new \SimpleSAML\Error\AuthSource($this->authId, 'Error getting user profile.', $e); + } + } + + if (!isset($info)) { + throw new \SimpleSAML\Error\AuthSource($this->authId, 'Error getting user profile.'); + } - $attributes = array(); - foreach ($info as $key => $value) { - if (is_string($value) && !empty($value)) { - $attributes['facebook.'.$key] = array((string)$value); - } - } + $attributes = array(); + foreach ($info as $key => $value) { + if (is_string($value) && !empty($value)) { + $attributes['facebook.'.$key] = array((string)$value); + } + } - if (array_key_exists('third_party_id', $info)) { - $attributes['facebook_user'] = array($info['third_party_id'].'@facebook.com'); - } else { - $attributes['facebook_user'] = array($uid.'@facebook.com'); - } + if (array_key_exists('third_party_id', $info)) { + $attributes['facebook_user'] = array($info['third_party_id'].'@facebook.com'); + } else { + $attributes['facebook_user'] = array($uid.'@facebook.com'); + } - $attributes['facebook_targetedID'] = array('http://facebook.com!' . $uid); - $attributes['facebook_cn'] = array($info['name']); + $attributes['facebook_targetedID'] = array('http://facebook.com!' . $uid); + $attributes['facebook_cn'] = array($info['name']); - \SimpleSAML\Logger::debug('Facebook Returned Attributes: '.implode(", ", array_keys($attributes))); + \SimpleSAML\Logger::debug('Facebook Returned Attributes: '.implode(", ", array_keys($attributes))); - $state['Attributes'] = $attributes; + $state['Attributes'] = $attributes; - $facebook->destroySession(); - } + $facebook->destroySession(); + } }