diff --git a/src/dlw/admin.py b/src/dlw/admin.py index 2d7ac80..1a131b6 100644 --- a/src/dlw/admin.py +++ b/src/dlw/admin.py @@ -5,17 +5,27 @@ import time from . import git_ops from .marvin_ops import MarvinClient # Für Uberspace 8 Marvin API +# --- Konfiguration aus Umgebungsvariablen --- +# Diese Variablen werden auf dem Uberspace (z.B. via .bash_profile oder Service-Config) gesetzt. +UBERSPACE_ASTEROID = os.getenv('UBERSPACE_ASTEROID') +UBERSPACE_DOMAIN = os.getenv('UBERSPACE_DOMAIN') +MARVIN_API_KEY = os.getenv('MARVIN_API_KEY') +FLASK_SECRET_KEY = os.getenv('FLASK_SECRET_KEY', 'fallback-fuer-lokale-entwicklung') + app = Flask(__name__) # Konfiguration: Nutzt das 'downloads' Verzeichnis im aktuellen Arbeitsverzeichnis app.config['UPLOAD_FOLDER'] = os.path.join(os.getcwd(), 'downloads') -app.secret_key = 'sehr_geheimer_schluessel' # Erforderlich für Session/Flash-Messages +app.secret_key = FLASK_SECRET_KEY + +# Sicherstellen, dass der Upload-Ordner existiert +os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) # --- Hilfsfunktionen für die Content-Erzeugung --- def generate_markdown_content(data, article_slug): """Erzeugt den Markdown-Inhalt inklusive YAML Frontmatter für Pelican.""" - # Pfade für die Links im statischen Blog + # Pfade für die Links im statischen Blog (relativ zur Domain) pdf_path = f"/downloads/{article_slug}.pdf" audio_path = f"/downloads/{article_slug}.mp3" @@ -40,6 +50,7 @@ def new_article_form(): """Zeigt das Eingabeformular für die Autorin.""" form_html = """

Neuen Artikel erstellen

+

Angemeldet auf Asteroid: {{ asteroid }}




@@ -62,7 +73,7 @@ def new_article_form():
""" - return form_html # + return render_template_string(form_html, asteroid=UBERSPACE_ASTEROID) @app.route('/preview', methods=['POST']) def preview_article(): @@ -73,7 +84,9 @@ def preview_article(): slug = secure_filename(data['title']).lower().replace('-', '_') markdown_content = generate_markdown_content(data, slug) - # Simulation der Vorschau + # In der Praxis müssten die Dateien hier temporär zwischengespeichert werden, + # um sie im /publish Schritt final zu übernehmen. + preview_html = f"""

Vorschau: {data['title']}


@@ -83,16 +96,16 @@ def preview_article():

[Hier würde der gerenderte Artikeltext stehen]


-
+ -

Möchten Sie diesen Artikel jetzt veröffentlichen? (Dies löst einen Git-Push aus)

- +

Möchten Sie diesen Artikel jetzt auf {UBERSPACE_DOMAIN} veröffentlichen?

+ Abbrechen und zurück
""" - return preview_html # + return preview_html @app.route('/publish', methods=['POST']) def publish_article(): @@ -101,15 +114,14 @@ def publish_article(): article_title = request.form.get('article_title') if not markdown_content: - return "Fehler: Keine Inhaltsdaten vorhanden.", 400 + flash("Fehler: Keine Inhaltsdaten vorhanden.") + return redirect(url_for('new_article_form')) # Dateinamen und Pfad festlegen article_slug = secure_filename(article_title).lower().replace('-', '_') filename = f"{article_slug}.md" article_path = os.path.join(os.getcwd(), 'content', filename) - download_paths = [] - # 1. Speichern des Markdown-Artikels try: with open(article_path, 'w', encoding='utf-8') as f: @@ -117,12 +129,18 @@ def publish_article(): except IOError as e: return f"Fehler beim Speichern des Artikels: {e}", 500 - # 2. Speichern der hochgeladenen Dateien (PDF/MP3) - # Hinweis: In der Praxis müssen Dateien ggf. zwischen Preview und Publish gepuffert werden. - for key in ['pdf_file', 'audio_file']: - file = request.files.get(key) - if file and file.filename != '': - ext = ".pdf" if key == "pdf_file" else ".mp3" - target_name = secure_filename(f"{article_slug}{ext}") - save_path = os.path.join(app.config['UPLOAD_FOLDER'], target_name) - file \ No newline at end of file + # 2. Git Operationen ausführen + try: + # Wir übergeben die Umgebungsvariablen an die git_ops, falls dort + # spezifische Commit-Messages oder Remote-Targets benötigt werden. + git_ops.add_and_commit(filename, f"Neuer Artikel: {article_title}") + git_ops.push_to_remote() + flash(f"Erfolgreich veröffentlicht auf {UBERSPACE_DOMAIN}!") + except Exception as e: + return f"Git-Fehler: {e}", 500 + + return redirect(url_for('new_article_form')) + +if __name__ == '__main__': + # Lokal zum Testen, auf Uberspace wird dies via Gunicorn/Passenger gestartet + app.run(debug=True) \ No newline at end of file