OGC-Layer: ohne Authentifizierungs-DB Rueckfall auf Benutzer 'apikey' + API-Key als Passwort in der Datenquelle

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Erik
2026-09-07 18:32:35 +02:00
co-authored by Claude Opus 4.8
parent 09609ec456
commit 637a3762ad
2 changed files with 15 additions and 6 deletions
+11 -3
View File
@@ -101,9 +101,14 @@ def collections_laden(client, vkz):
return rows
def layer_uri(base_url, cid, authcfg=None, storage_crs=None):
def layer_uri(base_url, cid, authcfg=None, storage_crs=None, api_key=None):
"""Die OAPIF-Datenquelle: Landing-URL + Sammlungs-ID (+ Authentifizierung).
Ohne ``authcfg`` (keine Authentifizierungs-DB bzw. Master-Passwort abgelehnt) tragen
Benutzer ``apikey`` + der API-Key als Passwort die Anmeldung — die API nimmt den Key auch
als HTTP-Basic-Passwort. Achtung: dann steht der Key in der Datenquelle und damit in
einer gespeicherten Projektdatei; die Authentifizierungs-DB ist der sichere Weg.
``srsname`` auf das Speicher-CRS der Sammlung: EPSG:25833 für die Verfahrens-Layer,
CRS84 (= EPSG:4326 lon/lat) für Vorerhebung und Maßnahmenblätter — so rechnet QGIS
nichts hin und her, und die Koordinaten bleiben, wie die API sie speichert.
@@ -118,10 +123,13 @@ def layer_uri(base_url, cid, authcfg=None, storage_crs=None):
uri.setParam("srsname", "EPSG:25833")
if authcfg:
uri.setAuthConfigId(authcfg)
elif api_key:
uri.setUsername("apikey")
uri.setPassword(api_key)
return uri.uri(False)
def layer_hinzufuegen(iface, base_url, vkz, vkz_name, collections, authcfg=None):
def layer_hinzufuegen(iface, base_url, vkz, vkz_name, collections, authcfg=None, api_key=None):
"""Je Sammlung einen OAPIF-Layer anlegen, gruppiert unter „VLN <Verfahren>".
:returns: ``(geladen, fehler)`` — Anzahl Layer und Liste ``(cid, Meldung)``.
@@ -141,7 +149,7 @@ def layer_hinzufuegen(iface, base_url, vkz, vkz_name, collections, authcfg=None)
if gruppen_name not in untergruppen:
untergruppen[gruppen_name] = gruppe.findGroup(gruppen_name) or gruppe.addGroup(gruppen_name)
titel = str(coll.get("title") or cid)
layer = QgsVectorLayer(layer_uri(base_url, cid, authcfg, coll.get("storageCrs")), titel, "OAPIF")
layer = QgsVectorLayer(layer_uri(base_url, cid, authcfg, coll.get("storageCrs"), api_key), titel, "OAPIF")
if not layer.isValid():
fehler.append((cid, layer.error().message() if layer.error() else "Layer ungültig"))
continue
+4 -3
View File
@@ -422,8 +422,8 @@ class VlnKartenPlugin:
if not authcfg:
self.iface.messageBar().pushMessage(
"VLN Karten",
"Keine QGIS-Authentifizierungskonfiguration angelegt — QGIS fragt beim ersten "
"Zugriff nach Anmeldename und Passwort (HTTP Basic, Manager-Login).",
"Keine QGIS-Authentifizierungskonfiguration — der API-Key steht jetzt in den "
"Datenquellen der Layer (und damit in einer gespeicherten Projektdatei).",
level=Qgis.Warning, duration=8)
try:
collections = ogc_layers.collections_laden(self.client, vkz)
@@ -438,7 +438,8 @@ class VlnKartenPlugin:
"(oder keine Berechtigung).")
return
geladen, fehler = ogc_layers.layer_hinzufuegen(
self.iface, self.client.base_url, vkz, self.combo.currentText(), collections, authcfg)
self.iface, self.client.base_url, vkz, self.combo.currentText(), collections, authcfg,
api_key=None if authcfg else self.client.api_key)
if fehler:
self._show_error("OGC API — nicht geladen",
"\n".join("%s: %s" % f for f in fehler))