Initial commit
This commit is contained in:
commit
c9483141d4
|
@ -0,0 +1,2 @@
|
||||||
|
__pycache__
|
||||||
|
config.toml
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from src import app
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run(debug=True)
|
|
@ -0,0 +1,8 @@
|
||||||
|
name = "Folder share"
|
||||||
|
base_path = "/path/to/folder"
|
||||||
|
favicon = "/.favicon.png"
|
||||||
|
|
||||||
|
[qbittorrent]
|
||||||
|
base_url = "http://127.0.0.1:8080"
|
||||||
|
username = "admin"
|
||||||
|
password = "adminadmin"
|
|
@ -0,0 +1,63 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import tomllib
|
||||||
|
from flask import Flask, render_template, send_file
|
||||||
|
|
||||||
|
with open("config.toml", "rb") as f:
|
||||||
|
config = tomllib.load(f)
|
||||||
|
|
||||||
|
app = Flask(
|
||||||
|
__name__,
|
||||||
|
template_folder="../templates",
|
||||||
|
static_folder="../static",
|
||||||
|
)
|
||||||
|
|
||||||
|
app.jinja_env.globals.update(
|
||||||
|
config=config,
|
||||||
|
path_join=os.path.join,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Catch all
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/', defaults={'path': ''})
|
||||||
|
@app.route('/<path:path>')
|
||||||
|
def index(path):
|
||||||
|
internal_path = os.path.join(config['base_path'], path)
|
||||||
|
path = '/' + path
|
||||||
|
|
||||||
|
# Checks ###################################################
|
||||||
|
|
||||||
|
if '..' in path:
|
||||||
|
return 'Path cannot contain double dots, i.e. "..".'
|
||||||
|
|
||||||
|
if not os.path.exists(internal_path):
|
||||||
|
return (
|
||||||
|
render_template(
|
||||||
|
"error.html",
|
||||||
|
code=404,
|
||||||
|
msg=f'The path "{path}" does not exist.'
|
||||||
|
),
|
||||||
|
404,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Actual serving ###########################################
|
||||||
|
|
||||||
|
if os.path.isdir(internal_path):
|
||||||
|
_, dirs, files = next(os.walk(internal_path))
|
||||||
|
files = filter(lambda x: not x.startswith("."), files)
|
||||||
|
dirs = filter(lambda x: not x.startswith("."), dirs)
|
||||||
|
|
||||||
|
return (
|
||||||
|
render_template(
|
||||||
|
"directory.html",
|
||||||
|
path=path,
|
||||||
|
dirs=dirs,
|
||||||
|
files=files,
|
||||||
|
),
|
||||||
|
200,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Path exists, not a folder, must be a file, send
|
||||||
|
return send_file(internal_path)
|
|
@ -0,0 +1,17 @@
|
||||||
|
body {
|
||||||
|
background-color: #191919;
|
||||||
|
color: white;
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: lightgrey;
|
||||||
|
}
|
||||||
|
a:visited {
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: #191919;
|
||||||
|
background-color: white;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||||
|
<meta name="description" content="" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
|
<title>{% block title %}{% endblock %} - {{ config["name"] }}</title>
|
||||||
|
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="{{ url_for('static', filename='style/main.css') }}"
|
||||||
|
/>
|
||||||
|
<link rel="icon" href="{{ config["favicon"] }}">
|
||||||
|
|
||||||
|
{# <script src="{{ url_for('static', filename='lib/htmx.min.js') }}"></script> #}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{% block body %}{% endblock %}
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,21 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block title %}{{ path }}{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<a href=".."><--</a>
|
||||||
|
<br /><br />
|
||||||
|
|
||||||
|
{% for dir in dirs %}
|
||||||
|
<a href="{{ path_join(path, dir) }}">{{ dir }}</a><br />
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<br /><br />
|
||||||
|
|
||||||
|
<h3>Archivos</h3>
|
||||||
|
|
||||||
|
{% for file in files %}
|
||||||
|
<a href="{{ path_join(path, file) }}">{{ file }}</a><br />
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% block title %}Error {{ code }}{% endblock %}
|
||||||
|
|
||||||
|
{% block body %}
|
||||||
|
<h1>Error {{ code }}</h1>
|
||||||
|
<p>{{ msg }}</p>
|
||||||
|
<a href="/">Return to Index</a>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue