Initial commit: network MCP service
This commit is contained in:
55
collectors/common/es_auth.py
Normal file
55
collectors/common/es_auth.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import base64
|
||||
from typing import Optional, Tuple
|
||||
|
||||
|
||||
def _clean(value: Optional[str]) -> str:
|
||||
"""
|
||||
Normalize values coming from env files where quotes might be preserved.
|
||||
"""
|
||||
if not value:
|
||||
return ""
|
||||
return value.strip().strip('"').strip()
|
||||
|
||||
|
||||
def resolve_api_key(api_id: Optional[str], api_key: Optional[str]) -> Tuple[Optional[str], Optional[str]]:
|
||||
"""
|
||||
Accept various API key formats and return (api_id, api_key).
|
||||
Supported formats:
|
||||
- Explicit ES_API_ID and ES_API_KEY values.
|
||||
- ES_API_KEY that already contains \"id:key\".
|
||||
- ES_API_KEY that is the base64 encoding of \"id:key\".
|
||||
"""
|
||||
cleaned_id = _clean(api_id)
|
||||
cleaned_key = _clean(api_key)
|
||||
|
||||
if cleaned_id and cleaned_key:
|
||||
return cleaned_id, cleaned_key
|
||||
|
||||
if not cleaned_key:
|
||||
return None, None
|
||||
|
||||
# Raw "id:key" format
|
||||
if ":" in cleaned_key:
|
||||
potential_id, potential_key = cleaned_key.split(":", 1)
|
||||
if potential_id and potential_key:
|
||||
return potential_id, potential_key
|
||||
|
||||
# Base64 encoded "id:key" format
|
||||
try:
|
||||
decoded = base64.b64decode(cleaned_key, validate=True).decode()
|
||||
if ":" in decoded:
|
||||
potential_id, potential_key = decoded.split(":", 1)
|
||||
if potential_id and potential_key:
|
||||
return potential_id, potential_key
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return None, None
|
||||
|
||||
|
||||
def build_api_key_header(api_id: str, api_key: str) -> str:
|
||||
"""
|
||||
Return the value for the Authorization header using ApiKey auth.
|
||||
"""
|
||||
token = base64.b64encode(f"{api_id}:{api_key}".encode()).decode()
|
||||
return f"ApiKey {token}"
|
||||
Reference in New Issue
Block a user