import React, { useState, useEffect } from 'react';
import { Link, useNavigate, useLocation } from 'react-router-dom';
import { RefreshCw } from 'lucide-react';
import { useCTF } from './CTFContext';
import { Button } from './UIComponents';
export const Login: React.FC = () => {
const { login } = useCTF();
const navigate = useNavigate();
const location = useLocation();
const [name, setName] = useState('');
const [pass, setPass] = useState('');
const [error, setError] = useState('');
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (await login(name, pass)) {
const from = (location.state as any)?.from?.pathname || '/';
navigate(from, { replace: true });
} else setError('ACCESS_DENIED: INVALID_CREDENTIALS');
};
return (
AUTH_GATE_01
SIGN_IN
New operator? Register_Identity
);
};
export const Register: React.FC = () => {
const { register } = useCTF();
const navigate = useNavigate();
const [name, setName] = useState('');
const [pass, setPass] = useState('');
const [error, setError] = useState('');
// CAPTCHA State
const [captchaQ, setCaptchaQ] = useState('');
const [captchaInput, setCaptchaInput] = useState('');
const generateCaptcha = () => {
const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz0123456789';
let result = '';
for (let i = 0; i < 6; i++) {
result += chars.charAt(Math.floor(Math.random() * chars.length));
}
setCaptchaQ(result);
setCaptchaInput('');
};
useEffect(() => {
generateCaptcha();
}, []);
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
// CAPTCHA Validation (Case-insensitive)
if (captchaInput.toLowerCase() !== captchaQ.toLowerCase()) {
setError('VALIDATION_ERROR: HUMAN_VERIFICATION_FAILED');
generateCaptcha();
return;
}
try {
await register(name, pass);
navigate('/challenges');
} catch (err: any) {
setError(err.message || 'REGISTRATION_FAILED');
generateCaptcha();
}
};
return (
);
};