core/services/webhook.py

45 lines
1.8 KiB
Python
Raw Normal View History

2023-12-16 15:24:30 +00:00
import os
import re
from starlette.endpoints import HTTPEndpoint
from starlette.requests import Request
from starlette.responses import JSONResponse
from orm.author import Author
from resolvers.author import create_author
from services.db import local_session
2024-02-22 18:18:20 +00:00
from services.logger import root_logger as logger
2023-12-16 15:24:30 +00:00
class WebhookEndpoint(HTTPEndpoint):
async def post(self, request: Request) -> JSONResponse:
try:
data = await request.json()
if data:
2024-02-21 16:14:58 +00:00
auth = request.headers.get('Authorization')
2023-12-16 15:24:30 +00:00
if auth:
2024-02-21 16:14:58 +00:00
if auth == os.environ.get('WEBHOOK_SECRET'):
2024-02-22 18:18:20 +00:00
logger.debug(data)
user = data.get('user')
if isinstance(user, dict):
user_id: str = user.get('id')
name: str = user.get('given_name', user.get('slug'))
slug: str = user.get('email', '').split('@')[0]
slug: str = re.sub('[^0-9a-z]+', '-', slug.lower())
with local_session() as session:
author = (
session.query(Author)
.filter(Author.slug == slug)
.first()
)
if author:
slug = slug + '-' + user_id.split('-').pop()
2024-02-25 21:06:37 +00:00
create_author(user_id, slug, name)
2023-12-16 15:24:30 +00:00
2024-02-21 16:14:58 +00:00
return JSONResponse({'status': 'success'})
2023-12-16 15:24:30 +00:00
except Exception as e:
import traceback
traceback.print_exc()
2024-02-21 16:14:58 +00:00
return JSONResponse({'status': 'error', 'message': str(e)}, status_code=500)