79 lines
4.8 KiB
HTML
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 %}
|