server_events_dispatch: Handle "realm_user/remove" event.

This commit adds code to handle "realm_user/remove" event which
is received when a guest loses access to a user.
This commit is contained in:
Sahil Batra
2023-12-02 09:16:02 +05:30
committed by Tim Abbott
parent bd1d0e6b46
commit fef833008f
4 changed files with 35 additions and 0 deletions

View File

@@ -1408,6 +1408,16 @@ export function deactivate(person: User): void {
non_active_user_dict.set(person.user_id, person); non_active_user_dict.set(person.user_id, person);
} }
export function remove_inaccessible_user(user_id: number): void {
// We do not track inaccessible users in active_user_dict.
active_user_dict.delete(user_id);
// Create unknown user object for the inaccessible user.
const email = "user" + user_id + "@" + page_params.realm_bot_domain;
const unknown_user = make_user(user_id, email, INACCESSIBLE_USER_NAME);
_add_user(unknown_user);
}
export function report_late_add(user_id: number, email: string): void { export function report_late_add(user_id: number, email: string): void {
// If the events system is not running, then it is expected that // If the events system is not running, then it is expected that
// we will fetch messages from the server that were sent by users // we will fetch messages from the server that were sent by users

View File

@@ -8,6 +8,7 @@ import * as audible_notifications from "./audible_notifications";
import * as blueslip from "./blueslip"; import * as blueslip from "./blueslip";
import * as bot_data from "./bot_data"; import * as bot_data from "./bot_data";
import * as browser_history from "./browser_history"; import * as browser_history from "./browser_history";
import {buddy_list} from "./buddy_list";
import * as compose_call from "./compose_call"; import * as compose_call from "./compose_call";
import * as compose_call_ui from "./compose_call_ui"; import * as compose_call_ui from "./compose_call_ui";
import * as compose_pm_pill from "./compose_pm_pill"; import * as compose_pm_pill from "./compose_pm_pill";
@@ -471,6 +472,16 @@ export function dispatch_normal_event(event) {
settings_users.update_bot_data(event.person.user_id); settings_users.update_bot_data(event.person.user_id);
} }
break; break;
case "remove": {
const user_id = event.person.user_id;
people.remove_inaccessible_user(user_id);
buddy_list.maybe_remove_user_id({user_id});
message_live_update.update_user_full_name(
user_id,
people.INACCESSIBLE_USER_NAME,
);
break;
}
default: default:
blueslip.error("Unexpected event type realm_user/" + event.op); blueslip.error("Unexpected event type realm_user/" + event.op);
break; break;

View File

@@ -736,6 +736,11 @@ run_test("realm_user", ({override}) => {
assert.equal(update_bot_stub.num_calls, 1); assert.equal(update_bot_stub.num_calls, 1);
args = update_bot_stub.get_args("update_user_id", "update_bot_data"); args = update_bot_stub.get_args("update_user_id", "update_bot_data");
assert_same(args.update_user_id, event.person.user_id); assert_same(args.update_user_id, event.person.user_id);
event = event_fixtures.realm_user__remove;
dispatch(event);
const removed_person = people.get_by_user_id(event.person.user_id);
assert.equal(removed_person.full_name, "translated: Unknown user");
}); });
run_test("restart", ({override}) => { run_test("restart", ({override}) => {

View File

@@ -563,6 +563,15 @@ exports.fixtures = {
}, },
}, },
realm_user__remove: {
type: "realm_user",
op: "remove",
person: {
user_id: test_user.user_id,
full_name: "Unknown user",
},
},
realm_user__update: { realm_user__update: {
type: "realm_user", type: "realm_user",
op: "update", op: "update",