From b2395b3deac0f790b3fe86b6a951d6e5f417ab35 Mon Sep 17 00:00:00 2001 From: Fijxu Date: Sun, 4 Aug 2024 03:32:30 -0400 Subject: [PATCH] 0.5.0: A functional shit frontend made by chatgpt because I hate frontend so much --- README.md | 4 +- config/config.yml | 2 - public/chatterino.png | Bin 0 -> 72371 bytes public/script.js | 140 +++++++++++++++++++++++++++++++++++ public/sharex.sxcu | 11 +++ public/styles.css | 135 ++++++++++++++++++++++++++++++++++ public/upload.js | 165 ++++++++++++++++++++++++++++++++++++++++++ src/config.cr | 3 + src/file-uploader.cr | 10 +++ src/handling.cr | 6 +- src/views/index.ecr | 141 ++++++++++++------------------------ 11 files changed, 518 insertions(+), 99 deletions(-) delete mode 100644 config/config.yml create mode 100644 public/chatterino.png create mode 100644 public/script.js create mode 100644 public/sharex.sxcu create mode 100644 public/styles.css create mode 100644 public/upload.js diff --git a/README.md b/README.md index 8bed588..3453b89 100644 --- a/README.md +++ b/README.md @@ -5,4 +5,6 @@ I'm making this to replace my current File uploader hosted on https://ayaya.beau ## TODO -- Add file size limit \ No newline at end of file +- ~~Add file size limit~~ ADDED +- Fix error when accessing `http://127.0.0.1:8080` with an empty DB. +- Better frontend... \ No newline at end of file diff --git a/config/config.yml b/config/config.yml deleted file mode 100644 index 060464d..0000000 --- a/config/config.yml +++ /dev/null @@ -1,2 +0,0 @@ -blocked_extensions: - - "exe" \ No newline at end of file diff --git a/public/chatterino.png b/public/chatterino.png new file mode 100644 index 0000000000000000000000000000000000000000..d315eddd8f779a185a35019687bf28e45ce70b26 GIT binary patch literal 72371 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 { + const dropArea = document.getElementById("drop-area"); + const fileInput = document.getElementById("fileElem"); + const uploadStatus = document.getElementById("upload-status"); + + // Prevent default drag behaviors + ["dragenter", "dragover", "dragleave", "drop"].forEach(eventName => { + dropArea.addEventListener(eventName, preventDefaults, false); + document.body.addEventListener(eventName, preventDefaults, false); + }); + + // Highlight drop area when item is dragged over + ["dragenter", "dragover"].forEach(eventName => { + dropArea.addEventListener(eventName, highlight, false); + }); + + ["dragleave", "drop"].forEach(eventName => { + dropArea.addEventListener(eventName, unhighlight, false); + }); + + // Handle dropped files + dropArea.addEventListener("drop", handleDrop, false); + dropArea.addEventListener("click", () => fileInput.click()); + + // Handle file selection + fileInput.addEventListener("change", () => { + const files = fileInput.files; + handleFiles(files); + }, false); + + // Handle pasted files + document.addEventListener("paste", handlePaste, false); + + function preventDefaults(e) { + e.preventDefault(); + e.stopPropagation(); + } + + function highlight() { + dropArea.classList.add("highlight"); + } + + function unhighlight() { + dropArea.classList.remove("highlight"); + } + + function handleDrop(e) { + const dt = e.dataTransfer; + const files = dt.files; + handleFiles(files); + } + + function handlePaste(e) { + const items = e.clipboardData.items; + for (let i = 0; i < items.length; i++) { + const item = items[i]; + if (item.kind === "file") { + const file = item.getAsFile(); + handleFiles([file]); + } + } + } + + function handleFiles(files) { + if (files.length > 0) { + for (const file of files) { + uploadFile(file); + } + } + } + + function uploadFile(file) { + const url = "upload"; // Replace with your upload URL + const xhr = new XMLHttpRequest(); + + // Create a new upload status container and link elements + const uploadContainer = document.createElement("div"); + const statusLink = document.createElement("div"); + const uploadText = document.createElement("span"); + const copyButton = document.createElement("button"); + + uploadContainer.className = "upload-status"; // Use the existing CSS class for styling + uploadContainer.appendChild(uploadText); + uploadContainer.appendChild(statusLink); + uploadContainer.appendChild(copyButton); + uploadStatus.appendChild(uploadContainer); // Append to the main upload status container + + // Update upload text + uploadText.innerHTML = "0%"; + uploadText.className = "percent" + copyButton.className = "copy-button"; // Add class for styling + copyButton.innerHTML = "Copy Link"; // Set button text + copyButton.style.display = "none"; // Hide initially + + // Update progress text + xhr.upload.addEventListener("progress", (e) => { + if (e.lengthComputable) { + const percentComplete = Math.round((e.loaded / e.total) * 100); + uploadText.innerHTML = `${percentComplete}%`; // Update the text with the percentage + } + }); + + // Handle response + xhr.onload = () => { + if (xhr.status === 200) { + try { + const response = JSON.parse(xhr.responseText); + const fileLink = response.link; // Assuming the response contains a key 'link' + statusLink.innerHTML = `${fileLink}`; + copyButton.style.display = "inline"; // Show the copy button + copyButton.onclick = () => copyToClipboard(fileLink); // Set the copy action + } catch (error) { + statusLink.textContent = "File uploaded but failed to parse response."; + } + } else { + statusLink.textContent = "File upload failed."; + } + }; + + // Handle errors + xhr.onerror = () => { + statusLink.textContent = "An error occurred during the file upload."; + }; + + // Send file + const formData = new FormData(); + formData.append("file", file); + xhr.open("POST", url, true); + xhr.send(formData); + } + + // Function to copy the link to the clipboard + function copyToClipboard(text) { + navigator.clipboard.writeText(text).then(() => { + // alert("Link copied to clipboard!"); // Notify the user + }).catch(err => { + console.error("Failed to copy: ", err); + }); + } +}); diff --git a/public/sharex.sxcu b/public/sharex.sxcu new file mode 100644 index 0000000..2f14991 --- /dev/null +++ b/public/sharex.sxcu @@ -0,0 +1,11 @@ +{ + "Version": "14.0.1", + "DestinationType": "ImageUploader, FileUploader", + "RequestMethod": "POST", + "RequestURL": "https://ayaya.beauty/upload", + "Body": "MultipartFormData", + "FileFormName": "file", + "URL": "{json:link}", + "DeletionURL": "{json:deleteLink}", + "ErrorMessage": "{json:error}" +} \ No newline at end of file diff --git a/public/styles.css b/public/styles.css new file mode 100644 index 0000000..f48fa5a --- /dev/null +++ b/public/styles.css @@ -0,0 +1,135 @@ +body { + font-family: Arial, sans-serif; + background-color: #111; + margin: 0; + padding: 20px; +} + +p, h1, h2, h3, h4, h5 { + color: aliceblue +} + +.percent { + color: aliceblue +} + +.container { + max-width: 700px; + margin: auto; +/* background: white; */ + padding: 20px; + border-radius: 0px; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); +} + +#drop-area { + /*! border: 2px solid #00ff00; */ + /*! border-radius: 6px; */ + /*! padding-left: 10px; */ + /*! padding-right: 10px; */ + text-align: center; + position: relative; + width: fit-content; + margin: 0 auto; /* Center the element */ + display: block; /* Ensure it behaves as a block-level element */ + background: rgba(202,230,190,.75); + border: 1px solid #b7d1a0; + border-radius: 4px; + color: #468847; + cursor: pointer; + /*! display: inline-block; */ + font-size: 24px; + padding: 28px 48px; + text-shadow: 0 1px hsla(0,0%,100%,.5); + transition: background-color .25s,width .5s,height .5s; +} + + +.button { + display: inline-block; + padding: 10px 20px; +/* background: #; */ + color: white; + border-radius: 5px; + cursor: pointer; +/* margin-top: 10px; */ +} + +.upload-status { + margin-top: 10px; +} + +.copy-button { + margin-top: 5px; + padding: 5px 10px; + background: #28a745; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; + display: none; /* Hidden initially */ +} + +nav a, nav > ul +{ + list-style: none; + margin: 0; + padding: 0; + text-align: center; +} + +#upload-status { + margin: 20px; /* Adjust as needed */ +} + +.upload-status { + display: flex; + align-items: center; + justify-content: space-between; + border: 2px solid #f40101; /* Optional styling for the status box */ + padding: 10px; /* Optional padding */ + border-radius: 6px; /* Optional rounded corners */ + /*! background-color: #f9f9f9; */ /* Optional background color */ +} + +.link-container { + display: flex; + align-items: center; + margin-left: auto; /* Pushes the link and button to the right */ +} + +.link { + color: #ffb6c1; + text-decoration: none; /* Remove underline from link */ + margin-right: 5px; /* Space between link and button */ +} + +.link:hover { + text-decoration: underline; /* Optional: underline on hover */ +} + +.copy-button { + display: inline; + background-color: #5e5e5e; /* Button background color */ + color: white; /* Button text color */ + border: none; /* Remove border */ + border-radius: 3px; /* Rounded corners for the button */ + padding: 5px 10px; /* Button padding */ + cursor: pointer; /* Pointer cursor on hover */ +} + +.copy-button:hover { + background-color: #404040; /* Darker shade on hover */ +} + +a:link { + color: #ffb6c1 +} + +a:visited { + color: #ffb6c1 +} + +a:hover { + color: #ffb6c1 +} \ No newline at end of file diff --git a/public/upload.js b/public/upload.js new file mode 100644 index 0000000..26241c6 --- /dev/null +++ b/public/upload.js @@ -0,0 +1,165 @@ +// document.addEventListener("DOMContentLoaded", () => { +// const dropArea = document.getElementById("drop-area"); +// const fileInput = document.getElementById("fileElem"); +// const progressContainer = document.getElementById("progress-container"); +// const progressBar = document.getElementById("progress-bar"); +// const status = document.getElementById("status"); + +// // Prevent default drag behaviors +// ["dragenter", "dragover", "dragleave", "drop"].forEach(eventName => { +// dropArea.addEventListener(eventName, preventDefaults, false); +// document.body.addEventListener(eventName, preventDefaults, false); +// }); + +// // Highlight drop area when item is dragged over +// ["dragenter", "dragover"].forEach(eventName => { +// dropArea.addEventListener(eventName, highlight, false); +// }); + +// ["dragleave", "drop"].forEach(eventName => { +// dropArea.addEventListener(eventName, unhighlight, false); +// }); + +// // Handle dropped files +// dropArea.addEventListener("drop", handleDrop, false); +// dropArea.addEventListener("click", () => fileInput.click()); + +// // Handle file selection +// fileInput.addEventListener("change", () => { +// const files = fileInput.files; +// handleFiles(files); +// }, false); + +// // Handle pasted files +// document.addEventListener("paste", handlePaste, false); + +// function preventDefaults(e) { +// e.preventDefault(); +// e.stopPropagation(); +// } + +// function highlight() { +// dropArea.classList.add("highlight"); +// } + +// function unhighlight() { +// dropArea.classList.remove("highlight"); +// } + +// function handleDrop(e) { +// const dt = e.dataTransfer; +// const files = dt.files; +// handleFiles(files); +// } + +// function handlePaste(e) { +// const items = e.clipboardData.items; +// for (let i = 0; i < items.length; i++) { +// const item = items[i]; +// if (item.kind === "file") { +// const file = item.getAsFile(); +// handleFiles([file]); +// } +// } +// } + +// function handleFiles(files) { +// if (files.length > 0) { +// uploadFile(files[0]); +// } +// } + +// function uploadFile(file) { +// const url = "upload"; // Replace with your upload URL +// const xhr = new XMLHttpRequest(); + +// // Update progress bar +// xhr.upload.addEventListener("progress", (e) => { +// if (e.lengthComputable) { +// const percentComplete = (e.loaded / e.total) * 100; +// progressBar.style.width = percentComplete + "%"; // Set the width of the progress bar +// progressContainer.style.display = "block"; // Show progress container +// } +// }); + +// // Handle response +// xhr.onload = () => { +// if (xhr.status === 200) { +// try { +// const response = JSON.parse(xhr.responseText); +// const fileLink = response.link; // Assuming the response contains a key 'link' +// status.innerHTML = `File uploaded successfully! Click here to view the file`; +// } catch (error) { +// status.textContent = "File uploaded but failed to parse response."; +// } +// } else { +// status.textContent = "File upload failed."; +// } +// progressBar.style.width = "0"; // Reset progress bar +// progressContainer.style.display = "none"; // Hide progress container +// }; + +// // Handle errors +// xhr.onerror = () => { +// status.textContent = "An error occurred during the file upload."; +// progressBar.style.width = "0"; // Reset progress bar +// progressContainer.style.display = "none"; // Hide progress container +// }; + +// // Send file +// const formData = new FormData(); +// formData.append("file", file); +// xhr.open("POST", url, true); +// xhr.send(formData); +// } +// }); + +function handleFiles(input) { + const files = input.files; + Array.from(files).forEach(file => { + // Display download link initially + document.querySelector(`#link-${file.name}`).textContent = "Uploading..."; + + // Create a new FormData instance + let formData = new FormData(); + formData.append('file', file); + + // Simulate a request to the server + fetch('/upload', { method: 'POST', body: formData }) + .then(response => response.json()) + .then(data => { + // Update the progress bar + document.querySelector(`#progress-${file.name}`).style.width = `${data.progress}%`; + + // Display the download link + document.querySelector(`#link-${file.name}`).textContent = data.link; + }) + .catch(error => console.error('Error:', error)); + }); +} + +// Handle drag & drop +document.addEventListener('dragover', function(event) { + event.preventDefault(); + event.stopPropagation(); +}); + +document.addEventListener('drop', function(event) { + event.preventDefault(); + event.stopPropagation(); + + const files = event.dataTransfer.files; + handleFiles(files); +}, false); + +// Handle clipboard paste +document.addEventListener('paste', function(event) { + event.preventDefault(); + event.stopPropagation(); + + const items = event.clipboardData.items; + if (items.length > 0 && items[0].type.indexOf("text") !== -1) { + const file = items[0].getAsFile(); + handleFiles([file]); + } +}, false); diff --git a/src/config.cr b/src/config.cr index 64b59c8..ade0e06 100644 --- a/src/config.cr +++ b/src/config.cr @@ -4,6 +4,7 @@ class Config include YAML::Serializable property files : String = "./files" + property secure : Bool = false property db : String = "./db.sqlite3" property filename_lenght : Int8 = 3 # In MiB @@ -16,6 +17,8 @@ class Config property delete_key_lenght : Int8 = 8 # Blocked extensions that are not allowed to be uploaded to the server property blocked_extensions : Array(String) = [] of String + property siteInfo : String = "xd" + property siteWarning : String? = "" def self.load config_file = "config/config.yml" diff --git a/src/file-uploader.cr b/src/file-uploader.cr index 6c30bdd..c704481 100644 --- a/src/file-uploader.cr +++ b/src/file-uploader.cr @@ -14,10 +14,16 @@ CONFIG = Config.load Kemal.config.port = CONFIG.port SQL = DB.open("sqlite3://#{CONFIG.db}") +# https://github.com/iv-org/invidious/blob/90e94d4e6cc126a8b7a091d12d7a5556bfe369d5/src/invidious.cr#L78 +CURRENT_BRANCH = {{ "#{`git branch | sed -n '/* /s///p'`.strip}" }} +CURRENT_COMMIT = {{ "#{`git rev-list HEAD --max-count=1 --abbrev-commit`.strip}" }} +CURRENT_VERSION = {{ "#{`git log -1 --format=%ci | awk '{print $1}' | sed s/-/./g`.strip}" }} + Utils.create_db Utils.create_files_dir get "/" do |env| + host = env.request.headers["Host"] render "src/views/index.ecr" end @@ -47,3 +53,7 @@ end CHECK_OLD_FILES.enqueue Kemal.run + +{% if flag?(:release) || flag?(:production) %} + Kemal.config.env = "production" if !ENV.has_key?("KEMAL_ENV") +{% end %} diff --git a/src/handling.cr b/src/handling.cr index 26b51cd..bb04397 100644 --- a/src/handling.cr +++ b/src/handling.cr @@ -56,7 +56,8 @@ end if !filename.empty? JSON.build do |j| j.object do - j.field "link", "https://#{env.request.headers["Host"]}/#{filename + extension}" + CONFIG.secure ? j.field "link", "https://#{env.request.headers["Host"]}/#{filename}" : j.field "link", "http://#{env.request.headers["Host"]}/#{filename}" + j.field "linkExt", "https://#{env.request.headers["Host"]}/#{filename}#{extension}" j.field "id", filename j.field "ext", extension j.field "name", original_filename @@ -71,6 +72,7 @@ end end def retrieve_file(env) + puts env.params.url filename = SQL.query_one "SELECT filename FROM files WHERE filename = ?", env.params.url["filename"].to_s.split(".").first, as: String extension = SQL.query_one "SELECT extension FROM files WHERE filename = ?", filename, as: String send_file env, "#{CONFIG.files}/#{filename}#{extension}" @@ -102,7 +104,7 @@ end file_extension = SQL.query_one "SELECT extension FROM files WHERE delete_key = ?", env.params.query["key"], as: String File.delete("#{CONFIG.files}/#{file_to_delete}#{file_extension}") SQL.exec "DELETE FROM files WHERE delete_key = ?", env.params.query["key"] - msg("File deleted successfully") + msg("File '#{file_to_delete}' deleted successfully") rescue ex error403("Unknown error: #{ex.message}") end diff --git a/src/views/index.ecr b/src/views/index.ecr index 3817386..3dae6d6 100644 --- a/src/views/index.ecr +++ b/src/views/index.ecr @@ -1,100 +1,53 @@ + - - - - File Upload - + + + <%= host %> + - -

-
-
-

Drag and drop a file here or click to select

- -
- - - -
-
-
- -
-
- - +
+

<%= host %>

+

<%= CONFIG.siteInfo %>

+
+

Drop or Choose file(s)

+ + +
+
+
+