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)} />