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:
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user