]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
prevent password login actions in OpenID-only mode
authorEvan Prodromou <evan@status.net>
Tue, 23 Mar 2010 16:58:10 +0000 (12:58 -0400)
committerEvan Prodromou <evan@status.net>
Tue, 23 Mar 2010 16:58:10 +0000 (12:58 -0400)
plugins/OpenID/OpenIDPlugin.php

index 24e4e0c3204f488a0ae9c399b8a5e928e1116384..270e2c624b57530f8e7376d39271cdcb00774cfa 100644 (file)
@@ -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
      *
@@ -76,6 +71,60 @@ class OpenIDPlugin extends Plugin
         return true;
     }
 
+    /**
+     * 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
      *
@@ -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()) {