import React, { useState } from "react"; import axios from "axios"; import { useNavigate, Link } from "react-router-dom"; import forge from "node-forge"; function Login() { const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(false); const navigate = useNavigate(); const handleLogin = async (e) => { e.preventDefault(); setLoading(true); setError(""); try { const resKey = await axios.get("http://127.0.0.1:8000/api/auth/public-key"); const publicKeyPem = resKey.data.public_key; const publicKey = forge.pki.publicKeyFromPem(publicKeyPem); const encrypted = publicKey.encrypt(password, 'RSA-OAEP'); const encryptedBase64 = forge.util.encode64(encrypted); const res = await axios.post("http://127.0.0.1:8000/api/auth/login", { username, password: encryptedBase64 }); localStorage.setItem("token", res.data.access_token); navigate("/"); } catch (err) { setError(err.response?.data?.detail || "Login failed"); } finally { setLoading(false); } }; return (
Don't have an account? Sign up