fix(backend): config values (#12944)

This commit is contained in:
sp.wack
2026-02-20 17:53:35 +04:00
committed by GitHub
parent 32ab2a24c6
commit 3bc2ef954e
2 changed files with 566 additions and 6 deletions

View File

@@ -19,12 +19,104 @@ def _get_recaptcha_site_key() -> str | None:
return key if key else None
# OSS default PostHog key - used when no environment variable is configured
_OSS_POSTHOG_KEY = 'phc_3ESMmY9SgqEAGBB6sMGK5ayYHkeUuknH2vP6FmWH9RA'
def _get_posthog_client_key() -> str:
"""Get PostHog client key from environment variable.
Reads POSTHOG_CLIENT_KEY from environment. If not set or empty,
returns the OSS default key for backwards compatibility.
"""
key = os.getenv('POSTHOG_CLIENT_KEY', '').strip()
return key if key else _OSS_POSTHOG_KEY
def _get_auth_url() -> str | None:
"""Get authentication service URL from environment variable.
Reads AUTH_URL from environment. If not set or empty, returns None.
"""
url = os.getenv('AUTH_URL', '').strip()
return url if url else None
def _get_maintenance_start_time() -> datetime | None:
"""Get maintenance start time from environment variable.
Reads MAINTENANCE_START_TIME from environment. If set to a valid ISO 8601
timestamp, returns the parsed datetime. If empty, unset, or invalid,
returns None (graceful fallback).
"""
value = os.getenv('MAINTENANCE_START_TIME', '').strip()
if not value:
return None
try:
return datetime.fromisoformat(value)
except ValueError:
return None
def _get_providers_configured() -> list[ProviderType]:
"""Get configured OAuth providers from environment variables.
Checks for presence of OAuth client ID env vars and returns a list of
configured providers. Mirrors legacy logic from SaaSServerConfig.
"""
providers: list[ProviderType] = []
if os.getenv('GITHUB_APP_CLIENT_ID', '').strip():
providers.append(ProviderType.GITHUB)
if os.getenv('GITLAB_APP_CLIENT_ID', '').strip():
providers.append(ProviderType.GITLAB)
if os.getenv('BITBUCKET_APP_CLIENT_ID', '').strip():
providers.append(ProviderType.BITBUCKET)
if os.getenv('ENABLE_ENTERPRISE_SSO', '').strip():
providers.append(ProviderType.ENTERPRISE_SSO)
return providers
def _get_github_app_slug() -> str | None:
"""Get GitHub app slug from environment variable.
Reads GITHUB_APP_SLUG from environment. If set, returns the value.
If empty or unset, returns None.
"""
slug = os.getenv('GITHUB_APP_SLUG', '').strip()
return slug if slug else None
def _get_feature_flags() -> WebClientFeatureFlags:
"""Get feature flags from environment variables.
Reads ENABLE_BILLING, HIDE_LLM_SETTINGS, ENABLE_JIRA, ENABLE_JIRA_DC,
and ENABLE_LINEAR from environment. Each flag is True only if the
corresponding env var is exactly 'true', otherwise False.
"""
return WebClientFeatureFlags(
enable_billing=os.getenv('ENABLE_BILLING', 'false') == 'true',
hide_llm_settings=os.getenv('HIDE_LLM_SETTINGS', 'false') == 'true',
enable_jira=os.getenv('ENABLE_JIRA', 'false') == 'true',
enable_jira_dc=os.getenv('ENABLE_JIRA_DC', 'false') == 'true',
enable_linear=os.getenv('ENABLE_LINEAR', 'false') == 'true',
)
class DefaultWebClientConfigInjector(WebClientConfigInjector):
posthog_client_key: str | None = 'phc_3ESMmY9SgqEAGBB6sMGK5ayYHkeUuknH2vP6FmWH9RA'
feature_flags: WebClientFeatureFlags = Field(default_factory=WebClientFeatureFlags)
providers_configured: list[ProviderType] = Field(default_factory=list)
maintenance_start_time: datetime | None = None
auth_url: str | None = None
posthog_client_key: str = Field(default_factory=_get_posthog_client_key)
feature_flags: WebClientFeatureFlags = Field(default_factory=_get_feature_flags)
providers_configured: list[ProviderType] = Field(
default_factory=_get_providers_configured
)
maintenance_start_time: datetime | None = Field(
default_factory=_get_maintenance_start_time
)
auth_url: str | None = Field(default_factory=_get_auth_url)
recaptcha_site_key: str | None = Field(default_factory=_get_recaptcha_site_key)
faulty_models: list[str] = Field(default_factory=list)
error_message: str | None = None
@@ -36,7 +128,7 @@ class DefaultWebClientConfigInjector(WebClientConfigInjector):
'new and should be displayed. (Default to start of 2026)'
),
)
github_app_slug: str | None = None
github_app_slug: str | None = Field(default_factory=_get_github_app_slug)
async def get_web_client_config(self) -> WebClientConfig:
from openhands.app_server.config import get_global_config