feat: Add password login system and upgrade agent models

- App-level password auth via Flask session (APP_PASSWORD in .env)
- login_required decorator on all routes
- Login page, logout button in navbar, 7-day session lifetime
- Upgrade musik_rechte_advisor and negotiator from Opus 4.0 to Opus 4.6
- Fix orchestrator session cookie overflow (kb/prompts no longer stored in session)
- Change app port from 5000 to 5050 (5000 occupied by Zou/Kitsu)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
eric 2026-02-21 17:26:10 +00:00
parent 7ee66397e1
commit 83b1842392
5 changed files with 124 additions and 12 deletions

View file

@ -70,6 +70,11 @@
<span></span> Settings
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/logout">
<span>🚪</span> Logout
</a>
</li>
</ul>
</div>
</div>

36
templates/login.html Normal file
View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="de" data-theme="{{ theme or 'dark' }}">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login · {{ app_name or 'Frankenbot' }}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<div class="container d-flex align-items-center justify-content-center" style="min-height: 100vh;">
<div class="card" style="max-width: 400px; width: 100%;">
<div class="card-body p-4">
<div class="text-center mb-4">
<span class="material-icons" style="font-size: 3rem; color: var(--accent);">smart_toy</span>
<h3 class="mt-2" style="color: var(--text-primary);">{{ app_name or 'Frankenbot' }}</h3>
<p class="text-muted">Agent Orchestration System</p>
</div>
{% if error %}
<div class="alert alert-danger">{{ error }}</div>
{% endif %}
<form method="POST">
<div class="mb-3">
<input type="password" class="form-control" name="password" placeholder="Passwort" autofocus required>
</div>
<button type="submit" class="btn btn-primary w-100">Anmelden</button>
</form>
</div>
</div>
</div>
</body>
</html>