PersonaAI

Create your account

Password strength: None

Or continue with

Already have an account? Sign in

const passwordInput = document.getElementById('password'); const togglePasswordBtn = document.getElementById('togglePassword'); const eyeIcon = document.getElementById('eyeIcon'); const strengthBar = document.getElementById('strengthBar'); const strengthLabel = document.getElementById('strengthLabel'); let isPasswordVisible = false; function updatePasswordStrength(password) { // Password only requires 6-20 characters, no other rules const length = password.length; let strength = 0; if (length >= 6) strength++; if (length >= 14) strength++; const levels = [ { label: 'Too Short', color: 'bg-red-500', width: '30%' }, { label: 'Good', color: 'bg-orange-500', width: '65%' }, { label: 'Strong', color: 'bg-green-500', width: '100%' }, ]; const level = levels[Math.min(strength, levels.length - 1)]; strengthBar.className = 'h-full ' + level.color + ' transition-all duration-300'; strengthBar.style.width = level.width; strengthLabel.textContent = level.label; } passwordInput.addEventListener('input', (e) => { updatePasswordStrength(e.target.value); }); togglePasswordBtn.addEventListener('click', () => { isPasswordVisible = !isPasswordVisible; passwordInput.type = isPasswordVisible ? 'text' : 'password'; eyeIcon.textContent = isPasswordVisible ? '🙈' : '👁️'; }); const confirmPasswordInput = document.getElementById('confirmPassword'); const toggleConfirmPasswordBtn = document.getElementById('toggleConfirmPassword'); const eyeIconConfirm = document.getElementById('eyeIconConfirm'); let isConfirmPasswordVisible = false; toggleConfirmPasswordBtn.addEventListener('click', () => { isConfirmPasswordVisible = !isConfirmPasswordVisible; confirmPasswordInput.type = isConfirmPasswordVisible ? 'text' : 'password'; eyeIconConfirm.textContent = isConfirmPasswordVisible ? '🙈' : '👁️'; }); document.getElementById('registerForm').addEventListener('submit', async (e) => { e.preventDefault(); const submitBtn = document.getElementById('submitBtn'); const originalText = submitBtn.textContent; submitBtn.disabled = true; submitBtn.textContent = 'Creating account...'; const displayName = document.getElementById('displayName').value; const email = document.getElementById('email').value; const password = document.getElementById('password').value; const confirmPassword = document.getElementById('confirmPassword').value; if (password.length < 6 || password.length > 20) { alert('Password must be between 6 and 20 characters.'); submitBtn.disabled = false; submitBtn.textContent = originalText; return; } if (password !== confirmPassword) { alert('Passwords do not match.'); submitBtn.disabled = false; submitBtn.textContent = originalText; return; } try { const response = await fetch('/api/v1/auth/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ display_name: displayName, email, password, password_confirm: confirmPassword }) }); const data = await response.json(); if (response.ok) { // Auto-login: store token and user info returned by register if (data.access_token) { setToken(data.access_token); if (data.refresh_token) { localStorage.setItem(AUTH_KEYS.REFRESH_TOKEN, data.refresh_token); } } if (data.user) { setUserInfo(data.user); } window.location.href = '/profile'; } else { // Handle 422 validation errors (FastAPI returns array format) let errorMsg = 'Registration failed. Please try again.'; if (data.detail) { if (Array.isArray(data.detail)) { errorMsg = data.detail.map(e => e.msg || JSON.stringify(e)).join(', '); } else { errorMsg = data.detail; } } alert(errorMsg); submitBtn.disabled = false; submitBtn.textContent = originalText; } } catch (error) { alert('An error occurred. Please try again.'); submitBtn.disabled = false; submitBtn.textContent = originalText; } }); document.getElementById('googleRegisterBtn').addEventListener('click', () => { window.location.href = '/api/v1/auth/oauth/google'; });