From ea4f6bcef2f1c3ba8f84115d3de3af0d8e5820d2 Mon Sep 17 00:00:00 2001 From: Angie Byron Date: Wed, 7 Jul 2010 08:05:01 +0000 Subject: =?UTF-8?q?#363580=20by=20rfay,=20chx,=20Berdir,=20Rob=20Loach,=20?= =?UTF-8?q?G=C3=A1bor=20Hojtsy,=20Shawn=20DeArmond:=20Fixed=20OpenID=20log?= =?UTF-8?q?in=20fails=20when=20in=20maintenance=20mode,=20and=20403=20erro?= =?UTF-8?q?rs=20on=20certain=20user=20paths=20for=20logged-in=20users.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/openid/openid.module | 10 ++++++++++ modules/openid/openid.test | 32 ++++++++++++++++++++++++++++++++ modules/openid/tests/openid_test.module | 10 ++++++++++ 3 files changed, 52 insertions(+) (limited to 'modules/openid') diff --git a/modules/openid/openid.module b/modules/openid/openid.module index 9a6e7edfb..99d37cf4c 100644 --- a/modules/openid/openid.module +++ b/modules/openid/openid.module @@ -38,6 +38,16 @@ function openid_menu() { return $items; } +/** + * Implements hook_menu_site_status_alter(). + */ +function openid_menu_site_status_alter(&$menu_site_status, $path) { + // Allow access to openid/authenticate even if site is in offline mode. + if ($menu_site_status == MENU_SITE_OFFLINE && user_is_anonymous() && $path == 'openid/authenticate') { + $menu_site_status = MENU_SITE_ONLINE; + } +} + /** * Implements hook_help(). */ diff --git a/modules/openid/openid.test b/modules/openid/openid.test index cf90161fd..68313ae7e 100644 --- a/modules/openid/openid.test +++ b/modules/openid/openid.test @@ -146,6 +146,38 @@ class OpenIDFunctionalTestCase extends OpenIDWebTestCase { $this->assertResponse(200); } + /** + * Test login using OpenID during maintenance mode. + */ + function testLoginMaintenanceMode() { + $this->web_user = $this->drupalCreateUser(array('access site in maintenance mode')); + $this->drupalLogin($this->web_user); + + // Use a User-supplied Identity that is the URL of an XRDS document. + $identity = url('openid-test/yadis/xrds', array('absolute' => TRUE)); + $this->addIdentity($identity); + $this->drupalLogout(); + + // Enable maintenance mode. + variable_set('maintenance_mode', 1); + + // Test logging in via the user/login page while the site is offline. + $edit = array('openid_identifier' => $identity); + $this->drupalPost('user/login', $edit, t('Log in')); + + // Check we are on the OpenID redirect form. + $this->assertTitle(t('OpenID redirect'), t('OpenID redirect page was displayed.')); + + // Submit form to the OpenID Provider Endpoint. + $this->drupalPost(NULL, array(), t('Send')); + + $this->assertLink($this->web_user->name, 0, t('User was logged in.')); + + // Verify user was redirected away from user/login to an accessible page. + $this->assertText(t('Operating in maintenance mode.')); + $this->assertResponse(200); + } + /** * Test deleting an OpenID identity from a user's profile. */ diff --git a/modules/openid/tests/openid_test.module b/modules/openid/tests/openid_test.module index 261a1aa1e..5beb5fa41 100644 --- a/modules/openid/tests/openid_test.module +++ b/modules/openid/tests/openid_test.module @@ -64,6 +64,16 @@ function openid_test_menu() { return $items; } +/** + * Implements hook_menu_site_status_alter(). + */ +function openid_test_menu_site_status_alter(&$menu_site_status, $path) { + // Allow access to openid endpoint and identity even in offline mode. + if ($menu_site_status == MENU_SITE_OFFLINE && user_is_anonymous() && in_array($path, array('openid-test/yadis/xrds', 'openid-test/endpoint'))) { + $menu_site_status = MENU_SITE_ONLINE; + } +} + /** * Menu callback; XRDS document that references the OP Endpoint URL. */ -- cgit v1.2.3