summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Prodromou <evan@status.net>2010-03-23 12:58:10 -0400
committerEvan Prodromou <evan@status.net>2010-03-23 12:58:10 -0400
commitad608ab9add1615d6aae3fde239e54d1eb36b0ca (patch)
tree0d19d598ec3a5d9a506b3f5b3b548fc99aeeb434
parentdd115fcb080bbd06ccefdd091604574945b6ec54 (diff)
prevent password login actions in OpenID-only mode
-rw-r--r--plugins/OpenID/OpenIDPlugin.php67
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()) {