First version

This commit is contained in:
2026-07-07 10:19:18 +02:00
parent 368a691484
commit f769d78a14
5 changed files with 631 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
import secrets
import datetime
from flask import Flask, render_template, request, jsonify, send_file
from weasyprint import HTML
import io
app = Flask(__name__)
def generate_secure_password():
# Length: randomly between 12 and 16 characters
length = secrets.choice(range(12, 17))
# Allowed Characters
upper = "ABCDEFGHJKMNPQRSTUVWXYZ" # without I, L, O
lower = "abcdefghjkmnpqrstuvwxyz" # without i, l, o
digits = "23456789" # without 0, 1
special = "!§$%&/()=?\\+#*-_,;.:@€"
while True:
password = ''.join(secrets.choice(upper + lower + digits + special) for _ in range(length))
# Minimum 2 characters from each category
if (sum(c in upper for c in password) >= 2 and
sum(c in lower for c in password) >= 2 and
sum(c in digits for c in password) >= 2 and
sum(c in special for c in password) >= 2):
# Double check that no forbidden characters somehow made it in
forbidden = "ILOilo01ÄÖÜäöü<>|~´`'\""
if not any(c in forbidden for c in password):
return password
@app.route('/')
def index():
return render_template('index.html')
@app.route('/api/generate_password', methods=['GET'])
def api_generate_password():
password = generate_secure_password()
return jsonify({"password": password})
@app.route('/download_pdf', methods=['POST'])
def download_pdf():
vorname = request.form.get('vorname', '')
nachname = request.form.get('nachname', '')
benutzername = request.form.get('benutzername', '')
passwort = request.form.get('passwort', '')
datum = datetime.datetime.now().strftime("%d.%m.%Y")
# Render template
html_out = render_template(
'benutzer_template.html',
VORNAME=vorname,
NACHNAME=nachname,
BENUTZERNAME=benutzername,
PASSWORT=passwort,
DATUM=datum
)
# Generate PDF
pdf_file = io.BytesIO()
HTML(string=html_out).write_pdf(pdf_file)
pdf_file.seek(0)
# Format filename safely
safe_vorname = vorname.replace(' ', '_')
safe_nachname = nachname.replace(' ', '_')
filename = f"Benutzerantrag_{safe_vorname}_{safe_nachname}.pdf"
return send_file(
pdf_file,
download_name=filename,
as_attachment=True,
mimetype='application/pdf'
)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)