public function login($consumerKey = null, $consumerSecret = null, $callback = '', $redirect = true) { // FIXME: $redirect should probably be allowed to be an object that implements a redirect() method $session = ar_loader::session(); //FIXME: allow different session object to be passed if (!$session->id()) { $session->start(); } if (isset($callback) && substr((string) $callback, 0, 4) != 'http' && $callback != 'oob') { $callback = ar_loader::makeURL() . $callback; } if (!$this->client instanceof ar_connect_oauthClient) { ////FIXME: a real OAuth is also ok // FIXME: what if you want a caching client? $this->client = ar_connect_oauth::client($consumerKey, $consumerSecret); if (ar_error::isError($this->client)) { return $this->client; } } $access_token = $session->getvar('access_token'); $access_token_secret = $session->getvar('access_token_secret'); if ($access_token && $access_token_secret) { $this->client->setToken($access_token, $access_token_secret); return true; } $oauth_verifier = $session->getvar('oauth_verifier'); $oauth_token = $session->getvar('oauth_token'); $oauth_token_secret = $session->getvar('oauth_token_secret'); if (!$oauth_verifier) { $oauth_verifier = ar::getvar('oauth_verifier'); if ($oauth_verifier) { $session->putvar('oauth_verifier', $oauth_verifier); } else { if (!$callback) { $callback = 'oob'; } $info = $this->client->getRequestToken('https://api.twitter.com/oauth/request_token', (string) $callback); if (ar_error::isError($info)) { $info->debugInfo = $this->client->debugInfo; return $info; } $this->client->setToken($info['oauth_token'], $info['oauth_token_secret']); $session->putvar('oauth_token', $info['oauth_token']); $session->putvar('oauth_token_secret', $info['oauth_token_secret']); if ($redirect) { ar_loader::redirect('https://api.twitter.com/oauth/authorize?oauth_token=' . RawUrlEncode($info['oauth_token'])); return false; } else { return 'https://api.twitter.com/oauth/authorize?oauth_token=' . RawUrlEncode($info['oauth_token']); } } } if ($oauth_verifier) { $this->client->setToken($oauth_token, $oauth_token_secret); $info = $this->client->getAccessToken('https://api.twitter.com/oauth/access_token', '', $oauth_verifier); if (ar_error::isError($info)) { $info->debugInfo = $this->client->debugInfo; return $info; } $access_token = $info['oauth_token']; $access_token_secret = $info['oauth_token_secret']; $this->client->setToken($access_token, $access_token_secret); $session->putvar('access_token', $access_token); $session->putvar('access_token_secret', $access_token_secret); return $info; } return false; }
public static function session() { if (!self::$session) { self::$session = new ar_loaderSession(); } return self::$session; }