plugins/yubikey/usercp.php
changeset 35 03d6287d4a8b
parent 32 b00055a88867
child 37 5e946a3f405b
--- a/plugins/yubikey/usercp.php	Fri Dec 18 19:28:57 2009 -0500
+++ b/plugins/yubikey/usercp.php	Fri Dec 18 19:29:33 2009 -0500
@@ -105,12 +105,33 @@
       $db->_die();
     list($password_hmac) = $db->fetchrow_num();
     
-    $session->register_session($session->user_id, $session->username, $password_hmac, USER_LEVEL_MEMBER, false);
+    @$session->register_session($session->user_id, $session->username, $password_hmac, USER_LEVEL_MEMBER, false);
     $session->logout(USER_LEVEL_CHPREF);
     
     // redirect back to normal CP
-    @ob_end_clean();
-    redirect(makeUrlNS('Special', 'Preferences'), $lang->get('yubiucp_msg_save_title'), $lang->get('yubiucp_msg_save_body'), 3);
+    // if OB-ing isn't enabled, require a JS redirect (hey, not many other options...)
+    if ( @ob_get_contents() )
+    {
+      @ob_end_clean();
+      redirect(makeUrlNS('Special', 'Preferences'), $lang->get('yubiucp_msg_save_title'), $lang->get('yubiucp_msg_save_body'), 3);
+    }
+    else
+    {
+      echo '<h3>' . $lang->get('yubiucp_msg_save_title') . '</h3>';
+      echo '<p>' . $lang->get('yubiucp_msg_save_body') . '</p>';
+      // not much choice here, i'm resorting to javascript because the user CP always
+      // sends headers :-/
+      echo '<script type="text/javascript">
+        addOnloadHook(function()
+        {' .
+        // note: $_COOKIE['sid'] has just been assigned by $session->register_session() - so it's safe to use here.
+        '
+          createCookie(\'sid\', \'' . $_COOKIE['sid'] . '\');
+          window.location = makeUrlNS(\'Special\', \'Preferences\');
+        });
+      </script>';
+      return true;
+    }
   }
   else
   {