First version
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user