mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 20:44:04 +00:00
setup: Move 401 error check to channel.
Channel already handles all the requests and general errors related to them; so, channels seems the right place for this check.
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
import $ from "jquery";
|
import $ from "jquery";
|
||||||
|
|
||||||
import * as blueslip from "./blueslip";
|
import * as blueslip from "./blueslip";
|
||||||
|
import {page_params} from "./page_params";
|
||||||
import * as reload_state from "./reload_state";
|
import * as reload_state from "./reload_state";
|
||||||
|
import * as setup from "./setup";
|
||||||
|
|
||||||
const pending_requests = [];
|
const pending_requests = [];
|
||||||
|
|
||||||
@@ -52,7 +54,28 @@ function call(args, idempotent) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xhr.status === 403) {
|
if (xhr.status === 401) {
|
||||||
|
if (
|
||||||
|
setup.password_change_in_progress ||
|
||||||
|
setup.xhr_password_changes.get(xhr) !== setup.password_changes
|
||||||
|
) {
|
||||||
|
// The backend for handling password change API requests
|
||||||
|
// will replace the user's session; this results in a
|
||||||
|
// brief race where any API request will fail with a 401
|
||||||
|
// error after the old session is deactivated but before
|
||||||
|
// the new one has been propagated to the browser. So we
|
||||||
|
// skip our normal HTTP 401 error handling if we're in the
|
||||||
|
// process of executing a password change.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We got logged out somehow, perhaps from another window
|
||||||
|
// changing the user's password, or a session timeout. We
|
||||||
|
// could display an error message, but jumping right to
|
||||||
|
// the login page conveys the same information with a
|
||||||
|
// smoother relogin experience.
|
||||||
|
window.location.replace(page_params.login_page);
|
||||||
|
} else if (xhr.status === 403) {
|
||||||
try {
|
try {
|
||||||
if (
|
if (
|
||||||
JSON.parse(xhr.responseText).code === "CSRF_FAILED" &&
|
JSON.parse(xhr.responseText).code === "CSRF_FAILED" &&
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import * as util from "./util";
|
|||||||
// Miscellaneous early setup.
|
// Miscellaneous early setup.
|
||||||
export let password_change_in_progress = false;
|
export let password_change_in_progress = false;
|
||||||
export let password_changes = 0;
|
export let password_changes = 0;
|
||||||
const xhr_password_changes = new WeakMap();
|
export const xhr_password_changes = new WeakMap();
|
||||||
|
|
||||||
export function set_password_change_in_progress(value) {
|
export function set_password_change_in_progress(value) {
|
||||||
password_change_in_progress = value;
|
password_change_in_progress = value;
|
||||||
@@ -55,29 +55,6 @@ $(() => {
|
|||||||
xhr_password_changes.set(xhr, password_changes);
|
xhr_password_changes.set(xhr, password_changes);
|
||||||
});
|
});
|
||||||
|
|
||||||
// For some reason, jQuery wants this to be attached to an element.
|
|
||||||
$(document).ajaxError((event, xhr) => {
|
|
||||||
if (password_change_in_progress || xhr_password_changes.get(xhr) !== password_changes) {
|
|
||||||
// The backend for handling password change API requests
|
|
||||||
// will replace the user's session; this results in a
|
|
||||||
// brief race where any API request will fail with a 401
|
|
||||||
// error after the old session is deactivated but before
|
|
||||||
// the new one has been propagated to the browser. So we
|
|
||||||
// skip our normal HTTP 401 error handling if we're in the
|
|
||||||
// process of executing a password change.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (xhr.status === 401) {
|
|
||||||
// We got logged out somehow, perhaps from another window
|
|
||||||
// changing the user's password, or a session timeout. We
|
|
||||||
// could display an error message, but jumping right to
|
|
||||||
// the login page conveys the same information with a
|
|
||||||
// smoother re-login experience.
|
|
||||||
window.location.replace(page_params.login_page);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$.fn.expectOne = function () {
|
$.fn.expectOne = function () {
|
||||||
if (blueslip && this.length !== 1) {
|
if (blueslip && this.length !== 1) {
|
||||||
blueslip.error("Expected one element in jQuery set, " + this.length + " found");
|
blueslip.error("Expected one element in jQuery set, " + this.length + " found");
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ EXEMPT_FILES = {
|
|||||||
"static/js/billing/upgrade.js",
|
"static/js/billing/upgrade.js",
|
||||||
"static/js/blueslip.ts",
|
"static/js/blueslip.ts",
|
||||||
"static/js/blueslip_stacktrace.ts",
|
"static/js/blueslip_stacktrace.ts",
|
||||||
|
"static/js/channel.js",
|
||||||
"static/js/click_handlers.js",
|
"static/js/click_handlers.js",
|
||||||
"static/js/compose_actions.js",
|
"static/js/compose_actions.js",
|
||||||
"static/js/compose_closed_ui.js",
|
"static/js/compose_closed_ui.js",
|
||||||
|
|||||||
Reference in New Issue
Block a user