mirror of
https://github.com/fromchat-messenger/web.git
synced 2026-09-23 03:25:07 +03:00
Implement account suspension, right to delete any message for owner, account deletion
This commit is contained in:
@@ -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
|
||||
}
|
||||
}))
|
||||
}));
|
||||
Reference in New Issue
Block a user