import { useQuery } from '@tanstack/react-query'; import { HttpUtil } from '@/utils'; import { keys } from '@/api/queryKeys'; export interface Fail2banStatus { enabled: boolean; installed: boolean; usable: boolean; windows: boolean; } const FAIL_OPEN_STATUS: Fail2banStatus = { enabled: true, installed: true, usable: true, windows: false, }; async function fetchFail2banStatus(): Promise { const msg = await HttpUtil.get('/panel/api/server/fail2banStatus', undefined, { silent: true }); if (!msg?.success || !msg.obj) throw new Error(msg?.msg || 'Failed to fetch fail2ban status'); return { ...FAIL_OPEN_STATUS, ...msg.obj }; } export function getLimitIpNotice(status: Fail2banStatus, t: (key: string) => string): string { if (status.usable) return ''; if (!status.enabled) return t('pages.clients.limitIpDisabled'); if (status.windows) return t('pages.clients.limitIpFail2banWindows'); return t('pages.clients.limitIpFail2banMissing'); } export function useFail2banStatusQuery() { const query = useQuery({ queryKey: keys.server.fail2banStatus(), queryFn: fetchFail2banStatus, staleTime: 60_000, }); return query.data ?? FAIL_OPEN_STATUS; }