feat: Share-Dialog Fix, User-Sharing, Admin-Benutzerverwaltung, Registrierungs-Toggle

- Fix: Share-Dialog oeffnet sich jetzt auch bei bereits geteilten Dateien
- Neu: Dateien/Ordner direkt mit anderen Benutzern teilen (Lesen/Schreiben/Admin)
- Neu: Benutzersuche im Share-Dialog, bestehende Freigaben anzeigen/entfernen
- Neu: Admin kann Benutzer ueber die Weboberflaeche anlegen
- Neu: Admin kann Benutzer bearbeiten (Rolle, Quota, aktiv/inaktiv) und loeschen
- Neu: Schieberegler fuer oeffentliche Registrierung in den Admin-Einstellungen
- Neu: Register-Link auf Login-Seite nur sichtbar wenn Registrierung erlaubt
- Neu: Register-Seite leitet um wenn Registrierung deaktiviert
- Neu: AppSettings-Model fuer persistente App-Konfiguration
- Neu: /api/users/search Endpunkt fuer Benutzersuche in Share-Dialogen

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan Hacker
2026-04-11 15:26:04 +02:00
parent e7170b7cc8
commit 35099de2c5
8 changed files with 459 additions and 34 deletions
+19
View File
@@ -71,8 +71,27 @@ def admin_required(f):
return decorated
@api_bp.route('/auth/registration-status', methods=['GET'])
def registration_status():
"""Check if public registration is allowed."""
from app.models.settings import AppSettings
is_first_user = User.query.count() == 0
public_registration = AppSettings.get_bool('public_registration', default=False)
return jsonify({
'allowed': is_first_user or public_registration,
'is_first_user': is_first_user,
}), 200
@api_bp.route('/auth/register', methods=['POST'])
def register():
from app.models.settings import AppSettings
# Check if registration is allowed
is_first_user = User.query.count() == 0
if not is_first_user and not AppSettings.get_bool('public_registration', default=False):
return jsonify({'error': 'Oeffentliche Registrierung ist deaktiviert'}), 403
data = request.get_json()
if not data:
return jsonify({'error': 'Keine Daten gesendet'}), 400