Implement account suspension, right to delete any message for owner, account deletion

This commit is contained in:
2025-10-22 19:50:45 +03:00
Unverified
parent 9e19342998
commit a95efcdcf8
21 changed files with 932 additions and 337 deletions
+40 -5
View File
@@ -26,6 +26,9 @@ export interface ProfileDialogData {
online?: boolean;
isOwnProfile: boolean;
verified?: boolean;
suspended?: boolean;
suspension_reason?: string | null;
deleted?: boolean;
}
interface ActiveDM {
@@ -73,6 +76,8 @@ interface ChatState {
export interface UserState {
currentUser: User | null;
authToken: string | null;
isSuspended: boolean;
suspensionReason: string | null;
}
interface AppState {
@@ -112,6 +117,7 @@ interface AppState {
setUser: (token: string, user: User) => void;
logout: () => void;
restoreUserFromStorage: () => Promise<void>;
setSuspended: (reason: string) => void;
// Profile dialog state
setProfileDialog: (data: ProfileDialogData | null) => void;
@@ -226,13 +232,17 @@ export const useAppState = create<AppState>((set, get) => ({
// User state
user: {
currentUser: null,
authToken: null
authToken: null,
isSuspended: false,
suspensionReason: null
},
setUser: (token: string, user: User) => {
set(() => ({
user: {
currentUser: user,
authToken: token
authToken: token,
isSuspended: user.suspended || false,
suspensionReason: user.suspension_reason || null
}
}));
@@ -279,7 +289,9 @@ export const useAppState = create<AppState>((set, get) => ({
set(() => ({
user: {
currentUser: null,
authToken: null
authToken: null,
isSuspended: false,
suspensionReason: null
}
}));
},
@@ -296,10 +308,25 @@ export const useAppState = create<AppState>((set, get) => ({
const user: User = await response.json();
restoreKeys();
// Check if user is suspended
if (user.suspended) {
set(() => ({
user: {
currentUser: user,
authToken: token,
isSuspended: true,
suspensionReason: user.suspension_reason || null
}
}));
return; // Don't initialize managers or notifications for suspended users
}
set(() => ({
user: {
currentUser: user,
authToken: token
authToken: token,
isSuspended: false,
suspensionReason: null
}
}));
@@ -679,5 +706,13 @@ export const useAppState = create<AppState>((set, get) => ({
dmTypingUsers: newDmTypingUsers
}
};
})
}),
setSuspended: (reason: string) => set((state) => ({
user: {
...state.user,
isSuspended: true,
suspensionReason: reason
}
}))
}));