"use client"; import React, { useState, useEffect } from "react"; import ReactModal from "react-modal"; import { ClipLoader } from "react-spinners"; import "bootstrap-icons/font/bootstrap-icons.css"; import { useSelector } from "react-redux"; import handleClearDatabase from "./handlers/handleClearDatabase"; import handleReboot from "./handlers/handleReboot"; import handleSetDateTime from "./handlers/handleSetDateTime"; import handleSubmit from "./handlers/handleSubmit"; import { useRouter } from "next/router"; import { setAdminLoggedIn } from "../../../store/authSlice"; import { useDispatch } from "react-redux"; ReactModal.setAppElement("#__next"); const USERS = { Admin: { username: "admin", password: "admin", role: "Admin" }, Ismail: { username: "ismail", password: "ismail", role: "Admin" }, }; // Function to generate JWT token function generateToken(user) { const payload = { username: user.username, role: user.role, exp: Date.now() + 5 * 60 * 1000, // Expire in 5 minutes }; return btoa(JSON.stringify(payload)); } function SettingModal({ showModal, onClose }) { const dispatch = useDispatch(); const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [isLoggedIn, setIsLoggedIn] = useState(false); const [showLoginForm, setShowLoginForm] = useState(false); // Zustand für Login-Formular const router = useRouter(); const handleAdminLogin = (e) => { e.preventDefault(); const user = Object.values(USERS).find( (u) => u.username === username && u.password === password ); if (user) { const token = generateToken(user); localStorage.setItem("token", token); dispatch(setAdminLoggedIn(true)); setIsLoggedIn(true); setShowLoginForm(false); onClose(); } else { setError( "Login fehlgeschlagen. Bitte überprüfen Sie Benutzername und Passwort." ); } }; const deviceName_Redux = useSelector((state) => state.variables.deviceName); const mac1_Redux = useSelector((state) => state.variables.mac1); const ip_Redux = useSelector((state) => state.variables.ip); const subnet_Redux = useSelector((state) => state.variables.subnet); const gateway_Redux = useSelector((state) => state.variables.gateway); const datetime_Redux = useSelector( (state) => state.variables.cplInternalTimestamp ); const ntp1_Redux = useSelector((state) => state.variables.ntp1); const ntp2_Redux = useSelector((state) => state.variables.ntp2); const ntp3_Redux = useSelector((state) => state.variables.ntp3); const ntpTimezone_Redux = useSelector((state) => state.variables.ntpTimezone); const active_Redux = useSelector((state) => state.variables.ntpActive); const [name, setName] = useState(deviceName_Redux || ""); const [mac1, setMac1] = useState(mac1_Redux || ""); const [ip, setIp] = useState(ip_Redux || ""); const [subnet, setSubnet] = useState(subnet_Redux || ""); const [gateway, setGateway] = useState(gateway_Redux || ""); const [systemUhr, setSystemUhr] = useState(datetime_Redux || ""); const [ntp1, setNtp1] = useState(ntp1_Redux || ""); const [ntp2, setNtp2] = useState(ntp2_Redux || ""); const [ntp3, setNtp3] = useState(ntp3_Redux || ""); const [ntpTimezone, setNtpTimezone] = useState(ntpTimezone_Redux || ""); const [active, setActive] = useState(active_Redux || ""); const [originalValues, setOriginalValues] = useState({}); const currentValues = { name, ip, subnet, gateway, ntp1, ntp2, ntp3, ntpTimezone, active, }; useEffect(() => { if (showModal) { setName(deviceName_Redux || ""); setMac1(mac1_Redux || ""); setIp(ip_Redux || ""); setSubnet(subnet_Redux || ""); setGateway(gateway_Redux || ""); setSystemUhr(datetime_Redux || ""); setNtp1(ntp1_Redux || ""); setNtp2(ntp2_Redux || ""); setNtp3(ntp3_Redux || ""); setNtpTimezone(ntpTimezone_Redux || ""); setActive(active_Redux || ""); } }, [showModal]); useEffect(() => { setOriginalValues({ name: deviceName_Redux, ip: ip_Redux, subnet: subnet_Redux, gateway: gateway_Redux, ntp1: ntp1_Redux, ntp2: ntp2_Redux, ntp3: ntp3_Redux, ntpTimezone: ntpTimezone_Redux, active: active_Redux, }); }, [ deviceName_Redux, ip_Redux, subnet_Redux, gateway_Redux, ntp1_Redux, ntp2_Redux, ntp3_Redux, ntpTimezone_Redux, active_Redux, ]); useEffect(() => { // Check if a valid token exists in localStorage const token = localStorage.getItem("token"); if (token) { const { exp } = JSON.parse(atob(token)); if (Date.now() < exp) { setIsLoggedIn(true); } else { localStorage.removeItem("token"); // Remove expired token } } }, []); return ( <> {/* Hauptinhalt oder Login-Formular */} {showLoginForm ? (

Admin Login

e.preventDefault()}>
setUsername(e.target.value)} />
setPassword(e.target.value)} />
{error &&

{error}

}
) : (

System:

setName(e.target.value)} />
setMac1(e.target.value)} disabled />
setIp(e.target.value)} />
setSubnet(e.target.value)} />
setGateway(e.target.value)} />
{/* Button für Systemzeit übernehmen */}
{/* SNTP Client */}

SNTP Client:

setNtp1(e.target.value)} />
setNtp2(e.target.value)} />
setNtp3(e.target.value)} />
setNtpTimezone(e.target.value)} />
setActive(e.target.value)} />
{/* Modal Footer */}
)}
); } export default SettingModal;