Added authentication for test-requests and test agains current nginx-server
Sonarqube Scanner / Build and analyze (push) Failing after 20s

This commit is contained in:
Florian Zumpe
2026-06-17 13:08:48 +02:00
parent b33ed98c66
commit d0046f5693
6 changed files with 50 additions and 26 deletions
+18 -4
View File
@@ -18,6 +18,8 @@ from urllib.parse import urljoin
from urllib.request import Request, urlopen
DEFAULT_BASE_URL = "https://wegwichtel.de"
API_USER_ENV = "API_USER"
API_PASSWORD_ENV = "API_PASSWORD"
class ApiError(RuntimeError):
@@ -33,6 +35,15 @@ class Credentials:
password: str
def credentials_from_environment() -> Credentials | None:
"""Liest CI-Credentials, ohne einen Request vor dem ersten HTTP 401 zu authentifizieren."""
username = os.getenv(API_USER_ENV, "").strip()
password = os.getenv(API_PASSWORD_ENV, "").strip()
if username and password:
return Credentials(username, password)
return None
class ApiClient:
"""Kleine HTTP-Schicht mit dynamischer Basic-Auth-Nachfrage bei 401."""
@@ -41,7 +52,12 @@ class ApiClient:
self.credentials = Credentials(username, password) if username and password else None
def prompt_credentials(self) -> None:
default_user = self.credentials.username if self.credentials else os.getenv("WEGWICHTEL_USER", "")
environment_credentials = credentials_from_environment()
if environment_credentials:
self.credentials = environment_credentials
return
default_user = self.credentials.username if self.credentials else os.getenv(API_USER_ENV, "")
username = input(f"Benutzername{f' [{default_user}]' if default_user else ''}: ").strip() or default_user
if not username:
raise ApiError(401, "Für den geschützten API-Zugriff ist ein Benutzername erforderlich.")
@@ -172,9 +188,7 @@ def add_common_arguments(parser: argparse.ArgumentParser) -> None:
def client_from_args(args: argparse.Namespace) -> ApiClient:
base_url = args.base_url or os.getenv("WEGWICHTEL_URL") or DEFAULT_BASE_URL
username = args.username or os.getenv("WEGWICHTEL_USER")
password = os.getenv("WEGWICHTEL_PASSWORD") if username else None
return ApiClient(base_url, username, password)
return ApiClient(base_url, args.username)
def ask(label: str, value: Any = None, *, required: bool = False, cast: Callable[[str], Any] = str) -> Any: