From 6e0035edfdcef76fd9190f2ceb9df91d3b79068f Mon Sep 17 00:00:00 2001 From: Avishkar Bhoopchand Date: Sun, 12 Jul 2026 13:09:25 +0100 Subject: [PATCH] Allow CORS for all valid organisation --- api/app/__init__.py | 31 ++++++++++++++++++------ api/app/invoice/invoice.pdf | Bin 0 -> 15644 bytes api/requirements.txt | 1 - webapp/src/pages/eventHome/EventHome.js | 2 -- webapp/src/pages/review/Review.css | 1 + 5 files changed, 25 insertions(+), 10 deletions(-) create mode 100644 api/app/invoice/invoice.pdf diff --git a/api/app/__init__.py b/api/app/__init__.py index 9fe3527e4..af986da30 100644 --- a/api/app/__init__.py +++ b/api/app/__init__.py @@ -1,5 +1,4 @@ from flask import Flask, g, url_for, redirect, render_template, request, flash -from flask_cors import CORS import flask_restful as restful from flask_sqlalchemy import SQLAlchemy from flask_bcrypt import Bcrypt @@ -15,12 +14,6 @@ app = Flask(__name__) app.config.from_object('config') -_allowed_origins = [ - app.config.get('BOABAB_HOST', 'http://localhost:8080').rstrip('/'), - 'http://localhost:3000', - 'http://localhost:8080', -] -CORS(app, resources={r"/api/*": {"origins": _allowed_origins}}, supports_credentials=True) print((app.config['SQLALCHEMY_DATABASE_URI'])) rest_api = restful.Api(app) db = SQLAlchemy(app) @@ -92,6 +85,30 @@ def populate_organisation(): domain = get_domain() g.organisation = OrganisationResolver.resolve_from_domain(domain) +CORS_ALLOWED_METHODS = 'GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS' + +@app.after_request +def set_cors_headers(response): + # populate_organisation() above already rejects any /api/* request whose + # Origin/Referer domain doesn't match a known Organisation, so reflecting + # the Origin back here is only ever done for domains we've already + # validated against the Organisation table - no separate allow-list to + # keep in sync with webapp/dispatch.yaml. + if not request.path.startswith('/api/') or getattr(g, 'organisation', None) is None: + return response + origin = request.environ.get('HTTP_ORIGIN', '') + if not origin: + return response + response.headers['Access-Control-Allow-Origin'] = origin + response.headers['Access-Control-Allow-Credentials'] = 'true' + response.headers.add('Vary', 'Origin') + if request.method == 'OPTIONS': + response.headers['Access-Control-Allow-Methods'] = CORS_ALLOWED_METHODS + requested_headers = request.environ.get('HTTP_ACCESS_CONTROL_REQUEST_HEADERS') + if requested_headers: + response.headers['Access-Control-Allow-Headers'] = requested_headers + return response + ## Flask Admin Config # set optional bootswatch theme diff --git a/api/app/invoice/invoice.pdf b/api/app/invoice/invoice.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d6a23386505c27efceea43de9afe474c598081de GIT binary patch literal 15644 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 )} /> - ); diff --git a/webapp/src/pages/review/Review.css b/webapp/src/pages/review/Review.css index 7c766e3d5..3a8670955 100644 --- a/webapp/src/pages/review/Review.css +++ b/webapp/src/pages/review/Review.css @@ -57,6 +57,7 @@ } .question.review { + position: relative; padding-left: 2em; }