mirror of
https://github.com/open-webui/open-webui
synced 2024-11-16 13:40:55 +00:00
feat: webhook backend
This commit is contained in:
parent
16fe0ee167
commit
2c6e2d5e8a
@ -19,6 +19,7 @@ from config import (
|
|||||||
DEFAULT_USER_ROLE,
|
DEFAULT_USER_ROLE,
|
||||||
ENABLE_SIGNUP,
|
ENABLE_SIGNUP,
|
||||||
USER_PERMISSIONS,
|
USER_PERMISSIONS,
|
||||||
|
WEBHOOK_URL,
|
||||||
)
|
)
|
||||||
|
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
@ -32,6 +33,7 @@ app.state.DEFAULT_MODELS = DEFAULT_MODELS
|
|||||||
app.state.DEFAULT_PROMPT_SUGGESTIONS = DEFAULT_PROMPT_SUGGESTIONS
|
app.state.DEFAULT_PROMPT_SUGGESTIONS = DEFAULT_PROMPT_SUGGESTIONS
|
||||||
app.state.DEFAULT_USER_ROLE = DEFAULT_USER_ROLE
|
app.state.DEFAULT_USER_ROLE = DEFAULT_USER_ROLE
|
||||||
app.state.USER_PERMISSIONS = USER_PERMISSIONS
|
app.state.USER_PERMISSIONS = USER_PERMISSIONS
|
||||||
|
app.state.WEBHOOK_URL = WEBHOOK_URL
|
||||||
|
|
||||||
|
|
||||||
app.add_middleware(
|
app.add_middleware(
|
||||||
|
@ -27,7 +27,8 @@ from utils.utils import (
|
|||||||
create_token,
|
create_token,
|
||||||
)
|
)
|
||||||
from utils.misc import parse_duration, validate_email_format
|
from utils.misc import parse_duration, validate_email_format
|
||||||
from constants import ERROR_MESSAGES
|
from utils.webhook import post_webhook
|
||||||
|
from constants import ERROR_MESSAGES, WEBHOOK_MESSAGES
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
@ -155,6 +156,16 @@ async def signup(request: Request, form_data: SignupForm):
|
|||||||
)
|
)
|
||||||
# response.set_cookie(key='token', value=token, httponly=True)
|
# response.set_cookie(key='token', value=token, httponly=True)
|
||||||
|
|
||||||
|
if request.app.state.WEBHOOK_URL:
|
||||||
|
post_webhook(
|
||||||
|
request.app.state.WEBHOOK_URL,
|
||||||
|
{
|
||||||
|
"action": "signup",
|
||||||
|
"message": WEBHOOK_MESSAGES.USER_SIGNUP(user.name),
|
||||||
|
"user": user.model_dump_json(exclude_none=True),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"token": token,
|
"token": token,
|
||||||
"token_type": "Bearer",
|
"token_type": "Bearer",
|
||||||
|
@ -302,6 +302,7 @@ MODEL_FILTER_ENABLED = os.environ.get("MODEL_FILTER_ENABLED", False)
|
|||||||
MODEL_FILTER_LIST = os.environ.get("MODEL_FILTER_LIST", "")
|
MODEL_FILTER_LIST = os.environ.get("MODEL_FILTER_LIST", "")
|
||||||
MODEL_FILTER_LIST = [model.strip() for model in MODEL_FILTER_LIST.split(";")]
|
MODEL_FILTER_LIST = [model.strip() for model in MODEL_FILTER_LIST.split(";")]
|
||||||
|
|
||||||
|
WEBHOOK_URL = os.environ.get("WEBHOOK_URL", "")
|
||||||
|
|
||||||
####################################
|
####################################
|
||||||
# WEBUI_VERSION
|
# WEBUI_VERSION
|
||||||
|
@ -5,6 +5,13 @@ class MESSAGES(str, Enum):
|
|||||||
DEFAULT = lambda msg="": f"{msg if msg else ''}"
|
DEFAULT = lambda msg="": f"{msg if msg else ''}"
|
||||||
|
|
||||||
|
|
||||||
|
class WEBHOOK_MESSAGES(str, Enum):
|
||||||
|
DEFAULT = lambda msg="": f"{msg if msg else ''}"
|
||||||
|
USER_SIGNUP = lambda username="": (
|
||||||
|
f"New user signed up: {username}" if username else "New user signed up"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ERROR_MESSAGES(str, Enum):
|
class ERROR_MESSAGES(str, Enum):
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return super().__str__()
|
return super().__str__()
|
||||||
|
@ -38,6 +38,7 @@ from config import (
|
|||||||
FRONTEND_BUILD_DIR,
|
FRONTEND_BUILD_DIR,
|
||||||
MODEL_FILTER_ENABLED,
|
MODEL_FILTER_ENABLED,
|
||||||
MODEL_FILTER_LIST,
|
MODEL_FILTER_LIST,
|
||||||
|
WEBHOOK_URL,
|
||||||
)
|
)
|
||||||
from constants import ERROR_MESSAGES
|
from constants import ERROR_MESSAGES
|
||||||
|
|
||||||
@ -58,6 +59,9 @@ app = FastAPI(docs_url="/docs" if ENV == "dev" else None, redoc_url=None)
|
|||||||
app.state.MODEL_FILTER_ENABLED = MODEL_FILTER_ENABLED
|
app.state.MODEL_FILTER_ENABLED = MODEL_FILTER_ENABLED
|
||||||
app.state.MODEL_FILTER_LIST = MODEL_FILTER_LIST
|
app.state.MODEL_FILTER_LIST = MODEL_FILTER_LIST
|
||||||
|
|
||||||
|
app.state.WEBHOOK_URL = WEBHOOK_URL
|
||||||
|
|
||||||
|
|
||||||
origins = ["*"]
|
origins = ["*"]
|
||||||
|
|
||||||
|
|
||||||
@ -178,7 +182,7 @@ class ModelFilterConfigForm(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
@app.post("/api/config/model/filter")
|
@app.post("/api/config/model/filter")
|
||||||
async def get_model_filter_config(
|
async def update_model_filter_config(
|
||||||
form_data: ModelFilterConfigForm, user=Depends(get_admin_user)
|
form_data: ModelFilterConfigForm, user=Depends(get_admin_user)
|
||||||
):
|
):
|
||||||
|
|
||||||
@ -197,6 +201,28 @@ async def get_model_filter_config(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/api/webhook")
|
||||||
|
async def get_webhook_url(user=Depends(get_admin_user)):
|
||||||
|
return {
|
||||||
|
"url": app.state.WEBHOOK_URL,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class UrlForm(BaseModel):
|
||||||
|
url: str
|
||||||
|
|
||||||
|
|
||||||
|
@app.post("/api/webhook")
|
||||||
|
async def update_webhook_url(form_data: UrlForm, user=Depends(get_admin_user)):
|
||||||
|
app.state.WEBHOOK_URL = form_data.url
|
||||||
|
|
||||||
|
webui_app.state.WEBHOOK_URL = app.state.WEBHOOK_URL
|
||||||
|
|
||||||
|
return {
|
||||||
|
"url": app.state.WEBHOOK_URL,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@app.get("/api/version")
|
@app.get("/api/version")
|
||||||
async def get_app_config():
|
async def get_app_config():
|
||||||
|
|
||||||
|
11
backend/utils/webhook.py
Normal file
11
backend/utils/webhook.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
def post_webhook(url: str, json: dict) -> bool:
|
||||||
|
try:
|
||||||
|
r = requests.post(url, json=json)
|
||||||
|
r.raise_for_status()
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
return False
|
Loading…
Reference in New Issue
Block a user