Login beim Start, API-Key wird gespeichert; README: PAC-Proxy als Bremse

Erik (07.09.2026): "zuerst soll ein Loginfenster kommen und nach dem Login soll der Apikey
gespeichert werden."

- plugin.py: ohne gespeicherten Key zeigt initGui 1,5 s nach dem QGIS-Start den
  Anmeldedialog (singleShot, damit der Dialog den Start nicht blockiert); mit Key wie
  bisher direkt die Verfahrensliste.
- Nach erfolgreichem Login werden api_key (userauth) UND mail in QSettings gemerkt, die
  Meldung nennt den angemeldeten Nutzer und die Dauerhaftigkeit. Das Passwort wird nie
  gespeichert.
- README: Login-Verhalten; Abschnitt zum PAC-Proxy, der jede QGIS-Anfrage ~10 s kostet
  (gemessen 07.09.2026: Server antwortet in 0,35 s, alle Antworten 200/204).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Erik
2026-09-07 19:37:32 +02:00
co-authored by Claude Opus 4.8
parent 637a3762ad
commit dc960ddca4
2 changed files with 29 additions and 5 deletions
+17
View File
@@ -139,6 +139,19 @@ uri.setAuthConfigId("<authcfg-id>") # APIHeader (X-API-Key) oder Basic
layer = QgsVectorLayer(uri.uri(False), "Plan 41 · 27998 · Flächen", "OAPIF")
```
### Wenn das Laden quälend langsam ist
Nicht die API: ein **System-Proxy (PAC-Datei)**, den macOS nicht ausführen kann, lässt jede
Qt-Anfrage in einen Timeout laufen (~10 s statt 0,3 s) — QGIS wirkt dann hängend, obwohl der
Server jede Anfrage mit 200 beantwortet. Prüfen und abschalten:
```bash
networksetup -getautoproxyurl Wi-Fi # Enabled: Yes + unerreichbare .pac-Datei?
networksetup -setautoproxystate Wi-Fi off # nur wenn im Netz kein Proxy nötig ist
```
In der QGIS-Meldungsleiste steht dann `Execution of PAC script … failed (…-1002)`.
### Regeln beim Schreiben
- **Geometriefamilie:** in `…-punkt` nur Punkte, in `…-linie` nur Linien, in `…-flaeche` nur Flächen (sonst HTTP 400).
@@ -183,6 +196,10 @@ Part-5-Schema für Felder/Geometrietyp, `OPTIONS …/items` mit `Allow`, PATCH a
Das Plugin macht den kompletten Arbeitsablauf in der QGIS-Oberfläche
erlebbar:
- **Login beim Start**: ohne gespeicherten API-Key zeigt das Plugin nach dem QGIS-Start
gleich den Anmeldedialog (E-Mail/Passwort). Der Login liefert das `userauth`-Token; das
Plugin speichert **nur dieses Token** (QSettings `vln_karten/api_key`), nie das Passwort,
und nutzt es in jeder weiteren Sitzung. „Abmelden“ löscht es.
- **Einmaliger Login** (E-Mail/Passwort) — der API-Key wird in den
QGIS-Einstellungen gespeichert und über QGIS-Neustarts hinweg
wiederverwendet; bei 401/403 öffnet sich der Anmeldedialog erneut.
+12 -5
View File
@@ -115,8 +115,9 @@ class VlnKartenPlugin:
self._set_logged_out_ui()
# Gespeicherten API-Key aus früherer Sitzung wiederverwenden;
# die Verfahrensliste erst nach dem QGIS-Start abrufen.
# Gespeicherten API-Key aus früherer Sitzung wiederverwenden; sonst gleich beim Start
# anmelden (Erik, 07.09.2026: „zuerst ein Loginfenster, danach den API-Key speichern").
# Beides erst NACH dem QGIS-Start (singleShot), sonst blockiert der Dialog das Laden.
settings = QSettings()
settings.beginGroup(SETTINGS_GROUP)
api_key = settings.value("api_key", "")
@@ -125,6 +126,8 @@ class VlnKartenPlugin:
if api_key:
self.client = KartenApiClient(api_key=api_key, mail=mail)
QTimer.singleShot(0, self.populate_verfahren)
else:
QTimer.singleShot(1500, self.run_login)
def unload(self):
for signal in (self.iface.projectRead, self.iface.newProjectCreated):
@@ -165,17 +168,21 @@ class VlnKartenPlugin:
return
self.client = client
# Nach dem Login wird der API-Key (userauth) gespeichert und in jeder weiteren Sitzung
# wiederverwendet — das Passwort selbst speichert das Plugin nie. Ablage: QSettings
# („vln_karten/api_key"), zurücksetzen über „Abmelden".
settings = QSettings()
settings.beginGroup(SETTINGS_GROUP)
settings.setValue("api_key", client.api_key)
settings.setValue("mail", client.mail or dialog.mail())
settings.endGroup()
self.iface.messageBar().pushMessage(
"VLN Karten",
"Anmeldung erfolgreich — die Zugangsdaten werden für künftige "
"QGIS-Sitzungen gemerkt.",
"Angemeldet als %s — der API-Key ist gespeichert und gilt auch nach einem "
"QGIS-Neustart." % (client.mail or dialog.mail()),
level=Qgis.Success,
duration=5,
duration=6,
)
self.populate_verfahren()