diff options
author | Evan Prodromou <evan@status.net> | 2010-03-23 12:58:10 -0400 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2010-03-23 12:58:10 -0400 |
commit | ad608ab9add1615d6aae3fde239e54d1eb36b0ca (patch) | |
tree | 0d19d598ec3a5d9a506b3f5b3b548fc99aeeb434 | |
parent | dd115fcb080bbd06ccefdd091604574945b6ec54 (diff) |
prevent password login actions in OpenID-only mode
-rw-r--r-- | plugins/OpenID/OpenIDPlugin.php | 67 |
1 files changed, 62 insertions, 5 deletions
diff --git a/plugins/OpenID/OpenIDPlugin.php b/plugins/OpenID/OpenIDPlugin.php index 24e4e0c32..270e2c624 100644 --- a/plugins/OpenID/OpenIDPlugin.php +++ b/plugins/OpenID/OpenIDPlugin.php @@ -47,11 +47,6 @@ class OpenIDPlugin extends Plugin { public $openidOnly = false; - function initialize() - { - common_debug("OpenID plugin running with openidonly = {$this->openidOnly}"); - } - /** * Add OpenID-related paths to the router table * @@ -77,6 +72,60 @@ class OpenIDPlugin extends Plugin } /** + * In OpenID-only mode, disable paths for password stuff + * + * @param string $path path to connect + * @param array $defaults path defaults + * @param array $rules path rules + * @param array $result unused + * + * @return boolean hook return + */ + + function onStartConnectPath(&$path, &$defaults, &$rules, &$result) + { + if ($this->openidOnly) { + static $block = array('main/login', + 'main/register', + 'main/recoverpassword', + 'settings/password'); + + if (in_array($path, $block)) { + return false; + } + } + + return true; + } + + /** + * If we've been hit with password-login args, redirect + * + * @param array $args args (URL, Get, post) + * + * @return boolean hook return + */ + + function onArgsInitialize($args) + { + if ($this->openidOnly) { + if (array_key_exists('action', $args)) { + $action = trim($args['action']); + if (in_array($action, array('login', 'register'))) { + common_redirect(common_local_url('openidlogin')); + exit(0); + } else if ($action == 'passwordsettings') { + common_redirect(common_local_url('openidsettings')); + exit(0); + } else if ($action == 'recoverpassword') { + throw new ClientException('Unavailable action'); + } + } + } + return true; + } + + /** * Public XRDS output hook * * Puts the bits of code needed by some OpenID providers to show @@ -140,6 +189,14 @@ class OpenIDPlugin extends Plugin $xrdsOutputter->elementEnd('XRD'); } + /** + * If we're in OpenID-only mode, hide all the main menu except OpenID login. + * + * @param Action $action Action being run + * + * @return boolean hook return + */ + function onStartPrimaryNav($action) { if ($this->openidOnly && !common_logged_in()) { |