Критические фиксы: - main.py: монтировать /static из web/static/ (CSS не грузился совсем) - api/scans.py: filtered total count (был всегда общий, игнорируя фильтры) - web/routes.py: исправлен VALID_SORT_FIELDS (отсутствовали ключи packages) - web/routes.py: filtered total count для web scans list - package_detail.html: f.data.X вместо f.X (findings не отображались) Чистка мёртвого кода: - config.py: удалён _parse_repos и nexus_repositories (не использовались) - web/routes.py: удалён completed_scans/failed_scans (не отображались) - удалён мёртвый guarddog_nexus/static/style.css (67-байтный стаб) Качество кода: - web/routes.py: Jinja2 Environment кэшируется на уровне модуля - Вынесен дублирующийся JS в web/static/app.js - Вынесены дублирующиеся inline-стили в CSS-классы - Исправлен duplicate class attribute в списках - Удалены гигантские SVG из empty states Тесты: - 20 новых edge-case тестов (CSV export, search/filter/sort, 404, pagination) - Добавлен sample_flagged_scan fixture - Итого: 50 тестов, все зелёные
29 lines
887 B
Python
29 lines
887 B
Python
"""Configuration via environment variables."""
|
|
|
|
import os
|
|
from dataclasses import dataclass
|
|
|
|
|
|
@dataclass
|
|
class Config:
|
|
nexus_url: str = os.getenv("NEXUS_URL", "http://localhost:8081")
|
|
nexus_username: str = os.getenv("NEXUS_USERNAME", "admin")
|
|
nexus_password: str = os.getenv("NEXUS_PASSWORD", "admin123")
|
|
|
|
database_path: str = os.getenv("DATABASE_PATH", "data/guarddog.db")
|
|
|
|
host: str = os.getenv("HOST", "0.0.0.0")
|
|
port: int = int(os.getenv("PORT", "8080"))
|
|
|
|
log_level: str = os.getenv("LOG_LEVEL", "INFO")
|
|
log_syslog_host: str = os.getenv("LOG_SYSLOG_HOST", "")
|
|
log_syslog_port: int = int(os.getenv("LOG_SYSLOG_PORT", "514"))
|
|
|
|
webhook_secret: str = os.getenv("WEBHOOK_SECRET", "")
|
|
|
|
scan_timeout_seconds: int = int(os.getenv("SCAN_TIMEOUT_SECONDS", "300"))
|
|
temp_dir: str = os.getenv("TEMP_DIR", "/tmp/guarddog-nexus")
|
|
|
|
|
|
config = Config()
|