second commit

This commit is contained in:
iou1name 2019-10-02 18:44:06 -04:00
parent 6df398966e
commit 4e52414845
3 changed files with 86 additions and 1 deletions

View File

@ -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."""
return render_template("index.html", request, locals()) if request.method == 'GET':
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():

View File

@ -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
View 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>