Skip to content

Commit f5a50ab

Browse files
authored
Merge pull request #308 from fccview/develop
SECURITY UPDATE
2 parents 18cf217 + f4d3563 commit f5a50ab

18 files changed

Lines changed: 120 additions & 61 deletions

File tree

app/_components/FeatureComponents/Header/QuickNav.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Button } from "@/app/_components/GlobalComponents/Buttons/Button";
1010
import { useRouter } from "next/navigation";
1111
import { useAppMode } from "@/app/_providers/AppModeProvider";
1212
import { useNavigationGuard } from "@/app/_providers/NavigationGuardProvider";
13-
import { AppMode, User } from "@/app/_types";
13+
import { AppMode, User, SanitisedUser } from "@/app/_types";
1414
import { Modes } from "@/app/_types/enums";
1515
import { cn } from "@/app/_utils/global-utils";
1616
import { NavigationGlobalIcon } from "../Navigation/Parts/NavigationGlobalIcon";
@@ -22,7 +22,7 @@ interface QuickNavProps {
2222
showSidebarToggle?: boolean;
2323
onSidebarToggle?: () => void;
2424
onOpenSettings?: () => void;
25-
user: User | null;
25+
user: SanitisedUser | null;
2626
onModeChange?: (mode: AppMode) => void;
2727
currentLocale: string;
2828
}

app/_components/FeatureComponents/Profile/Parts/ProfileTab.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { useRouter } from "next/navigation";
2222
import { UserAvatar } from "@/app/_components/GlobalComponents/User/UserAvatar";
2323
import { useAppMode } from "@/app/_providers/AppModeProvider";
2424
import { generateApiKey, getApiKey } from "@/app/_server/actions/api";
25-
import { User as UserData } from "@/app/_types";
25+
import { User as UserData, SanitisedUser } from "@/app/_types";
2626
import { FormWrapper } from "@/app/_components/GlobalComponents/FormElements/FormWrapper";
2727
import { usePreferredDateTime } from "@/app/_hooks/usePreferredDateTime";
2828
import { useTranslations } from "next-intl";
@@ -31,9 +31,9 @@ import { MfaDisableModal } from "@/app/_components/GlobalComponents/Modals/MfaMo
3131
import { MfaRegenerateRecoveryCodeModal } from "@/app/_components/GlobalComponents/Modals/MfaModals/MfaRegenerateRecoveryCodeModal";
3232

3333
interface ProfileTabProps {
34-
user: UserData | null;
34+
user: SanitisedUser | null;
3535
isAdmin: boolean;
36-
setUser: React.Dispatch<React.SetStateAction<UserData | null>>;
36+
setUser: React.Dispatch<React.SetStateAction<SanitisedUser | null>>;
3737
isSsoUser: boolean;
3838
}
3939

@@ -191,7 +191,7 @@ export const ProfileTab = ({
191191

192192
if (result.success) {
193193
setSuccess(t('profile.profileUpdated'));
194-
setUser((prev: UserType | null) =>
194+
setUser((prev: SanitisedUser | null) =>
195195
prev
196196
? { ...prev, username: editedUsername, avatarUrl: avatarUrl }
197197
: null
@@ -227,7 +227,7 @@ export const ProfileTab = ({
227227
const result = await updateProfile(formData);
228228

229229
if (result.success) {
230-
setUser((prev: UserType | null) =>
230+
setUser((prev: SanitisedUser | null) =>
231231
prev ? { ...prev, avatarUrl: url } : null
232232
);
233233
setSuccess(t('profile.avatarUpdated'));
@@ -252,7 +252,7 @@ export const ProfileTab = ({
252252
const result = await updateProfile(formData);
253253

254254
if (result.success) {
255-
setUser((prev: UserType | null) =>
255+
setUser((prev: SanitisedUser | null) =>
256256
prev ? { ...prev, avatarUrl: undefined } : null
257257
);
258258
setSuccess(t('profile.avatarRemoved'));

app/_components/FeatureComponents/Profile/Parts/UserPreferencesTab.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { updateUserSettings } from "@/app/_server/actions/users";
77
import { useTranslations } from "next-intl";
88
import {
99
User,
10+
SanitisedUser,
1011
Category,
1112
EnableRecurrence,
1213
ShowCompletedSuggestions,
@@ -43,7 +44,7 @@ interface SettingsTabProps {
4344
localeOptions: Array<{id: string, name: JSX.Element}>;
4445
}
4546

46-
const getSettingsFromUser = (user: User | null): Partial<User> => ({
47+
const getSettingsFromUser = (user: SanitisedUser | null): Partial<SanitisedUser> => ({
4748
preferredLocale: user?.preferredLocale || "en",
4849
preferredTheme: user?.preferredTheme || "system",
4950
tableSyntax: user?.tableSyntax || "html",

app/_components/FeatureComponents/PublicView/Parts/PublicChecklistHeader.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import {
66
import { ChecklistProgress } from "../../Checklists/Parts/Simple/ChecklistProgress";
77
import { Checklist, User } from "@/app/_types";
88
import { UserAvatar } from "@/app/_components/GlobalComponents/User/UserAvatar";
9+
import { PublicUser } from "@/app/_utils/user-sanitize-utils";
910

1011
interface PublicChecklistHeaderProps {
1112
checklist: Checklist;
1213
totalCount: number;
13-
user: User | null;
14+
user: PublicUser | null;
1415
avatarUrl: string;
1516
}
1617

app/_components/FeatureComponents/PublicView/PublicChecklistView.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import { useState, useEffect } from "react";
44
import { Checklist, User } from "@/app/_types";
55
import { PublicChecklistHeader } from "@/app/_components/FeatureComponents/PublicView/Parts/PublicChecklistHeader";
66
import { PublicChecklistBody } from "@/app/_components/FeatureComponents/PublicView/Parts/PublicChecklistBody";
7+
import { PublicUser } from "@/app/_utils/user-sanitize-utils";
78

89
interface PublicChecklistViewProps {
910
checklist: Checklist;
10-
user: User | null;
11+
user: PublicUser | null;
1112
}
1213

1314
export const PublicChecklistView = ({

app/_components/FeatureComponents/PublicView/PublicNoteView.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ import { PGPEncryptionModal } from "@/app/_components/GlobalComponents/Modals/En
1212
import { XChaChaEncryptionModal } from "@/app/_components/GlobalComponents/Modals/EncryptionModals/XChaChaEncryptionModal";
1313
import { detectEncryptionMethod } from "@/app/_utils/encryption-utils";
1414
import { useTranslations } from "next-intl";
15+
import { PublicUser } from "@/app/_utils/user-sanitize-utils";
1516

1617
interface PublicNoteViewProps {
1718
note: Note;
18-
user: User | null;
19+
user: PublicUser | null;
1920
}
2021

2122
export const PublicNoteView = ({ note, user }: PublicNoteViewProps) => {

app/_components/FeatureComponents/Sidebar/Parts/CategoryList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use client";
22

3-
import { AppMode, Category, Checklist, Note, User } from "@/app/_types";
3+
import { AppMode, Category, Checklist, Note, User, SanitisedUser } from "@/app/_types";
44
import {
55
DndContext,
66
DragEndEvent,
@@ -32,7 +32,7 @@ interface CategoryListProps {
3232
onEditItem?: (item: Checklist | Note) => void;
3333
isItemSelected: (item: Checklist | Note) => boolean;
3434
mode: AppMode;
35-
user?: User;
35+
user?: SanitisedUser;
3636
}
3737

3838
export const CategoryList = (props: CategoryListProps) => {

app/_components/FeatureComponents/Sidebar/Parts/CategoryRenderer.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
import { Button } from "@/app/_components/GlobalComponents/Buttons/Button";
1414
import { cn } from "@/app/_utils/global-utils";
1515
import { DropdownMenu } from "@/app/_components/GlobalComponents/Dropdowns/DropdownMenu";
16-
import { AppMode, Category, Checklist, Note } from "@/app/_types";
16+
import { AppMode, Category, Checklist, Note, SanitisedUser } from "@/app/_types";
1717
import { Draggable } from "@/app/_components/FeatureComponents/Sidebar/Parts/Draggable";
1818
import { SidebarItem } from "@/app/_components/FeatureComponents/Sidebar/Parts/SidebarItem";
1919
import { Modes } from "@/app/_types/enums";
@@ -35,7 +35,7 @@ interface CategoryRendererProps {
3535
onEditItem?: (item: Checklist | Note) => void;
3636
isItemSelected: (item: Checklist | Note) => boolean;
3737
mode: AppMode;
38-
user?: any;
38+
user?: SanitisedUser;
3939
}
4040

4141
export const CategoryRenderer = (props: CategoryRendererProps) => {

app/_components/GlobalComponents/Layout/Layout.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useState } from "react";
44
import { QuickNav } from "@/app/_components/FeatureComponents/Header/QuickNav";
55
import { Sidebar } from "@/app/_components/FeatureComponents/Sidebar/Sidebar";
66
import { SettingsSidebar } from "@/app/_components/FeatureComponents/Sidebar/SettingsSidebar";
7-
import { Category, User } from "@/app/_types";
7+
import { Category, User, SanitisedUser } from "@/app/_types";
88
import { useAppMode } from "@/app/_providers/AppModeProvider";
99
import { useMobileGestures } from "@/app/_hooks/useMobileGestures";
1010
import { isMobileDevice } from "@/app/_utils/global-utils";
@@ -19,7 +19,7 @@ interface LayoutProps {
1919
onCategoryDeleted?: (categoryName: string) => void;
2020
onCategoryRenamed?: (oldName: string, newName: string) => void;
2121
children: React.ReactNode;
22-
user: User | null;
22+
user: SanitisedUser | null;
2323
customSidebar?: (props: { isOpen: boolean; onClose: () => void }) => React.ReactNode;
2424
}
2525

app/_hooks/useSidebar.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { useRouter, usePathname } from "next/navigation";
22
import { useAppMode } from "../_providers/AppModeProvider";
33
import { useNavigationGuard } from "../_providers/NavigationGuardProvider";
44
import { useState, useEffect, useRef, useCallback, useMemo } from "react";
5-
import { Checklist, Category, Note, AppMode, User } from "../_types";
5+
import { Checklist, Category, Note, AppMode, User, SanitisedUser } from "../_types";
66
import { ItemTypes, Modes } from "../_types/enums";
77
import { deleteCategory, renameCategory } from "../_server/actions/category";
88
import { buildCategoryPath, encodeId } from "../_utils/global-utils";
@@ -13,7 +13,7 @@ export interface SidebarProps {
1313
onOpenCreateModal: (initialCategory?: string) => void;
1414
onOpenCategoryModal: (parentCategory?: string) => void;
1515
categories: Category[];
16-
user: User | null;
16+
user: SanitisedUser | null;
1717
onCategoryDeleted?: (categoryName: string) => void;
1818
onCategoryRenamed?: (oldName: string, newName: string) => void;
1919
onOpenSettings: () => void;

0 commit comments

Comments
 (0)