Files
soleprint/artery/veins/slack/core/auth.py
2025-12-31 08:34:18 -03:00

38 lines
1.0 KiB
Python

"""
Slack credentials authentication for Slack vein.
"""
from dataclasses import dataclass
from fastapi import Header, HTTPException
from .config import settings
@dataclass
class SlackCredentials:
token: str
async def get_slack_credentials(
x_slack_token: str | None = Header(None),
) -> SlackCredentials:
"""
Dependency that extracts Slack token from headers or falls back to config.
- Header provided → per-request token (web demo)
- No header → use .env token (API/standalone)
"""
# Use header if provided
if x_slack_token and x_slack_token.strip():
return SlackCredentials(token=x_slack_token.strip())
# Fall back to config (prefer bot token, then user token)
if settings.slack_bot_token:
return SlackCredentials(token=settings.slack_bot_token)
if settings.slack_user_token:
return SlackCredentials(token=settings.slack_user_token)
raise HTTPException(
status_code=401,
detail="Missing credentials: provide X-Slack-Token header, or configure in .env",
)