diff --git a/src/ui/Desktop/Admin/AdminSettings.tsx b/src/ui/Desktop/Admin/AdminSettings.tsx index e176e234..c1e4b0ad 100644 --- a/src/ui/Desktop/Admin/AdminSettings.tsx +++ b/src/ui/Desktop/Admin/AdminSettings.tsx @@ -44,6 +44,7 @@ import { makeUserAdmin, removeAdminStatus, deleteUser, + getUserInfo, getCookie, isElectron, } from "@/ui/main-axios.ts"; @@ -92,6 +93,12 @@ export function AdminSettings({ ); const [securityInitialized, setSecurityInitialized] = React.useState(true); + const [currentUser, setCurrentUser] = React.useState<{ + id: string; + username: string; + is_admin: boolean; + is_oidc: boolean; + } | null>(null); const [exportLoading, setExportLoading] = React.useState(false); const [importLoading, setImportLoading] = React.useState(false); @@ -100,6 +107,11 @@ export function AdminSettings({ const [showPasswordInput, setShowPasswordInput] = React.useState(false); const [importPassword, setImportPassword] = React.useState(""); + const requiresImportPassword = React.useMemo( + () => !currentUser?.is_oidc, + [currentUser?.is_oidc], + ); + React.useEffect(() => { if (isElectron()) { const serverUrl = (window as any).configuredServerUrl; @@ -117,6 +129,22 @@ export function AdminSettings({ toast.error(t("admin.failedToFetchOidcConfig")); } }); + getUserInfo() + .then((info) => { + if (info) { + setCurrentUser({ + id: info.userId, + username: info.username, + is_admin: info.is_admin, + is_oidc: info.is_oidc, + }); + } + }) + .catch((err) => { + if (!err?.message?.includes("No server configured")) { + console.warn("Failed to fetch current user info", err); + } + }); fetchUsers(); }, []); @@ -334,7 +362,7 @@ export function AdminSettings({ return; } - if (!importPassword.trim()) { + if (requiresImportPassword && !importPassword.trim()) { toast.error(t("admin.passwordRequired")); return; } @@ -357,7 +385,9 @@ export function AdminSettings({ const formData = new FormData(); formData.append("file", importFile); - formData.append("password", importPassword); + if (requiresImportPassword) { + formData.append("password", importPassword); + } const response = await fetch(apiUrl, { method: "POST", @@ -966,7 +996,7 @@ export function AdminSettings({ - {importFile && ( + {importFile && requiresImportPassword && (