mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +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