import React, { useState, useEffect, useRef } from "react"; import { readTextFromClipboard } from "../Functions/ParseChallenge"; import { Helmet } from "react-helmet"; // Import Helmet function HomePage() { const [pssh, setPssh] = useState(""); const [licurl, setLicurl] = useState(""); const [proxy, setProxy] = useState(""); const [headers, setHeaders] = useState(""); const [cookies, setCookies] = useState(""); const [data, setData] = useState(""); const [message, setMessage] = useState(""); const [isVisible, setIsVisible] = useState(false); const [devices, setDevices] = useState([]); const [selectedDevice, setSelectedDevice] = useState("default"); const bottomRef = useRef(null); const messageRef = useRef(null); // Reference to result container const handleReset = () => { if (isVisible) { setIsVisible(false); } setPssh(""); setLicurl(""); setProxy(""); setHeaders(""); setCookies(""); setData(""); }; const handleSubmitButton = (event) => { event.preventDefault(); fetch("/api/decrypt", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ pssh: pssh, licurl: licurl, proxy: proxy, headers: headers, cookies: cookies, data: data, device: selectedDevice, // Include selected device in the request }), }) .then((response) => response.json()) .then((data) => { const resultMessage = data["message"].replace(/\n/g, "
"); setMessage(resultMessage); setIsVisible(true); }) .catch((error) => { console.error("Error during decryption request:", error); setMessage("Error: Unable to process request."); setIsVisible(true); }); }; const handleCopy = (event) => { event.preventDefault(); if (messageRef.current) { const textToCopy = messageRef.current.innerText; // Grab the plain text (with visual line breaks) navigator.clipboard.writeText(textToCopy).catch((err) => { alert("Failed to copy!"); console.error(err); }); } }; const handleFetchPaste = () => { event.preventDefault(); readTextFromClipboard() .then(() => { setPssh(document.getElementById("pssh").value); setLicurl(document.getElementById("licurl").value); setHeaders(document.getElementById("headers").value); setData(document.getElementById("data").value); }) .catch((err) => { alert("Failed to paste from fetch!"); }); }; useEffect(() => { if (isVisible && bottomRef.current) { bottomRef.current.scrollIntoView({ behavior: "smooth" }); } }, [message, isVisible]); useEffect(() => { fetch("/login/status", { method: "POST", }) .then((res) => res.json()) .then((statusData) => { if (statusData.message === "True") { return fetch("/userinfo", { method: "POST" }); } else { throw new Error("Not logged in"); } }) .then((res) => res.json()) .then((deviceData) => { const combinedDevices = [ ...deviceData.Widevine_Devices, ...deviceData.Playready_Devices, ]; // Add default devices if logged in const allDevices = [ "CDRM-Project Public Widevine CDM", "CDRM-Project Public PlayReady CDM", ...combinedDevices, ]; // Set devices and select a device if logged in setDevices(allDevices.length > 0 ? allDevices : []); setSelectedDevice(allDevices.length > 0 ? allDevices[0] : "default"); }) .catch(() => { // User isn't logged in, set default device to 'default' setDevices([]); // Don't display devices list setSelectedDevice("default"); }); }, []); return ( <>
CDRM-Project
setPssh(e.target.value)} /> setLicurl(e.target.value)} /> setProxy(e.target.value)} />