From eb0765d9d83b95fb35743daca285f59989a42795 Mon Sep 17 00:00:00 2001 From: simplypower-bbj Date: Sun, 25 Jun 2023 21:19:41 +0200 Subject: [PATCH] added definitions of flask app --- code/app.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 code/app.py diff --git a/code/app.py b/code/app.py new file mode 100644 index 0000000..4569924 --- /dev/null +++ b/code/app.py @@ -0,0 +1,38 @@ +from flask import Flask, request, jsonify +import os +from dotenv import load_dotenv +from ipaddress import ip_address, ip_network +import logging + +load_dotenv() +app = Flask(__name__) + +@app.before_request +def check_authorized(): + """ + Ensure request from allowed ip. + """ + # prepare variables + assert 'ALLOWED_IP_RANGE' in os.environ + allowed_ip_range = ip_network(os.getenv['ALLOWED_IP_RANGE']) + requesting_ip = ip_address(request.remote_addr) + # check that requesting ip is allowed + if requesting_ip not in allowed_ip_range: + logging.info(f'received request from unauthorised ip: {request.remote_addr}') + return jsonify(status='forbidden'), 403 + logging.info(f'received request from {request.remote_addr}') + +@app.before_request +def check_media_type(): + """ + Ensure correct Content-Type of request + """ + if not request.headers.get('Content-Type').lower().startswith('application/json'): + logging.error(f'received request with wrong content type') + return jsonify(status='unsupported media type'), 415 + +@app.route('/test', methods=['POST']) +def test(): + logging.debug(request.get_json(force=True)) + return jsonify(status='success', sender=request.remote_addr) +