partage

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.z3bra.org/partage.git
Log | Files | Refs | README | LICENSE

commit 8f1f9b5cd01c58ed94a0ebfb3bd685983d047bc7
parent 5cf182f6f8ce9e5fa2ace974c8f9378c1ce8fdf4
Author: Willy Goiffon <dev@z3bra.org>
Date:   Wed, 20 Oct 2021 22:37:21 +0200

Move example site and config into its own directory

Diffstat:
Aexample/partage.conf | 36++++++++++++++++++++++++++++++++++++
Aexample/static/dz.js | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Rstatic/favicon.ico -> example/static/favicon.ico | 0
Rstatic/partage.css -> example/static/partage.css | 0
Rstatic/partage.png -> example/static/partage.png | 0
Rstatic/robots.txt -> example/static/robots.txt | 0
Aexample/templates/index.html | 39+++++++++++++++++++++++++++++++++++++++
Aexample/templates/upload.html | 22++++++++++++++++++++++
Dstatic/dz.js | 85-------------------------------------------------------------------------------
Dtemplates/index.html | 39---------------------------------------
Dtemplates/upload.html | 22----------------------
11 files changed, 185 insertions(+), 146 deletions(-)

diff --git a/example/partage.conf b/example/partage.conf @@ -0,0 +1,36 @@ +# TCP or unix Socket to listen on. +# When unix sockets are used, the content will be served over FastCGI. +#listen = /var/run/partage-fcgi.sock +listen = 127.0.0.1:9000 + +# Base to use when constructing URI to files uploaded. +# The full URI must be specified, in the form SCHEME://HOST[:PORT] +baseuri = http://127.0.0.1:9000 + +# Drop privilege to the user and group specified. +# When only the user is specified, the default group of the user will +# be used. +#user = www +#group = daemon + +# Change the root directory to the following directory. +# When a chroot is set, all path must be given according to the chroot. +# Note: the configuration file is read before chrooting. +#chroot = /var/www + +# Path to the different path used by the server. Must take into account +# the chroot if set. +rootdir = example/static +tmplpath = example/templates +filepath = example/files +metapath = example/meta + +# URI context that files will be served on +filectx = /f/ + +# Maximum per-file upload size (in bytes) +maxsize = 536870912 # 512Mib + +# Default expiration time (in seconds). An expiration time of 0 seconds +# means no expiration. +expiry = 86400 # 24 hours diff --git a/example/static/dz.js b/example/static/dz.js @@ -0,0 +1,88 @@ +// Handle drag and drop into a dropzone_element div: +// send the files as a POST request to the server +"use strict"; + +// Only start once the DOM tree is ready +if(document.readyState === "complete") { + setupzone(); +} else { + document.addEventListener("DOMContentLoaded", setupzone); +} + +function setupzone() { + let dropzone = document.getElementById("dropzone"); + let fileinput = document.getElementById("filebox"); + let fallbackform = document.getElementById("fallbackform"); + + fallbackform.style.display = "none"; + + dropzone.className = "dropzone"; + dropzone.innerHTML = "Click or drop file(s)"; + + dropzone.onclick = function() { + fileinput.click() + return false; + } + + dropzone.ondragover = function() { + this.className = "dropzone dragover"; + return false; + } + + dropzone.ondragleave = function() { + this.className = "dropzone"; + return false; + } + + dropzone.ondrop = function(e) { + // Stop browser from simply opening that was just dropped + e.preventDefault(); + // Restore original dropzone appearance + this.className = "dropzone"; + sendfiles(e.dataTransfer.files) + } + + fileinput.onchange = function(e) { + sendfiles(this.files) + } +} + +function sendfiles(files) { + let uploads = document.getElementById("uploads"); + let progressbar = document.createElement("progress"); + let uploadlist = document.createElement("ul"); + let formData = new FormData(), xhr = new XMLHttpRequest(); + + uploads.appendChild(progressbar); + uploads.appendChild(uploadlist); + + formData.append("expiry", 10); + for(let i=0; i < files.length; i++) { + formData.append("file", files[i]); + } + + // triggers periodically + xhr.upload.onprogress = function(e) { + // e.loaded - how many bytes downloaded + // e.lengthComputable = true if the server sent Content-Length header + // e.total - total number of bytes (if lengthComputable) + if (e.lengthComputable) { + progressbar.max = e.total + } + progressbar.value = e.loaded + } + + xhr.onreadystatechange = function() { + if(xhr.readyState === XMLHttpRequest.DONE) { + progressbar.remove(); + this.response.split(/\r?\n/).forEach(function(link) { + let li = document.createElement("li"); + li.innerHTML = `<a href="${link}">${link}</a>`; + uploadlist.appendChild(li); + }); + } + } + + xhr.open('POST', window.location.href, true); // async = true + xhr.send(formData); +} diff --git a/static/favicon.ico b/example/static/favicon.ico Binary files differ. diff --git a/static/partage.css b/example/static/partage.css diff --git a/static/partage.png b/example/static/partage.png Binary files differ. diff --git a/static/robots.txt b/example/static/robots.txt diff --git a/example/templates/index.html b/example/templates/index.html @@ -0,0 +1,39 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <meta name="author" content="z3bra"> + <meta name="robots" content="noindex,nofollow" /> + <meta name="viewport" content="width=device-width"> + <link rel="stylesheet" type="text/css" href="/partage.css" /> + <link rel="icon" type="image/ico" href="/favicon.ico" /> + <title>Partage</title> +</head> +<body> + <header> + <img id="logo" src="/partage.png" /> + <h1>partage</h1> + </header> + <form enctype="multipart/form-data" method="post"> + <div id="dropzone"></div> + <div id="fallbackform" class="dropzone"> + <input id="filebox" name="file" type="file" multiple/> + <input id="output" name="output" type="hidden" value='html' /> + <input type="submit" value="Upload"/> + </div> + <section id="formsettings"> + <label for="expiry"> Destroy after </label> + <select id="expiry" name="expiry"> + <option value="900"> 15 minutes </option> + <option value="3600"> 1 hour </option> + <option value="28800"> 8 hours </option> + <option value="86400" selected> 1 day </option> + <option value="604800"> 1 week </option> + </select> + </section> + </form> + <p>File size limited to {{.Maxsize}}.</p> + <div id="uploads"></div> + <script src="/dz.js"></script> +</body> +</html> diff --git a/example/templates/upload.html b/example/templates/upload.html @@ -0,0 +1,22 @@ +<!DOCTYPE HTML> +<html> +<head> + <meta charset="utf-8"> + <meta name="author" content="z3bra"> + <meta name="viewport" content="width=device-width"> + <link rel="stylesheet" type="text/css" href="/partage.css" /> + <link rel="icon" type="image/ico" href="/favicon.ico" /> + <title>Partage</title> +</head> +<body> + <header> + <img id="logo" src="/partage.png" /> + <h1>partage</h1> + </header> + <ul> + {{range .Links}} + <li><a href="{{.}}">{{.}}</a></li> + {{end}} + </ul> +</body> +</html> diff --git a/static/dz.js b/static/dz.js @@ -1,85 +0,0 @@ -// Handle drag and drop into a dropzone_element div: -// send the files as a POST request to the server -"use strict"; - -// Only start once the DOM tree is ready -if(document.readyState === "complete") { - setupzone(); -} else { - document.addEventListener("DOMContentLoaded", setupzone); -} - -function setupzone() { - let dropzone = document.getElementById("dropzone"); - let fileinput = document.getElementById("filebox"); - let fallbackform = document.getElementById("fallbackform"); - - fallbackform.style.display = "none"; - - dropzone.className = "dropzone"; - dropzone.innerHTML = "Click or drop file(s)"; - - dropzone.onclick = function() { - fileinput.click() - return false; - } - - dropzone.ondragover = function() { - this.className = "dropzone dragover"; - return false; - } - - dropzone.ondragleave = function() { - this.className = "dropzone"; - return false; - } - - dropzone.ondrop = function(e) { - // Stop browser from simply opening that was just dropped - e.preventDefault(); - // Restore original dropzone appearance - this.className = "dropzone"; - sendfiles(e.dataTransfer.files) - } - - fileinput.onchange = function(e) { - sendfiles(this.files) - } -} - -function sendfiles(files) { - let uploads = document.getElementById("uploads"); - let progressbar = document.createElement("progress"); - let uploadlist = document.createElement("ul"); - let formData = new FormData(), xhr = new XMLHttpRequest(); - - uploads.appendChild(progressbar); - uploads.appendChild(uploadlist); - - formData.append("expiry", 10); - for(let i=0; i < files.length; i++) { - formData.append("file", files[i]); - } - - // triggers periodically - xhr.upload.onprogress = function(e) { - // e.loaded - how many bytes downloaded - // e.lengthComputable = true if the server sent Content-Length header - // e.total - total number of bytes (if lengthComputable) - - } - - xhr.onreadystatechange = function() { - if(xhr.readyState === XMLHttpRequest.DONE) { - progressbar.remove(); - this.response.split(/\r?\n/).forEach(function(link) { - let li = document.createElement("li"); - li.innerHTML = `<a href="${link}">${link}</a>`; - uploadlist.appendChild(li); - }); - } - } - - xhr.open('POST', window.location.href, true); // async = true - xhr.send(formData); -} diff --git a/templates/index.html b/templates/index.html @@ -1,39 +0,0 @@ -<!DOCTYPE HTML> -<html> -<head> - <meta charset="utf-8"> - <meta name="author" content="z3bra"> - <meta name="robots" content="noindex,nofollow" /> - <meta name="viewport" content="width=device-width"> - <link rel="stylesheet" type="text/css" href="/partage.css" /> - <link rel="icon" type="image/png" href="/favicon.ico" /> - <title>Partage</title> -</head> -<body> - <header> - <img id="logo" src="/partage.png" /> - <h1>partage</h1> - </header> - <form enctype="multipart/form-data" method="post"> - <div id="dropzone"></div> - <div id="fallbackform" class="dropzone"> - <input id="filebox" name="file" type="file" multiple/> - <input id="output" name="output" type="hidden" value='html' /> - <input type="submit" value="Upload"/> - </div> - <section id="formsettings"> - <label for="expiry"> Destroy after </label> - <select id="expiry" name="expiry"> - <option value="900"> 15 minutes </option> - <option value="3600"> 1 hour </option> - <option value="28800"> 8 hours </option> - <option value="86400" selected> 1 day </option> - <option value="604800"> 1 week </option> - </select> - </section> - </form> - <p>File size limited to {{.Maxsize}}.</p> - <div id="uploads"></div> - <script src="/dz.js"></script> -</body> -</html> diff --git a/templates/upload.html b/templates/upload.html @@ -1,22 +0,0 @@ -<!DOCTYPE HTML> -<html> -<head> - <meta charset="utf-8"> - <meta name="author" content="z3bra"> - <meta name="viewport" content="width=device-width"> - <link rel="stylesheet" type="text/css" href="/partage.css" /> - <link rel="icon" type="image/png" href="/favicon.ico" /> - <title>Partage</title> -</head> -<body> - <header> - <h1>partage</h1> - <img id="logo" src="/partage.png" /> - </header> - <ul> - {{range .Links}} - <li><a href="{{.}}">{{.}}</a></li> - {{end}} - </ul> -</body> -</html>