Results:
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 (
<>
Results: