initial commit
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
DOMAIN=linumiq.net
|
||||
EDGE_STRIPE_WEBHOOK_URL=http://supabase-edge-functions:9000/stripe-webhook
|
||||
STRIPE_STUB_WEBHOOK_SECRET=__SECRET__
|
||||
@@ -0,0 +1,9 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /app
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
COPY app.py .
|
||||
|
||||
EXPOSE 4242
|
||||
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "4242"]
|
||||
@@ -0,0 +1,45 @@
|
||||
"""stripe-stub: pretends every checkout succeeds and forwards test webhooks."""
|
||||
|
||||
import os
|
||||
import uuid
|
||||
from typing import Any
|
||||
|
||||
import httpx
|
||||
from fastapi import FastAPI, Request
|
||||
|
||||
DOMAIN = os.environ.get("DOMAIN", "linumiq.net")
|
||||
EDGE_URL = os.environ.get(
|
||||
"EDGE_STRIPE_WEBHOOK_URL",
|
||||
"http://supabase-edge-functions:9000/stripe-webhook",
|
||||
)
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
|
||||
@app.post("/v1/checkout/sessions")
|
||||
async def create_session(_request: Request) -> dict[str, str]:
|
||||
session_id = f"stub_{uuid.uuid4().hex}"
|
||||
return {
|
||||
"id": session_id,
|
||||
"url": f"https://app.{DOMAIN}/billing/success?session={session_id}",
|
||||
}
|
||||
|
||||
|
||||
@app.post("/v1/webhooks/test")
|
||||
async def forward_test(request: Request) -> Any:
|
||||
body = await request.body()
|
||||
async with httpx.AsyncClient(timeout=10.0) as client:
|
||||
resp = await client.post(
|
||||
EDGE_URL,
|
||||
content=body,
|
||||
headers={"content-type": request.headers.get("content-type", "application/json")},
|
||||
)
|
||||
try:
|
||||
return resp.json()
|
||||
except Exception:
|
||||
return {"upstream_status": resp.status_code, "body": resp.text}
|
||||
|
||||
|
||||
@app.get("/health")
|
||||
def health() -> dict[str, str]:
|
||||
return {"status": "ok"}
|
||||
@@ -0,0 +1,20 @@
|
||||
services:
|
||||
stripe-stub:
|
||||
build: .
|
||||
image: stripe-stub:1.0.0
|
||||
container_name: stripe-stub
|
||||
restart: unless-stopped
|
||||
env_file: .env
|
||||
networks:
|
||||
- edge
|
||||
healthcheck:
|
||||
test: ["CMD", "python", "-c", "import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:4242/health').status==200 else 1)"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
ports:
|
||||
- "127.0.0.1:4242:4242"
|
||||
|
||||
networks:
|
||||
edge:
|
||||
external: true
|
||||
@@ -0,0 +1,3 @@
|
||||
fastapi==0.115.4
|
||||
uvicorn[standard]==0.32.0
|
||||
httpx==0.27.2
|
||||
Reference in New Issue
Block a user