diff --git a/apps/mobile/app/screens/settings/functions.js b/apps/mobile/app/screens/settings/functions.js index a6a2df99a..71b233685 100644 --- a/apps/mobile/app/screens/settings/functions.js +++ b/apps/mobile/app/screens/settings/functions.js @@ -42,7 +42,8 @@ export async function verifyUser( negativeText: closeText || "Cancel", positivePress: async (value) => { try { - let verified = await db.user.verifyPassword(value); + const user = await db.user.getUser(); + let verified = !user ? true : await db.user.verifyPassword(value); if (verified) { sleep(300).then(async () => { await onsuccess(); @@ -58,7 +59,7 @@ export async function verifyUser( } } catch (e) { ToastEvent.show({ - heading: "Failed to backup data", + heading: "Failed to verify", message: e.message, type: "error", context: "global" diff --git a/apps/mobile/app/screens/settings/picker/index.tsx b/apps/mobile/app/screens/settings/picker/index.tsx index 9aa3b0529..4f83b387c 100644 --- a/apps/mobile/app/screens/settings/picker/index.tsx +++ b/apps/mobile/app/screens/settings/picker/index.tsx @@ -27,6 +27,8 @@ import PremiumService from "../../../services/premium"; import { useThemeColors } from "@notesnook/theme"; import { SIZE } from "../../../utils/size"; import { sleep } from "../../../utils/time"; +import { verifyUser } from "../functions"; +import { Dialog } from "../../../components/dialog"; interface PickerOptions { getValue: () => T; @@ -37,6 +39,7 @@ interface PickerOptions { options: T[]; premium?: boolean; onCheckOptionIsPremium?: (item: T) => boolean; + requiresVerification?: () => boolean; } export function SettingsPicker({ @@ -47,7 +50,8 @@ export function SettingsPicker({ options, getItemKey, premium, - onCheckOptionIsPremium = () => true + onCheckOptionIsPremium = () => true, + requiresVerification = () => false }: PickerOptions) { const { colors } = useThemeColors("contextMenu"); const menuRef = useRef(); @@ -118,11 +122,18 @@ export function SettingsPicker({ } > + {options.map((item) => ( { - onChange(item); + if (requiresVerification?.()) { + verifyUser("local", () => { + onChange(item); + }); + } else { + onChange(item); + } }} style={{ backgroundColor: compareValue(currentValue, item) diff --git a/apps/mobile/app/screens/settings/picker/pickers.jsx b/apps/mobile/app/screens/settings/picker/pickers.jsx index c2b03512f..8fb27b62f 100644 --- a/apps/mobile/app/screens/settings/picker/pickers.jsx +++ b/apps/mobile/app/screens/settings/picker/pickers.jsx @@ -26,6 +26,7 @@ import { createSettingsPicker } from "."; import { getFontById, getFonts } from "@notesnook/editor/dist/utils/font"; import { DATE_FORMATS, TIME_FORMATS } from "@notesnook/core/common"; import dayjs from "dayjs"; +import { useUserStore } from "../../../stores/use-user-store"; export const FontPicker = createSettingsPicker({ getValue: () => useSettingStore.getState().settings.defaultFontFamily, @@ -127,6 +128,12 @@ export const BackupReminderPicker = createSettingsPicker({ options: ["useroff", "daily", "weekly", "monthly"], compareValue: (current, item) => current === item, premium: true, + requiresVerification: () => { + return ( + !useSettingStore.getState().settings.encryptedBackup && + useUserStore.getState().user + ); + }, onCheckOptionIsPremium: (item) => { return item !== "useroff"; } diff --git a/apps/mobile/app/screens/settings/settings-data.tsx b/apps/mobile/app/screens/settings/settings-data.tsx index 29218834e..c0153bf60 100644 --- a/apps/mobile/app/screens/settings/settings-data.tsx +++ b/apps/mobile/app/screens/settings/settings-data.tsx @@ -783,10 +783,11 @@ export const settingsGroups: SettingSection[] = [ description: "Create a backup of your data", modifer: async () => { const user = useUserStore.getState().user; - if (!user) { + if (!user || SettingsService.getProperty("encryptedBackup")) { await BackupService.run(true); return; } + verifyUser(null, () => BackupService.run(true)); } }, @@ -870,9 +871,17 @@ export const settingsGroups: SettingSection[] = [ }); return; } - SettingsService.set({ - encryptedBackup: !settings.encryptedBackup - }); + if (settings.encryptedBackup) { + await verifyUser(null, () => { + SettingsService.set({ + encryptedBackup: false + }); + }); + } else { + SettingsService.set({ + encryptedBackup: true + }); + } } } ] @@ -902,7 +911,9 @@ export const settingsGroups: SettingSection[] = [ description: "Export all notes as pdf, markdown, html or text in a single zip file", modifer: () => { - ExportNotesSheet.present(undefined, true); + verifyUser(null, () => { + ExportNotesSheet.present(undefined, true); + }); } } ]