mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-25 06:11:15 -05:00
Reverted to commit 0091584677
This commit is contained in:
@@ -14,7 +14,7 @@ import { ReportsQueue } from '@/components/moderation/ReportsQueue';
|
||||
import { RecentActivity } from '@/components/moderation/RecentActivity';
|
||||
import { useModerationStats } from '@/hooks/useModerationStats';
|
||||
import { useAdminSettings } from '@/hooks/useAdminSettings';
|
||||
import { useVersionAudit } from '@/hooks/admin/useVersionAudit';
|
||||
import { supabase } from '@/integrations/supabase/client';
|
||||
import { Alert, AlertDescription } from '@/components/ui/alert';
|
||||
import { Skeleton } from '@/components/ui/skeleton';
|
||||
import { QueueSkeleton } from '@/components/moderation/QueueSkeleton';
|
||||
@@ -24,13 +24,11 @@ export default function AdminDashboard() {
|
||||
useDocumentTitle('Dashboard - Admin');
|
||||
const { user, loading: authLoading } = useAuth();
|
||||
const { isModerator, loading: roleLoading } = useUserRole();
|
||||
const { needsEnrollment, needsVerification, loading: mfaLoading } = useRequireMFA();
|
||||
const { needsEnrollment, loading: mfaLoading } = useRequireMFA();
|
||||
const navigate = useNavigate();
|
||||
const [isRefreshing, setIsRefreshing] = useState(false);
|
||||
const [activeTab, setActiveTab] = useState('moderation');
|
||||
|
||||
const { data: versionAudit } = useVersionAudit();
|
||||
const suspiciousVersionsCount = versionAudit?.totalCount || 0;
|
||||
const [suspiciousVersionsCount, setSuspiciousVersionsCount] = useState<number>(0);
|
||||
|
||||
const moderationQueueRef = useRef<ModerationQueueRef>(null);
|
||||
const reportsQueueRef = useRef<any>(null);
|
||||
@@ -50,9 +48,32 @@ export default function AdminDashboard() {
|
||||
pollingInterval: pollInterval,
|
||||
});
|
||||
|
||||
// Check for suspicious versions (bypassed submission flow)
|
||||
const checkSuspiciousVersions = useCallback(async () => {
|
||||
if (!user || !isModerator()) return;
|
||||
|
||||
// Query all version tables for suspicious entries (no changed_by)
|
||||
const queries = [
|
||||
supabase.from('park_versions').select('*', { count: 'exact', head: true }).is('created_by', null),
|
||||
supabase.from('ride_versions').select('*', { count: 'exact', head: true }).is('created_by', null),
|
||||
supabase.from('company_versions').select('*', { count: 'exact', head: true }).is('created_by', null),
|
||||
supabase.from('ride_model_versions').select('*', { count: 'exact', head: true }).is('created_by', null),
|
||||
];
|
||||
|
||||
const results = await Promise.all(queries);
|
||||
const totalCount = results.reduce((sum, result) => sum + (result.count || 0), 0);
|
||||
|
||||
setSuspiciousVersionsCount(totalCount);
|
||||
}, [user, isModerator]);
|
||||
|
||||
useEffect(() => {
|
||||
checkSuspiciousVersions();
|
||||
}, [checkSuspiciousVersions]);
|
||||
|
||||
const handleRefresh = useCallback(async () => {
|
||||
setIsRefreshing(true);
|
||||
await refreshStats();
|
||||
await checkSuspiciousVersions();
|
||||
|
||||
// Refresh active tab's content
|
||||
switch (activeTab) {
|
||||
@@ -68,7 +89,7 @@ export default function AdminDashboard() {
|
||||
}
|
||||
|
||||
setTimeout(() => setIsRefreshing(false), 500);
|
||||
}, [refreshStats, activeTab]);
|
||||
}, [refreshStats, checkSuspiciousVersions, activeTab]);
|
||||
|
||||
const handleStatCardClick = (cardType: 'submissions' | 'reports' | 'flagged') => {
|
||||
switch (cardType) {
|
||||
@@ -138,8 +159,8 @@ export default function AdminDashboard() {
|
||||
return null;
|
||||
}
|
||||
|
||||
// MFA enforcement - CRITICAL: Block if EITHER not enrolled OR needs verification
|
||||
if (needsEnrollment || needsVerification) {
|
||||
// MFA enforcement
|
||||
if (needsEnrollment) {
|
||||
return (
|
||||
<AdminLayout>
|
||||
<MFARequiredAlert />
|
||||
|
||||
Reference in New Issue
Block a user