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
|
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).
|
"""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,
|
``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
|
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.
|
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")
|
uri.setParam("srsname", "EPSG:25833")
|
||||||
if authcfg:
|
if authcfg:
|
||||||
uri.setAuthConfigId(authcfg)
|
uri.setAuthConfigId(authcfg)
|
||||||
|
elif api_key:
|
||||||
|
uri.setUsername("apikey")
|
||||||
|
uri.setPassword(api_key)
|
||||||
return uri.uri(False)
|
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>".
|
"""Je Sammlung einen OAPIF-Layer anlegen, gruppiert unter „VLN <Verfahren>".
|
||||||
|
|
||||||
:returns: ``(geladen, fehler)`` — Anzahl Layer und Liste ``(cid, Meldung)``.
|
: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:
|
if gruppen_name not in untergruppen:
|
||||||
untergruppen[gruppen_name] = gruppe.findGroup(gruppen_name) or gruppe.addGroup(gruppen_name)
|
untergruppen[gruppen_name] = gruppe.findGroup(gruppen_name) or gruppe.addGroup(gruppen_name)
|
||||||
titel = str(coll.get("title") or cid)
|
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():
|
if not layer.isValid():
|
||||||
fehler.append((cid, layer.error().message() if layer.error() else "Layer ungültig"))
|
fehler.append((cid, layer.error().message() if layer.error() else "Layer ungültig"))
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -422,8 +422,8 @@ class VlnKartenPlugin:
|
|||||||
if not authcfg:
|
if not authcfg:
|
||||||
self.iface.messageBar().pushMessage(
|
self.iface.messageBar().pushMessage(
|
||||||
"VLN Karten",
|
"VLN Karten",
|
||||||
"Keine QGIS-Authentifizierungskonfiguration angelegt — QGIS fragt beim ersten "
|
"Keine QGIS-Authentifizierungskonfiguration — der API-Key steht jetzt in den "
|
||||||
"Zugriff nach Anmeldename und Passwort (HTTP Basic, Manager-Login).",
|
"Datenquellen der Layer (und damit in einer gespeicherten Projektdatei).",
|
||||||
level=Qgis.Warning, duration=8)
|
level=Qgis.Warning, duration=8)
|
||||||
try:
|
try:
|
||||||
collections = ogc_layers.collections_laden(self.client, vkz)
|
collections = ogc_layers.collections_laden(self.client, vkz)
|
||||||
@@ -438,7 +438,8 @@ class VlnKartenPlugin:
|
|||||||
"(oder keine Berechtigung).")
|
"(oder keine Berechtigung).")
|
||||||
return
|
return
|
||||||
geladen, fehler = ogc_layers.layer_hinzufuegen(
|
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:
|
if fehler:
|
||||||
self._show_error("OGC API — nicht geladen",
|
self._show_error("OGC API — nicht geladen",
|
||||||
"\n".join("%s: %s" % f for f in fehler))
|
"\n".join("%s: %s" % f for f in fehler))
|
||||||
|
|||||||
Reference in New Issue
Block a user