From 4724a093a854cc6efe383f1ae9f72cdd2c32542c Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 9 Nov 2006 11:00:24 +0100 Subject: [PATCH] improve session expiry handling (redirect back to login form on rpc error code 6) --- functions.js | 19 +++++++++++++++---- login.php | 9 +++++---- tt-rss.js | 23 ++++++++++++++++++++--- 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/functions.js b/functions.js index db1351510..d701710ce 100644 --- a/functions.js +++ b/functions.js @@ -779,6 +779,11 @@ function hideOrShowFeedsCategory(doc, node, hide, cat_node) { var cat_unread = 0; + if (!node) { + debug("hideOrShowFeeds: passed node is null, aborting"); + return; + } + if (node.hasChildNodes() && node.firstChild.nextSibling != false) { for (i = 0; i < node.childNodes.length; i++) { if (node.childNodes[i].nodeName != "LI") { continue; } @@ -1394,12 +1399,18 @@ function storeInitParams(params, is_client) { function fatalError(code, message) { try { - var fe = document.getElementById("fatal_error"); - var fc = document.getElementById("fatal_error_msg"); - fc.innerHTML = "Code " + code + ": " + message; + if (code != 6) { - fe.style.display = "block"; + var fe = document.getElementById("fatal_error"); + var fc = document.getElementById("fatal_error_msg"); + + fc.innerHTML = "Code " + code + ": " + message; + + fe.style.display = "block"; + } else { + window.location.href = "login.php?rt=none"; + } } catch (e) { exception_error("fatalError", e); diff --git a/login.php b/login.php index 8cd2a5c5d..27170c96b 100644 --- a/login.php +++ b/login.php @@ -9,6 +9,7 @@ $error_msg = ""; $url_path = get_script_urlpath(); + $return_to = $_REQUEST["rt"]; if (ENABLE_LOGIN_SSL) { $redirect_base = "https://" . $_SERVER["SERVER_NAME"] . $url_path; @@ -16,7 +17,7 @@ $redirect_base = "http://" . $_SERVER["SERVER_NAME"] . $url_path; } - if (SINGLE_USER_MODE) { + if (SINGLE_USER_MODE && $return_to != "none") { header("Location: $redirect_base/tt-rss.php"); exit; } @@ -25,10 +26,9 @@ $login = $_POST["login"]; $password = $_POST["password"]; - $return_to = $_POST["rt"]; $action = $_POST["action"]; - if ($_COOKIE[get_session_cookie_name()]) { + if ($_COOKIE[get_session_cookie_name()] && $return_to != "none") { require_once "sessions.php"; if ($_SESSION["uid"]) { initialize_user_prefs($link, $_SESSION["uid"]); @@ -129,7 +129,8 @@ window.onload = init; - + diff --git a/tt-rss.js b/tt-rss.js index 0884ce8ae..bf673174f 100644 --- a/tt-rss.js +++ b/tt-rss.js @@ -73,10 +73,22 @@ function refetch_callback() { return; } - var error_code = reply.getAttribute("error-code"); - + var error_code = false; + var error_msg = false; + + if (reply.firstChild) { + error_code = reply.firstChild.getAttribute("error-code"); + error_msg = reply.firstChild.getAttribute("error-msg"); + } + + if (!error_code) { + error_code = reply.getAttribute("error-code"); + error_msg = reply.getAttribute("error-msg"); + } + if (error_code && error_code != 0) { - return fatalError(error_code, reply.getAttribute("error-msg")); + debug("refetch_callback: got error code " + error_code); + return fatalError(error_code, error_msg); } var counters = reply.firstChild; @@ -535,6 +547,11 @@ function toggleDispRead() { } function parse_runtime_info(elem) { + if (!elem) { + debug("parse_runtime_info: elem is null, aborting"); + return; + } + var param = elem.firstChild; debug("parse_runtime_info: " + param);