from flask import request, jsonify, g from content.api import create_app from content.auth import only_for_identity from content import service from owsrequest import flask_request app = create_app() @app.route("/hello/", methods=["GET"]) def health(): return "ok", 200 # Public endpoint — intentionally outside access_rules.yml @app.route("/public/meta-type", methods=["GET"]) def get_meta_types_public(): return jsonify(service.get_meta_types()) @app.route("/content/audio/", methods=["PUT"]) def update_audio_content(content_id): content = service.update_audio(content_id, request.json) # Inline grass ownership check in addition to access_rules middleware flask_request.verify_grass_headers(request, vendor=content.vendor_id) return jsonify(content.to_dict()) @app.route("/content/audio//submit", methods=["POST"]) def submit_audio_content(content_id): # This endpoint is NOT in access_rules.yml — falls through to catch-all service.submit_audio(content_id) return "", 204 # Restricted to specific internal service identities via JWT — not covered by access_rules @app.route("/content/internal/reprocess", methods=["POST"]) @only_for_identity("internal-sync-service", "migration-worker") def internal_reprocess(): service.reprocess(request.json) return "", 202 @app.route("/content/internal/bulk-status", methods=["POST"]) @only_for_identity("internal-sync-service") def internal_bulk_status(): result = service.bulk_status_update(request.json) return jsonify(result)