second commit
This commit is contained in:
parent
6df398966e
commit
4e52414845
56
saddle.py
56
saddle.py
|
@ -2,6 +2,10 @@
|
||||||
"""
|
"""
|
||||||
A file hosting service similar to Pomf and Uguu but without the public nature.
|
A file hosting service similar to Pomf and Uguu but without the public nature.
|
||||||
"""
|
"""
|
||||||
|
import os
|
||||||
|
import string
|
||||||
|
import random
|
||||||
|
|
||||||
from aiohttp import web
|
from aiohttp import web
|
||||||
import jinja2
|
import jinja2
|
||||||
import aiohttp_jinja2
|
import aiohttp_jinja2
|
||||||
|
@ -17,9 +21,61 @@ routes = web.RouteTableDef()
|
||||||
|
|
||||||
|
|
||||||
@routes.get('/', name='index')
|
@routes.get('/', name='index')
|
||||||
|
@routes.post('/', name='index')
|
||||||
async def index(request):
|
async def index(request):
|
||||||
"""The index page."""
|
"""The index page."""
|
||||||
|
if request.method == 'GET':
|
||||||
return render_template("index.html", request, locals())
|
return render_template("index.html", request, locals())
|
||||||
|
data = await request.post()
|
||||||
|
files = []
|
||||||
|
for filefield in data.getall('files'):
|
||||||
|
files.append(handle_filefield(filefield))
|
||||||
|
|
||||||
|
files_insert = []
|
||||||
|
for file in files:
|
||||||
|
t = (request.cookies.get('userid'), file[0], file[1], 'DEFAUlT')
|
||||||
|
async with request.app['pool'] as conn:
|
||||||
|
await conn.executemany(
|
||||||
|
"INSERT INTO upload (user_id, id, filename, expiration_date) "
|
||||||
|
"VALUES ($1, $2, $3, $4)",
|
||||||
|
files_insert)
|
||||||
|
urls = [config.upload_url + f[1] for f in files]
|
||||||
|
return render_template("result.html", request, locals())
|
||||||
|
|
||||||
|
|
||||||
|
def handle_filefield(filefield, rand_name=True):
|
||||||
|
"""Handles a posted file."""
|
||||||
|
filename = safe_filename(filefield.filename)
|
||||||
|
if not filename:
|
||||||
|
rand_name = True
|
||||||
|
prefix = get_rand_chars()
|
||||||
|
if rand_name:
|
||||||
|
filename = prefix + os.path.splitext(filename)[1]
|
||||||
|
else:
|
||||||
|
filename = prefix + '_' + filename
|
||||||
|
|
||||||
|
with open(os.path.join(config.upload_dir, filename), 'wb') as file:
|
||||||
|
file.write(filefield.file.read())
|
||||||
|
|
||||||
|
t = (prefix, filename)
|
||||||
|
return t
|
||||||
|
|
||||||
|
|
||||||
|
def safe_filename(filename=''):
|
||||||
|
"""Sanitizes the given filename."""
|
||||||
|
safe_char = string.ascii_letters + string.digits + '._ '
|
||||||
|
filename = ''.join([c for c in filename if c in safe_char])
|
||||||
|
filename = filename.strip('._ ')
|
||||||
|
return filename
|
||||||
|
|
||||||
|
|
||||||
|
def get_rand_chars(n=8):
|
||||||
|
"""Returns `n` number of random ASCII characters."""
|
||||||
|
chars = []
|
||||||
|
for _ in range(n):
|
||||||
|
char = random.choice(string.ascii_letters + string.digits)
|
||||||
|
chars.append(char)
|
||||||
|
return "".join(chars)
|
||||||
|
|
||||||
|
|
||||||
async def init_app():
|
async def init_app():
|
||||||
|
|
|
@ -11,6 +11,12 @@
|
||||||
<h1>Saddle</h1>
|
<h1>Saddle</h1>
|
||||||
</header>
|
</header>
|
||||||
<main>
|
<main>
|
||||||
|
<section>
|
||||||
|
<form method="POST" enctype="multipart/form-data">
|
||||||
|
<input type="file" name="files" multiple>
|
||||||
|
<input type="submit">
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
</main>
|
</main>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
23
templates/result.html
Normal file
23
templates/result.html
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>Saddle - Results</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/saddle.css">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=0.8">
|
||||||
|
<meta name="description" content="A file upload service.">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1>Saddle</h1>
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
<section>
|
||||||
|
<ul>
|
||||||
|
{% for url in urls %}
|
||||||
|
<li><a href="{{ url }}">{{ url }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user