mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-02 19:55:18 +02:00
feat(gateway): add Slack gateway configuration
This commit is contained in:
parent
b0b0f3517b
commit
5b71685dad
3 changed files with 38 additions and 1 deletions
|
|
@ -141,10 +141,13 @@ NOTION_CLIENT_ID=your_notion_client_id_here
|
||||||
NOTION_CLIENT_SECRET=your_notion_client_secret_here
|
NOTION_CLIENT_SECRET=your_notion_client_secret_here
|
||||||
NOTION_REDIRECT_URI=http://localhost:8000/api/v1/auth/notion/connector/callback
|
NOTION_REDIRECT_URI=http://localhost:8000/api/v1/auth/notion/connector/callback
|
||||||
|
|
||||||
# Slack OAuth Configuration
|
# Slack OAuth / Gateway Configuration
|
||||||
|
# The Slack connector and Slack gateway can use the same Slack app client ID/secret.
|
||||||
SLACK_CLIENT_ID=your_slack_client_id_here
|
SLACK_CLIENT_ID=your_slack_client_id_here
|
||||||
SLACK_CLIENT_SECRET=your_slack_client_secret_here
|
SLACK_CLIENT_SECRET=your_slack_client_secret_here
|
||||||
SLACK_REDIRECT_URI=http://localhost:8000/api/v1/auth/slack/connector/callback
|
SLACK_REDIRECT_URI=http://localhost:8000/api/v1/auth/slack/connector/callback
|
||||||
|
GATEWAY_SLACK_SIGNING_SECRET=your_slack_signing_secret_here
|
||||||
|
GATEWAY_SLACK_REDIRECT_URI=http://localhost:8000/api/v1/gateway/slack/callback
|
||||||
|
|
||||||
# Microsoft OAuth (Teams & OneDrive)
|
# Microsoft OAuth (Teams & OneDrive)
|
||||||
MICROSOFT_CLIENT_ID=your_microsoft_client_id_here
|
MICROSOFT_CLIENT_ID=your_microsoft_client_id_here
|
||||||
|
|
|
||||||
|
|
@ -570,6 +570,10 @@ class Config:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"GATEWAY_WHATSAPP_INTAKE_MODE must be one of: cloud, baileys, disabled"
|
"GATEWAY_WHATSAPP_INTAKE_MODE must be one of: cloud, baileys, disabled"
|
||||||
)
|
)
|
||||||
|
GATEWAY_SLACK_CLIENT_ID = os.getenv("SLACK_CLIENT_ID")
|
||||||
|
GATEWAY_SLACK_CLIENT_SECRET = os.getenv("SLACK_CLIENT_SECRET")
|
||||||
|
GATEWAY_SLACK_SIGNING_SECRET = os.getenv("GATEWAY_SLACK_SIGNING_SECRET")
|
||||||
|
GATEWAY_SLACK_REDIRECT_URI = os.getenv("GATEWAY_SLACK_REDIRECT_URI")
|
||||||
|
|
||||||
# Stripe checkout for pay-as-you-go page packs
|
# Stripe checkout for pay-as-you-go page packs
|
||||||
STRIPE_SECRET_KEY = os.getenv("STRIPE_SECRET_KEY")
|
STRIPE_SECRET_KEY = os.getenv("STRIPE_SECRET_KEY")
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
|
|
@ -25,6 +27,19 @@ def account_token(account: ExternalChatAccount) -> str | None:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def slack_account_credentials(account: ExternalChatAccount) -> dict:
|
||||||
|
"""Decrypt Slack gateway credentials stored as encrypted JSON."""
|
||||||
|
if not account.encrypted_credentials:
|
||||||
|
return {}
|
||||||
|
raw = TokenEncryption(config.SECRET_KEY or "").decrypt_token(account.encrypted_credentials)
|
||||||
|
try:
|
||||||
|
data = json.loads(raw)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
# Backward-compatible fallback if a token string was stored directly.
|
||||||
|
return {"bot_token": raw}
|
||||||
|
return data if isinstance(data, dict) else {}
|
||||||
|
|
||||||
|
|
||||||
async def get_or_create_system_telegram_account(
|
async def get_or_create_system_telegram_account(
|
||||||
session: AsyncSession,
|
session: AsyncSession,
|
||||||
) -> ExternalChatAccount:
|
) -> ExternalChatAccount:
|
||||||
|
|
@ -78,3 +93,18 @@ async def get_or_create_system_whatsapp_account(
|
||||||
await session.flush()
|
await session.flush()
|
||||||
return account
|
return account
|
||||||
|
|
||||||
|
|
||||||
|
async def get_slack_account_by_team(
|
||||||
|
session: AsyncSession,
|
||||||
|
*,
|
||||||
|
team_id: str,
|
||||||
|
) -> ExternalChatAccount | None:
|
||||||
|
result = await session.execute(
|
||||||
|
select(ExternalChatAccount).where(
|
||||||
|
ExternalChatAccount.platform == ExternalChatPlatform.SLACK,
|
||||||
|
ExternalChatAccount.is_system_account.is_(True),
|
||||||
|
ExternalChatAccount.cursor_state["team_id"].astext == team_id,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return result.scalars().first()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue