aboutsummaryrefslogtreecommitdiff
path: root/get.html
diff options
context:
space:
mode:
authorCirakg <cirakg@cirakg.xyz>2025-04-14 23:33:52 +0200
committerCirakg <cirakg@cirakg.xyz>2025-04-14 23:33:52 +0200
commit0479a78d16e03bcffc342703d6312fab526e4ef1 (patch)
tree4298ceb36da5aca2f977150c5ed452aaf1998565 /get.html
parent3e45cfa1f24416cfc96efa9620ff23f0ed0451b0 (diff)
feat: Move static file handling to nginx config and create script.js. Remove unnecesary code from paste-cgi.pyHEADmaster
Diffstat (limited to 'get.html')
-rw-r--r--get.html131
1 files changed, 5 insertions, 126 deletions
diff --git a/get.html b/get.html
index 9799eba..37768b0 100644
--- a/get.html
+++ b/get.html
@@ -3,15 +3,16 @@
<head>
<meta charset="UTF-8">
- <meta name="description" content="AES-256 Encryption Example">
- <title>Secure Paste</title>
+ <title>paste-cgi</title>
<link rel="icon" href="./favicon.svg" type="image/svg+xml">
<link rel="stylesheet" href="./pico.min.css">
</head>
<body>
<main class="container">
- <h1>paste-cgi</h1>
+ <a href="/">
+ <h1>paste-cgi</h1>
+ </a>
<form id="cryptoForm">
<h3 id="title">Title</h3>
@@ -30,129 +31,7 @@
<button type="button" onclick="copyPaste()">Copy</button>
</div>
</main>
-
- <script>
- let globalData;
- const pasteTypeConstant = "pasteType";
- const passwordFieldConstant = "passwordField";
- const passwordTypeConstant = "password";
- const decryptButtonConstant = "decryptBtn";
- const plainTypeConstant = "plain";
- const titleConstant = "title";
- const expirationConstant = "expiration";
- const plaintextConstant = "plaintext";
- const decryptedOutputConstant = "decryptedOutput"
- const pasteUrlSectionConstant = "pasteUrlSection"
-
- window.onload = async function () {
- const urlParams = new URLSearchParams(window.location.search);
- const id = urlParams.get('id');
-
- const fetchUrl = `${window.location.origin}/paste?id=${id}`;
-
- try {
- const response = await fetch(fetchUrl);
-
- if (!response.ok) {
- throw new Error('Failed to fetch data');
- }
-
- const data = await response.json();
-
- globalData = data;
- togglePasteType()
- } catch (error) {
- alert("NO File Found")
- console.error('Error fetching data:', error);
- }
- };
-
- function copyPaste() {
- var copyText = document.getElementById(decryptedOutputConstant);
-
- copyText.select();
- copyText.setSelectionRange(0, 99999);
-
- navigator.clipboard.writeText(copyText.value);
- }
- function togglePasteType() {
- const decryptButton = document.getElementById(decryptButtonConstant);
- const passwordField = document.getElementById(passwordFieldConstant);
- document.getElementById(titleConstant).textContent = globalData.title;
- if (globalData.type === passwordTypeConstant) {
- passwordField.style.display = 'block';
- decryptButton.style.display = 'block';
- } else {
- decryptButton.style.display = 'none';
- passwordField.style.display = 'none';
- document.getElementById(decryptedOutputConstant).textContent = globalData.pasted_text
- document.getElementById(pasteUrlSectionConstant).style.display = 'block';
- }
- }
- async function deriveKey(password, salt) {
- let encodedPassword = new TextEncoder().encode(password);
- let baseKey = await window.crypto.subtle.importKey(
- "raw",
- encodedPassword,
- { name: "PBKDF2" },
- false,
- ["deriveKey"],
- );
-
- let derivedKey = await window.crypto.subtle.deriveKey(
- {
- name: "PBKDF2",
- salt: salt,
- iterations: 600000,
- hash: "SHA-256",
- },
- baseKey,
- { name: "AES-GCM", length: 256 },
- true,
- ["encrypt", "decrypt"],
- );
-
- return derivedKey;
- }
-
- async function decryptData(encryptedData, password) {
- let { ciphertext, iv, authTag, salt } = encryptedData;
- let key = await deriveKey(password, salt);
-
- let dataWithAuthTag = new Uint8Array(ciphertext.length + authTag.length);
- dataWithAuthTag.set(ciphertext, 0);
- dataWithAuthTag.set(authTag, ciphertext.length);
-
- let decryptedContent = await window.crypto.subtle.decrypt(
- { name: "AES-GCM", iv: iv, tagLength: 128 },
- key,
- dataWithAuthTag,
- );
-
- return new TextDecoder().decode(decryptedContent);
- }
- async function handleDecrypt() {
- let base64 = globalData.pasted_text;
- let password = document.getElementById(passwordTypeConstant).value;
- if (!base64 || !password) return alert("Enter encrypted text and password.");
- try {
-
- let parsed = JSON.parse(atob(base64));
- let encryptedData = {
- salt: new Uint8Array(Object.values(parsed.salt)),
- iv: new Uint8Array(Object.values(parsed.iv)),
- authTag: new Uint8Array(Object.values(parsed.authTag)),
- ciphertext: new Uint8Array(Object.values(parsed.ciphertext)),
- };
-
- let decrypted = await decryptData(encryptedData, password);
- document.getElementById("decryptedOutput").value = decrypted;
- document.getElementById(pasteUrlSectionConstant).style.display = 'block';
- } catch (err) {
- document.getElementById("decryptedOutput").value = "❌ Decryption failed.";
- }
- }
- </script>
+ <script src="/script.js"></script>
</body>
</html> \ No newline at end of file