You are here

function _oauthconnector_button in OAuth Connector 6

Same name and namespace in other branches
  1. 7 oauthconnector.module \_oauthconnector_button()
1 call to _oauthconnector_button()
_oauthconnector_connect_button in ./oauthconnector.module
1 string reference to '_oauthconnector_button'
oauthconnector_connector in ./oauthconnector.module
Implementation of hook_connector().

File

./oauthconnector.module, line 372
OAuth Connector module

Code

function _oauthconnector_button($form, &$form_state, $login = TRUE) {
  global $user;

  //TODO: Move some of the contens of this function to oauth_common_get_request_token()?
  $provider = $form_state['clicked_button']['connector']['#value']['oauthconnector provider'];
  $callback_url = url('oauth/authorized', array(
    'absolute' => TRUE,
  ));
  $consumer = DrupalOAuthConsumer::loadById($provider->csid, FALSE);
  $sig_method = DrupalOAuthClient::signatureMethod(substr(strtolower($provider->consumer_advanced['signature method']), 5));
  $client = new DrupalOAuthClient($consumer, NULL, $sig_method);

  //TODO: Deal with errors! Add a try-catch
  $request_token = $client
    ->getRequestToken($provider->consumer_advanced['request token endpoint'], array(
    'realm' => $provider->consumer_advanced['authentication realm'],
    'callback' => $callback_url,
  ));
  if (!$login) {
    $request_token->uid = $user->uid;
  }
  $request_token
    ->write();

  //TODO: If 'oauthconnector_request_key' is already set - then remove the old one - we can only use one at a time
  $_SESSION['oauthconnector_request_key'] = $request_token->key;
  $_SESSION['oauthconnector_login'] = $login;
  $auth_url = $client
    ->getAuthorizationUrl($provider->consumer_advanced['authorization endpoint'], array(
    'callback' => $callback_url,
  ));
  if (isset($_REQUEST['destination'])) {
    $destination = $_REQUEST['destination'];
    unset($_REQUEST['destination']);
  }
  elseif (isset($_REQUEST['edit']['destination'])) {
    $destination = $_REQUEST['edit']['destination'];
    unset($_REQUEST['edit']['destination']);
  }
  else {
    $destination = isset($_GET['q']) ? $_GET['q'] : '';
    $query = drupal_query_string_encode($_GET, array(
      'q',
    ));
    if ($query != '') {
      $destination .= '?' . $query;
    }
  }
  $_SESSION['oauthconnector_destination'] = $destination;
  drupal_goto($auth_url);
}