This commit is contained in:
2025-09-26 10:03:53 -04:00
commit 4d638bce99
7 changed files with 109 additions and 0 deletions

10
.gitignore vendored Normal file
View File

@@ -0,0 +1,10 @@
# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info
# Virtual environments
.venv

1
.python-version Normal file
View File

@@ -0,0 +1 @@
3.13

13
Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM python:3.13-slim
WORKDIR /app
COPY pyproject.toml .
COPY main.py .
COPY lookup.txt .
RUN pip install flask httpx
EXPOSE 5000
CMD ["python", "-m", "flask", "--app", "main", "run", "--host=0.0.0.0"]

0
README.md Normal file
View File

12
docker-compose.yml Normal file
View File

@@ -0,0 +1,12 @@
version: '3.8'
services:
webhookproxy:
build: .
ports:
- "5000:5000"
environment:
- FLASK_ENV=production
volumes:
- ./lookup.txt:/app/lookup.txt:ro
restart: unless-stopped

66
main.py Normal file
View File

@@ -0,0 +1,66 @@
from flask import Flask
app = Flask(__name__)
def populate_webhook_lookup():
lookup = {}
with open("./lookup.txt") as file:
for line in file:
split_line = line.split(",")
lookup[split_line[0]]: split_line[1]
return lookup
UUID_TO_WEBHOOK_LOOKUP = populate_webhook_lookup()
def convert_ghost_to_discord(ghost_payload):
post = ghost_payload.get("post").get("current")
return {
"embeds": [{
"title": post.get("title"),
"description": post.get("excerpt")[:200] + "...",
"url": f"https://torrtle.co/{post.get('slug')",
"color": "0x00ff00",
"thumbnail": {
"url": post.get("feature_image")
},
"fields": [
{
"name": "Author",
"value": post.get("primary_author").get("name"),
"inline": True
},
{
"name": "Published",
"value": post.get("published_at"),
"inline": True,
}
],
}]
}
@app.route("/")
def home():
return "This is a silly web util that converts the Ghost webhook payloads to Discord payloads"
@app.route("/:uuid", methods=["POST"])
def convert(uuid):
webhook = UUID_TO_WEBHOOK_LOOKUP.get(uuid)
ghost_payload = request.get_json()
discord_payload = convert_ghost_to_discord(ghost_payload)
httpx.post(webhook, data=discord_payload)
return 200
def main():
print("Hello from webhookproxy!")
if __name__ == "__main__":
main()

7
pyproject.toml Normal file
View File

@@ -0,0 +1,7 @@
[project]
name = "webhookproxy"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = []