"use client" import React, {useCallback, useEffect, useState} from 'react' import Image from 'next/image' import {motion} from 'framer-motion' import {Button} from "@/components/ui/button" import {Input} from "@/components/ui/input" import {Label} from "@/components/ui/label" import {Card, CardContent} from "@/components/ui/card" import {EyeIcon, EyeOffIcon} from 'lucide-react' import {useToast} from "@/hooks/use-toast" import {ToastActionElement} from "@/components/ui/toast"; import {useUser} from "@/contexts/user"; import {useRouter} from "next/navigation"; import {useTheme} from "next-themes"; import Register from "@/app/auth/login/register"; import Login from "@/app/auth/login/login"; export default function AuthPage() { const {checkAuth} = useUser(); const {theme, systemTheme} = useTheme() const {toast} = useToast(); const [mounted, setMounted] = useState(false); const [isLogin, setIsLogin] = useState(true); const [showPassword, setShowPassword] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); const router = useRouter(); const check = useCallback(async () => { const isAuthenticated = await checkAuth("Called on Login page"); if (isAuthenticated) { router.replace('/'); } else { setMounted(true); } }, [checkAuth, router, setMounted]) useEffect(() => { check().then(() => { console.log("Login page check finished") }) }, []); if (!mounted) { return
{/* Optional: Add a loading spinner or skeleton here */}
; } const getTheme = () => { if (theme === "system") { switch (systemTheme) { case "dark": return "dark" default: return "light" } } return theme === "dark" ? "dark" : "light" } const logoSrc = getTheme() === 'dark' ? '/logos/logo-light.png' : '/logos/logo.png'; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); const username = (document.getElementById('username') as HTMLInputElement).value; const password = (document.getElementById('password') as HTMLInputElement).value; let response: { code: number; message: string; action?: ToastActionElement | undefined; } if (!isLogin) { response = await Register(username, password); } else { response = await Login(username, password); } if (response.code !== 200) { const msg = response.message try { const parsed = JSON.parse(msg); let desc = parsed.name; switch (desc) { case "AuthWeakPasswordError": { desc = "Password too weak, please try again."; break; } default: { desc = "An unknown error occurred"; } } toast({ title: "Error", description: desc, variant: "destructive", duration: 5000 }); } catch (e) { // If msg isn't valid JSON, show the raw message toast({ title: "Error", description: msg, variant: "destructive", duration: 5000 }); } } else { toast({ title: "Success", description: response.message, variant: "default", duration: 5000, // Increased duration for better visibility }); window.location.href = "/"; } setTimeout(() => { setIsSubmitting(false); }, 2000) }; return (
SiPher

Silent Whisper

Trust the shadows. Whisper safely.

{isLogin ? "Sign In" : "Sign Up"}

) }