Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 

112 řádky
3.5 KiB

  1. import os
  2. from dotenv import load_dotenv
  3. load_dotenv()
  4. def _clean(value: str) -> str:
  5. if value is None:
  6. return ""
  7. return str(value).strip().strip('"').strip("'")
  8. def _has_http_scheme(value: str) -> bool:
  9. return value.startswith("http://") or value.startswith("https://")
  10. def _ensure_http_scheme(value: str, default_scheme: str = "https") -> str:
  11. value = _clean(value)
  12. if not value:
  13. return ""
  14. if _has_http_scheme(value):
  15. return value
  16. if value.startswith("/"):
  17. return value
  18. return f"{default_scheme}://{value}"
  19. def _absolute_or_join(value: str, base_url: str) -> str:
  20. value = _clean(value)
  21. if not value:
  22. return ""
  23. if _has_http_scheme(value):
  24. return value
  25. if value.startswith("/") and base_url:
  26. return f"{base_url.rstrip('/')}{value}"
  27. return _ensure_http_scheme(value)
  28. # Keycloak configuration (look in the .env)
  29. SECRET = os.getenv("SECRET")
  30. KEYCLOAK_AUDIENCE = os.getenv("KEYCLOAK_AUDIENCE")
  31. _raw_keycloak_server = _clean(os.getenv("KEYCLOAK_SERVER"))
  32. KEYCLOAK_SERVER = _ensure_http_scheme(_raw_keycloak_server)
  33. _default_realm = _clean(os.getenv("KEYCLOAK_REALM")) or "API.Server.local"
  34. _raw_keycloak_issuer = _clean(os.getenv("KEYCLOAK_ISSUER"))
  35. if _raw_keycloak_issuer and "${" not in _raw_keycloak_issuer:
  36. KEYCLOAK_ISSUER = _absolute_or_join(_raw_keycloak_issuer, KEYCLOAK_SERVER)
  37. elif KEYCLOAK_SERVER:
  38. KEYCLOAK_ISSUER = f"{KEYCLOAK_SERVER.rstrip('/')}/realms/{_default_realm}"
  39. else:
  40. KEYCLOAK_ISSUER = ""
  41. _raw_keycloak_protocol = _clean(os.getenv("KEYCLOAK_PROTOCOL_ENDPOINT"))
  42. if _raw_keycloak_protocol and "${" not in _raw_keycloak_protocol:
  43. KEYCLOAK_PROTOCOL_ENDPOINT = _absolute_or_join(_raw_keycloak_protocol, KEYCLOAK_SERVER)
  44. elif KEYCLOAK_ISSUER:
  45. KEYCLOAK_PROTOCOL_ENDPOINT = f"{KEYCLOAK_ISSUER.rstrip('/')}/protocol/openid-connect"
  46. else:
  47. KEYCLOAK_PROTOCOL_ENDPOINT = ""
  48. _raw_jwks = _clean(os.getenv("KEYCLOAK_JWKS_URL"))
  49. if _raw_jwks and "${" not in _raw_jwks:
  50. KEYCLOAK_JWKS_URL = _absolute_or_join(_raw_jwks, KEYCLOAK_SERVER)
  51. elif KEYCLOAK_PROTOCOL_ENDPOINT:
  52. KEYCLOAK_JWKS_URL = f"{KEYCLOAK_PROTOCOL_ENDPOINT.rstrip('/')}/certs"
  53. else:
  54. KEYCLOAK_JWKS_URL = ""
  55. _raw_auth = _clean(os.getenv("KEYCLOAK_AUTH_URL"))
  56. if _raw_auth and "${" not in _raw_auth:
  57. KEYCLOAK_AUTH_URL = _absolute_or_join(_raw_auth, KEYCLOAK_SERVER)
  58. elif KEYCLOAK_PROTOCOL_ENDPOINT:
  59. KEYCLOAK_AUTH_URL = f"{KEYCLOAK_PROTOCOL_ENDPOINT.rstrip('/')}/auth"
  60. else:
  61. KEYCLOAK_AUTH_URL = ""
  62. _raw_token = _clean(os.getenv("KEYCLOAK_TOKEN_URL"))
  63. if _raw_token and "${" not in _raw_token:
  64. KEYCLOAK_TOKEN_URL = _absolute_or_join(_raw_token, KEYCLOAK_SERVER)
  65. elif KEYCLOAK_PROTOCOL_ENDPOINT:
  66. KEYCLOAK_TOKEN_URL = f"{KEYCLOAK_PROTOCOL_ENDPOINT.rstrip('/')}/token"
  67. else:
  68. KEYCLOAK_TOKEN_URL = ""
  69. CORE_API_URL = os.getenv("CORE_API_URL", "http://localhost:1902")
  70. MQTT_HOST = os.getenv("MQTT_HOST", "192.168.1.101")
  71. MQTT_PORT = int(os.getenv("MQTT_PORT", "1883"))
  72. MQTT_TOPIC = os.getenv("MQTT_TOPIC", "#")
  73. MQTT_VERSION = os.getenv("MQTT_VERSION", "mqttv311")
  74. MQTT_STATUS_INTERVAL = int(os.getenv("MQTT_STATUS_INTERVAL", "30"))
  75. MQTT_STALE_AFTER = int(os.getenv("MQTT_STALE_AFTER", "30"))
  76. BLE_AI_INFER_CSV = os.getenv(
  77. "BLE_AI_INFER_CSV",
  78. "/data/service/ble-ai-localizer/data/infer/infer.csv",
  79. )
  80. BLE_AI_META_DIR = os.getenv(
  81. "BLE_AI_META_DIR",
  82. "/data/service/ble-ai-localizer/data/maps/",
  83. )
  84. BLE_AI_MAPS_DIR = os.getenv(
  85. "BLE_AI_MAPS_DIR",
  86. "/data/service/ble-ai-localizer/data/maps",
  87. )