function _oauthconnector_fetch_field in OAuth Connector 6
Same name and namespace in other branches
- 7 oauthconnector.module \_oauthconnector_fetch_field()
3 calls to _oauthconnector_fetch_field()
- oauthconnector_oauth_common_authorized in ./
oauthconnector.module - Implementation of hook_oauth_common_authorized().
- _oauthconnector_avatar in ./
oauthconnector.module - Information callback
- _oauthconnector_info in ./
oauthconnector.module - Information callback
File
- ./
oauthconnector.module, line 428 - OAuth Connector module
Code
function _oauthconnector_fetch_field($field, $provider, $access_token, $consumer = NULL) {
static $cache = array();
$field = $provider->mapping['fields'][$field];
if (!isset($cache[$access_token->token_key])) {
$cache[$access_token->token_key] = array();
}
if (!isset($cache[$access_token->token_key][$field['method post']])) {
$cache[$access_token->token_key][$field['method post']] = array();
}
if (!isset($cache[$access_token->token_key][$field['method post']][$field['resource']])) {
// Load the consumer token if needed
if (!$consumer) {
$consumer = DrupalOAuthConsumer::loadById($provider->csid, FALSE);
}
// Set up the rest client
$sig_method = DrupalOAuthClient::signatureMethod(substr(strtolower($provider->consumer_advanced['signature method']), 5));
$realm = empty($provider->consumer_advanced['authentication realm']) ? NULL : $provider->consumer_advanced['authentication realm'];
$auth = new HttpClientOAuth($consumer, $access_token, $sig_method, TRUE, TRUE, $realm);
switch ($provider->mapping['format']) {
case 'xml':
$formatter = new HttpClientXMLFormatter();
break;
case 'php':
$formatter = new HttpClientBaseFormatter(HttpClientBaseFormatter::FORMAT_PHP);
break;
default:
$formatter = new HttpClientBaseFormatter(HttpClientBaseFormatter::FORMAT_JSON);
break;
}
$client = new HttpClient($auth, $formatter);
// Fetch the external user
$request_method = empty($field['method post']) ? 'get' : 'post';
try {
$info = (array) $client
->{$request_method}($field['resource']);
$cache[$access_token->token_key][$field['method post']][$field['resource']] = $info;
} catch (Exception $e) {
if (is_a($e, 'HttpClientException')) {
if ($e
->getCode() == 401) {
//TODO: Save the failure in some way so that we can stop trying to use a revoked token?
watchdog('oauthconnector', "User !uid not authenticated for %resource: @message", array(
'!uid' => $access_token->uid,
'%resource' => $field['resource'],
'@message' => $e
->getMessage(),
), WATCHDOG_WARNING);
}
elseif ($e
->getCode() == 400) {
watchdog('oauthconnector', "Bad request of %resource: @message", array(
'%resource' => $field['resource'],
'@message' => $e
->getMessage(),
), WATCHDOG_ERROR);
}
}
else {
watchdog('oauthconnector', 'Failed to fetch of %resource: @message', array(
'%resource' => $field['resource'],
'@message' => $e
->getMessage(),
), WATCHDOG_WARNING);
}
}
}
else {
$info = $cache[$access_token->token_key][$field['method post']][$field['resource']];
}
$response = FALSE;
if (!empty($info)) {
if (!empty($field['querypath']) && module_exists('querypath')) {
//TODO: Perhaps cache this QueryPath object as well?
$response = _oauthconnector_object_to_qp(qp('<?xml version="1.0"?><reponse/>'), $info)
->find($field['field'])
->eq(0)
->text();
}
elseif (!empty($info[$field['field']])) {
$response = $info[$field['field']];
}
}
return $response;
}