diff --git a/actions/accesstoken.php b/actions/accesstoken.php index 6bb0e1561b..4f683ba24f 100644 --- a/actions/accesstoken.php +++ b/actions/accesstoken.php @@ -24,7 +24,7 @@ class AccesstokenAction extends Action { parent::handle($args); try { $req = OAuthRequest::from_request(); - $server = common_oauth_server(); + $server = omb_oauth_server(); $token = $server->fetch_access_token($req); print $token; } catch (OAuthException $e) { diff --git a/actions/login.php b/actions/login.php index 9f9c473b51..d25d59cf73 100644 --- a/actions/login.php +++ b/actions/login.php @@ -44,9 +44,16 @@ class LoginAction extends Action { return; } # success! - common_redirect(common_local_url('all', - array('nickname' => - $nickname))); + $url = common_get_returnto(); + if ($url) { + # We don't have to return to it again + common_set_returnto(NULL); + } else { + $url = common_local_url('all', + array('nickname' => + $nickname)); + } + common_redirect($url); } else { $this->show_form(_t('Incorrect username or password.')); } diff --git a/actions/requesttoken.php b/actions/requesttoken.php index 92b4c42342..0e233ff179 100644 --- a/actions/requesttoken.php +++ b/actions/requesttoken.php @@ -26,7 +26,7 @@ class RequesttokenAction extends Action { parent::handle($args); try { $req = OAuthRequest::from_request(); - $server = common_oauth_server(); + $server = omb_oauth_server(); $token = $server->fetch_request_token($req); print $token; } catch (OAuthException $e) { diff --git a/actions/userauthorization.php b/actions/userauthorization.php index cc7ec85a51..ee156bd79e 100644 --- a/actions/userauthorization.php +++ b/actions/userauthorization.php @@ -29,7 +29,10 @@ class UserauthorizationAction extends Action { try { $req = $this->get_request(); $server = common_oauth_server(); - list($consumer, $token) = $server->verify_request($req); + $server->get_version($req); + $consumer = $server->get_consumer($req); + $token = $server->get_token($req, $consumer, "request"); + $server->check_signature($req, $consumer, $token); } catch (OAuthException $e) { $this->clear_request(); common_server_error($e->getMessage()); @@ -39,7 +42,8 @@ class UserauthorizationAction extends Action { if (common_logged_in()) { $this->show_form($req); } else { - common_return_to(common_local_url('userauthorization')); + # Go log in, and then come back + common_set_returnto(common_local_url('userauthorization')); common_redirect(common_local_url('login')); } } @@ -56,7 +60,9 @@ class UserauthorizationAction extends Action { if (!$req) { # XXX: may have an uncaught exception $req = OAuthRequest::from_request(); - $this->store_request($req); + if ($req) { + $this->store_request($req); + } } return $req; } @@ -69,6 +75,7 @@ class UserauthorizationAction extends Action { function send_authorization() { $req = $this->get_request(); + if (!$req) { common_user_error(_t('No authorization request!')); return; diff --git a/doc/README b/doc/README index 28ff069592..ad73329694 100644 --- a/doc/README +++ b/doc/README @@ -9,5 +9,7 @@ This package requires PHP 5.x and the following PHP Pear libraries: use the openidenabled.com libraries for OpenID auth sometime in the future. Note that this is no longer distributed separately; it's only in the openidenabled.com OpenID PHP tarball. - + http://openidenabled.com/php-openid/ +- OAuth.php from http://oauth.googlecode.com/svn/code/php/ +- markdown.php from http://michelf.com/projects/php-markdown/ diff --git a/lib/oauthstore.php b/lib/oauthstore.php index a622647b72..4d2ce9a58d 100644 --- a/lib/oauthstore.php +++ b/lib/oauthstore.php @@ -23,7 +23,7 @@ require_once(INSTALLDIR.'/lib/omb.php'); class LaconicaOAuthDataStore extends OAuthDataStore { - # We just keep a record of who's contacted us + # We keep a record of who's contacted us function lookup_consumer($consumer_key) { $con = new Consumer('key', $consumer_key); diff --git a/lib/omb.php b/lib/omb.php index b68d08abf9..df4ffb4b2a 100644 --- a/lib/omb.php +++ b/lib/omb.php @@ -20,6 +20,7 @@ if (!defined('LACONICA')) { exit(1); } require_once('OAuth.php'); +require_once(INSTALLDIR.'lib/oauthstore.php'); define('OAUTH_NAMESPACE', 'http://oauth.net/core/1.0/'); define('OMB_NAMESPACE', 'http://openmicroblogging.org/protocol/0.1'); @@ -44,6 +45,14 @@ function omb_oauth_consumer() { return $con; } +function omb_oauth_server() { + static $server = null; + if ($server) { + $server = new OAuthServer(new LaconicaOAuthStore()); + } + return $server; +} + function omb_hmac_sha1() { static $hmac_method = NULL; if (!$hmac_method) { diff --git a/lib/util.php b/lib/util.php index 30bd4d3aec..2d4fc27667 100644 --- a/lib/util.php +++ b/lib/util.php @@ -525,6 +525,16 @@ function common_mtrand($bytes) { return $enc; } +function common_set_returnto($url) { + common_ensure_session(); + $_SESSION['returnto'] = $url; +} + +function common_get_returnto() { + common_ensure_session(); + return $_SESSION['returnto']; +} + function common_timestamp() { return date('YmdHis'); }