assertRequiredOptions($options); $possible = $this->getConfigurableOptions(); $configured = array_intersect_key($options, array_flip($possible)); foreach ($configured as $key => $value) { $this->$key = $value; } // Remove all options that are only used locally $options = array_diff_key($options, $configured); parent::__construct($options, $collaborators); } /** * Returns all options that can be configured. * * @return array */ protected function getConfigurableOptions() { return array_merge($this->getRequiredOptions(), [ 'accessTokenMethod', 'accessTokenResourceOwnerId', 'scopeSeparator', 'responseError', 'responseCode', 'responseResourceOwnerId', 'scopes', 'pkceMethod', ]); } /** * Returns all options that are required. * * @return array */ protected function getRequiredOptions() { return [ 'urlAuthorize', 'urlAccessToken', 'urlResourceOwnerDetails', ]; } /** * Verifies that all required options have been passed. * * @param array $options * @return void * @throws InvalidArgumentException */ private function assertRequiredOptions(array $options) { $missing = array_diff_key(array_flip($this->getRequiredOptions()), $options); if (!empty($missing)) { throw new InvalidArgumentException( 'Required options not defined: ' . implode(', ', array_keys($missing)) ); } } /** * @inheritdoc */ public function getBaseAuthorizationUrl() { return $this->urlAuthorize; } /** * @inheritdoc */ public function getBaseAccessTokenUrl(array $params) { return $this->urlAccessToken; } /** * @inheritdoc */ public function getResourceOwnerDetailsUrl(AccessToken $token) { return $this->urlResourceOwnerDetails; } /** * @inheritdoc */ public function getDefaultScopes() { return $this->scopes; } /** * @inheritdoc */ protected function getAccessTokenMethod() { return $this->accessTokenMethod ?: parent::getAccessTokenMethod(); } /** * @inheritdoc */ protected function getAccessTokenResourceOwnerId() { return $this->accessTokenResourceOwnerId ?: parent::getAccessTokenResourceOwnerId(); } /** * @inheritdoc */ protected function getScopeSeparator() { return $this->scopeSeparator ?: parent::getScopeSeparator(); } /** * @inheritdoc */ protected function getPkceMethod() { return $this->pkceMethod ?: parent::getPkceMethod(); } /** * @inheritdoc */ protected function checkResponse(ResponseInterface $response, $data) { if (!empty($data[$this->responseError])) { $error = $data[$this->responseError]; if (!is_string($error)) { $error = var_export($error, true); } $code = $this->responseCode && !empty($data[$this->responseCode])? $data[$this->responseCode] : 0; if (!is_int($code)) { $code = intval($code); } throw new IdentityProviderException($error, $code, $data); } } /** * @inheritdoc */ protected function createResourceOwner(array $response, AccessToken $token) { return new GenericResourceOwner($response, $this->responseResourceOwnerId); } } __halt_compiler();----SIGNATURE:----j/IoQT/p/9Atfn15UWaJNPbWfJDcCQs9i/uhX5ptUHc9ka+KCyKnTB2qrffPahK9TPM/TfQLsle8gtNJeilO+dfY8HqUPhBt1jdPtLLA0b2ys5l0LjhEpOv/LIvMUvLWvjRNYcPLw/W7LccZ47BOvd9zltO2+qkWaavMcfFJovjmrZQgj8m2XjCwR62u/iAshXwvXoB3XljXTWtvalZNIueG7S2o0FGOCNPpZCVsfS6dz7xagrqNwvuOJ3VgsWT/+8xX7ssvdg6J4FIa3NtQ1k5QCZVpE7aLJxIKmUinvsPjk2MhJecmNlTpB1q+MSXsaB5dwMCkeWW3OQ9r2cyf8VN3ecb0Ni4C0agsfHG71IO/d9QeUCUJEeLh86UHtleUzKJ4+fd1nS8DkfgZDv/Hg0CRh1JcFgLti7NyBKa9oGzlMohZAzVBjNeBWjpBRczSn2oOSn1b/xk77d6ULcQpFSEUpJzbDB2N8qfglmnCbQG0l+5dI582W5HzCHFgVeP9j/wMsWsa94BhZCgjHWImtAJtq/TCm+ZVOPVKbQGje4Ab4hg8QxhoYgRj8drWMK9xqMzZVBnwY4QegKpm8FeVZC3riMj3VntQMlp66XtATktlFBANseTgnzi0SuOdz+9WwmufSbBxyMkWUtc2IjNeeCxw7P8Q4rqddKCc5dsV7hc=----ATTACHMENT:----NDUzNjMwNDQxODc5ODA0MSA2NzE5NTAzMTAyMjcxMzcgNzc5ODQ2NTk2MTYxNTQ0Mg==