mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-24 06:51:13 -05:00
Refactor security functions
This commit is contained in:
@@ -5,7 +5,8 @@ import { Label } from '@/components/ui/label';
|
||||
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
import { Alert, AlertDescription } from '@/components/ui/alert';
|
||||
import { Badge } from '@/components/ui/badge';
|
||||
import { useToast } from '@/hooks/use-toast';
|
||||
import { handleError, handleSuccess, handleInfo, AppError } from '@/lib/errorHandler';
|
||||
import { logger } from '@/lib/logger';
|
||||
import { useAuth } from '@/hooks/useAuth';
|
||||
import { supabase } from '@/integrations/supabase/client';
|
||||
import { Smartphone, Shield, Copy, Eye, EyeOff, Trash2 } from 'lucide-react';
|
||||
@@ -16,7 +17,6 @@ import type { MFAFactor } from '@/types/auth';
|
||||
|
||||
export function TOTPSetup() {
|
||||
const { user } = useAuth();
|
||||
const { toast } = useToast();
|
||||
const navigate = useNavigate();
|
||||
const [factors, setFactors] = useState<MFAFactor[]>([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
@@ -49,7 +49,11 @@ export function TOTPSetup() {
|
||||
}));
|
||||
setFactors(totpFactors);
|
||||
} catch (error: any) {
|
||||
console.error('Error fetching TOTP factors:', error);
|
||||
logger.error('Failed to fetch TOTP factors', {
|
||||
userId: user?.id,
|
||||
action: 'fetch_totp_factors',
|
||||
error: error.message
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
@@ -70,11 +74,18 @@ export function TOTPSetup() {
|
||||
setFactorId(data.id);
|
||||
setEnrolling(true);
|
||||
} catch (error: any) {
|
||||
toast({
|
||||
title: 'Error',
|
||||
description: error.message || 'Failed to start TOTP enrollment',
|
||||
variant: 'destructive'
|
||||
logger.error('Failed to start TOTP enrollment', {
|
||||
userId: user?.id,
|
||||
action: 'totp_enroll_start',
|
||||
error: error.message
|
||||
});
|
||||
handleError(
|
||||
new AppError(
|
||||
error.message || 'Failed to start TOTP enrollment',
|
||||
'TOTP_ENROLL_FAILED'
|
||||
),
|
||||
{ action: 'Start TOTP enrollment', userId: user?.id }
|
||||
);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -82,11 +93,10 @@ export function TOTPSetup() {
|
||||
|
||||
const verifyAndEnable = async () => {
|
||||
if (!factorId || !verificationCode.trim()) {
|
||||
toast({
|
||||
title: 'Error',
|
||||
description: 'Please enter the verification code',
|
||||
variant: 'destructive'
|
||||
});
|
||||
handleError(
|
||||
new AppError('Please enter the verification code', 'INVALID_INPUT'),
|
||||
{ action: 'Verify TOTP', userId: user?.id, metadata: { step: 'code_entry' } }
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -119,12 +129,12 @@ export function TOTPSetup() {
|
||||
return;
|
||||
}
|
||||
|
||||
toast({
|
||||
title: 'TOTP Enabled',
|
||||
description: isOAuthUser
|
||||
handleSuccess(
|
||||
'TOTP Enabled',
|
||||
isOAuthUser
|
||||
? 'Please verify with your authenticator code to continue.'
|
||||
: 'Please sign in again to activate MFA protection.'
|
||||
});
|
||||
);
|
||||
|
||||
if (isOAuthUser) {
|
||||
// Already handled above with navigate
|
||||
@@ -137,11 +147,20 @@ export function TOTPSetup() {
|
||||
}, 2000);
|
||||
}
|
||||
} catch (error: any) {
|
||||
toast({
|
||||
title: 'Error',
|
||||
description: error.message || 'Invalid verification code. Please try again.',
|
||||
variant: 'destructive'
|
||||
logger.error('TOTP verification failed', {
|
||||
userId: user?.id,
|
||||
action: 'totp_verify',
|
||||
error: error.message,
|
||||
factorId
|
||||
});
|
||||
|
||||
handleError(
|
||||
new AppError(
|
||||
error.message || 'Invalid verification code. Please try again.',
|
||||
'TOTP_VERIFY_FAILED'
|
||||
),
|
||||
{ action: 'Verify TOTP code', userId: user?.id, metadata: { factorId } }
|
||||
);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -153,10 +172,7 @@ export function TOTPSetup() {
|
||||
|
||||
const copySecret = () => {
|
||||
navigator.clipboard.writeText(secret);
|
||||
toast({
|
||||
title: 'Copied',
|
||||
description: 'Secret key copied to clipboard'
|
||||
});
|
||||
handleInfo('Copied', 'Secret key copied to clipboard');
|
||||
};
|
||||
|
||||
const cancelEnrollment = () => {
|
||||
|
||||
Reference in New Issue
Block a user