Fixes https://github.com/webrecorder/browsertrix/issues/1905 - adds a new top-level `/api/subscriptions` endpoint and SubOps handler on the backend. - enable subscriptions API endpoints available only if `billing_enabled` is set in helm chart - new POST /subscriptions/create, /subscriptions/update, /subscriptions/cancel API endpoints - Subscriptions mongo collection storing timestamped /subscription API events - GET /subscriptions/events API to get subscription events, support for filtering and sorting - Subscription data model - Support for setting and handling readOnlyOnCancel on org - /orgs/<id>/billing-portal to lookup portalUrl using external API - subscription in org getter and list views - mark org as readOnly for subscription status `paused_payment_failed`, clears it on status `active` --------- Co-authored-by: Tessa Walsh <tessa@bitarchivist.net>
40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
A web server to record POST requests and return them on a GET request
|
|
"""
|
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
import json
|
|
|
|
BIND_HOST = "0.0.0.0"
|
|
PORT = 18080
|
|
|
|
post_bodies = []
|
|
|
|
|
|
class EchoServerHTTPRequestHandler(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
self.send_response(200)
|
|
self.end_headers()
|
|
self.wfile.write(json.dumps({"post_bodies": post_bodies}).encode("utf-8"))
|
|
|
|
def do_POST(self):
|
|
content_length = int(self.headers.get("content-length", 0))
|
|
body = self.rfile.read(content_length)
|
|
self.send_response(200)
|
|
if self.path.endswith("/portalUrl"):
|
|
self.send_header("Content-Type", "application/json")
|
|
self.end_headers()
|
|
self.wfile.write(
|
|
json.dumps({"portalUrl": "https://portal.example.com/path/"}).encode(
|
|
"utf-8"
|
|
)
|
|
)
|
|
else:
|
|
self.end_headers()
|
|
|
|
post_bodies.append(json.loads(body.decode("utf-8").replace("'", '"')))
|
|
|
|
|
|
httpd = HTTPServer((BIND_HOST, PORT), EchoServerHTTPRequestHandler)
|
|
httpd.serve_forever()
|