bifroest/app/templates/database_form.html
2026-10-27 08:34:17 +01:00

79 lines
4.8 KiB
HTML

{% extends "base.html" %}
{% block title %}{{ 'Datenbank bearbeiten' if server else 'Datenbank hinzufügen' }}{% endblock %}
{% block content %}
{% set back = '/workspaces/' ~ workspace.id ~ '/settings?tab=mcp#databases' %}
<h1>{{ server.label if server else 'Datenbank hinzufügen' }}</h1>
<div class="card"><div class="card-body">
<form method="post" action="{{ '/connections/' ~ server.id ~ '/database' if server else '/workspaces/' ~ workspace.id ~ '/databases' }}" class="stack">
<input type="hidden" name="_csrf" value="{{ p.csrf }}">
{% if server %}
<p class="text-sm">Kurzname <code>{{ server.name }}</code> · {{ driver.label if driver else '' }} · {{ form.host }}{% if form.port %}:{{ form.port }}{% endif %}/{{ form.database }}</p>
<p class="form-hint">Typ, Host und Datenbank bleiben; für ein anderes Ziel eine neue Datenbank anlegen.</p>
{% else %}
<div class="form-group">
<label for="driver_id">Datenbanktyp</label>
<select id="driver_id" name="driver_id" required>
{% for d in drivers %}<option value="{{ d.id }}" {% if form.driver_id|string == d.id|string %}selected{% endif %}>{{ d.label }}</option>{% endfor %}
</select>
<p class="form-hint">Die Treiber, die der Plattform-Admin bereitstellt. Der Treiber verbindet sich mit den Zugangsdaten unten; ohne sie hat er keinen Zugriff.</p>
</div>
<div class="form-group">
<label for="name">Kurzname</label>
<input id="name" name="name" required maxlength="16" pattern="[a-z][a-z0-9_]*" value="{{ form.name or '' }}" placeholder="shop">
<p class="form-hint">Präfix der Tool-Namen, z. B. <code>shop__query</code>. Über alle Workspaces eindeutig; lässt sich später nicht ändern.</p>
</div>
{% endif %}
<div class="form-group">
<label for="label">Bezeichnung</label>
<input id="label" name="label" maxlength="200" value="{{ server.label if server else form.label or '' }}" placeholder="Shop (Produktion)">
</div>
{% if not server %}
<div class="cluster">
<div class="form-group flex-1">
<label for="host">Host</label>
<input id="host" name="host" required value="{{ form.host or '' }}" placeholder="db.intern">
</div>
<div class="form-group">
<label for="port">Port</label>
<input id="port" name="port" inputmode="numeric" maxlength="5" value="{{ form.port or '' }}" placeholder="Standard">
</div>
</div>
<p class="form-hint">Nur Hosts aus AIW_DB_ALLOWED_HOSTS{% if allow_local %}, lokal auch localhost{% endif %}; der Treiber prüft zusätzlich seine eigene Liste.</p>
<div class="form-group">
<label for="database">Datenbank bzw. Service-Name</label>
<input id="database" name="database" required value="{{ form.database or '' }}" placeholder="shop bzw. FREEPDB1">
</div>
{% endif %}
<div class="form-group">
<label for="user">Benutzer</label>
<input id="user" name="user" required value="{{ form.user or '' }}" autocomplete="off">
<p class="form-hint">Ein Benutzer mit reinen Leserechten; der Test meldet, wenn er mehr darf.</p>
</div>
<div class="form-group">
<label for="password">Passwort{% if server and server.header_names %} (gesetzt){% endif %}</label>
<input id="password" name="password" type="password" autocomplete="off" {% if server %}placeholder="leer lassen = unverändert"{% endif %}>
{% if server and server.header_names %}<label class="checkbox"><input type="checkbox" name="remove_password" value="1"> Passwort entfernen</label>{% endif %}
<p class="form-hint">Verschlüsselt gespeichert und nie wieder angezeigt.</p>
</div>
<div class="form-group">
<label for="sslmode">TLS</label>
<select id="sslmode" name="sslmode">
{% for k, v in ssl_modes.items() %}<option value="{{ k }}" {% if (form.sslmode or 'require') == k %}selected{% endif %}>{{ v }}</option>{% endfor %}
</select>
</div>
{% if server %}
<label class="checkbox"><input type="checkbox" name="active" value="1" {% if server.active %}checked{% endif %}> aktiv (inaktive Datenbanken bieten keine Tools an)</label>
{% else %}
<label class="cluster">
<input type="checkbox" name="exposure_confirmed" value="1" {% if form.exposure_confirmed %}checked{% endif %}>
<span>Ich bestätige, dass alle Mitglieder dieses Workspace die Daten dieser Datenbank über die KI sehen dürfen. Der Zugriff erfolgt mit dem hinterlegten Benutzer, nicht mit den Rechten der einzelnen Mitglieder.</span>
</label>
{% endif %}
{% if error %}<p class="form-error">{{ error }}</p>{% endif %}
<div class="cluster">
<button class="btn btn-primary" type="submit">{{ 'Speichern' if server else 'Hinzufügen' }}</button>
<a class="btn btn-ghost" href="{{ back }}">Abbrechen</a>
</div>
</form>
</div></div>
{% endblock %}