import React, { useState } from 'react'; function Register() { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [status, setStatus] = useState(''); // Validation functions const validateUsername = (name) => /^[A-Za-z0-9_-]+$/.test(name); const validatePassword = (pass) => /^\S+$/.test(pass); // No spaces const handleRegister = async () => { if (!validateUsername(username)) { setStatus("Invalid username. Use only letters, numbers, hyphens, or underscores."); return; } if (!validatePassword(password)) { setStatus("Invalid password. Spaces are not allowed."); return; } try { const response = await fetch('/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }); const data = await response.json(); if (data.message) { setStatus(data.message); } else if (data.error) { setStatus(data.error); } } catch (err) { setStatus('An error occurred while registering.'); } }; const handleLogin = async () => { if (!validateUsername(username)) { setStatus("Invalid username. Use only letters, numbers, hyphens, or underscores."); return; } if (!validatePassword(password)) { setStatus("Invalid password. Spaces are not allowed."); return; } try { const response = await fetch('/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', // Important to send cookies body: JSON.stringify({ username, password }) }); const data = await response.json(); if (data.message) { // Successful login - reload the page to trigger Account check window.location.reload(); } else if (data.error) { setStatus(data.error); } } catch (err) { setStatus('An error occurred while logging in.'); } }; return (
setUsername(e.target.value)} placeholder="Username" className="mb-4 p-2 border border-gray-300 rounded text-white bg-transparent" /> setPassword(e.target.value)} placeholder="Password" className="mb-4 p-2 border border-gray-300 rounded text-white bg-transparent" />
{status && (

{status}

)}
); } export default Register;