38 lines
1.0 KiB
Python
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",
|
|
)
|