From b1b667f4e06bdfa11824634a7b68c71dbeea35df Mon Sep 17 00:00:00 2001 From: Thomas Hassenstein <2021544@stud.hs-mannheim.de> Date: Tue, 13 Jun 2023 20:55:36 +0200 Subject: [PATCH] =?UTF-8?q?Dateien=20hochladen=20nach=20=E2=80=9EREST?= =?UTF-8?q?=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit update wrong paths endpoint --- REST/app.py | 78 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 31 deletions(-) diff --git a/REST/app.py b/REST/app.py index 0e42a29..2978dd2 100644 --- a/REST/app.py +++ b/REST/app.py @@ -1,14 +1,16 @@ import subprocess import json import time -from flask import Flask, request, jsonify, session +from flask import Flask, request, jsonify from I2C_Function import analyze_data, read_data from flask_cors import CORS +from threading import Lock app = Flask(__name__) CORS(app) initialized = False +lock = Lock() # Sperre (Lock) für die analyze_data-Methode def create_response(status_code, description): return jsonify({ @@ -20,49 +22,57 @@ def create_response(status_code, description): def initialize_generator(): global initialized - result = analyze_data(int(1), int(1), startup=True) + if initialized: + return create_response(200, 'System is already initialised, random numbers can be requested') + + with lock: # Sperre (Lock) verwenden, um sicherzustellen, dass nur ein Thread die Methode ausführt + result = analyze_data(int(1), int(1), startup=True) - if result is True: - initialized = True - return create_response(200, 'Successful operation; random number generator is ready and random numbers can be requested') - if result == 400: - return create_response(543, 'Tests failed, try again') - if result is False: - return create_response(500, 'Unable to generate random numbers. Restart/Reset System') - else: - return create_response(555, 'Unable to initialize the random number generator within a timeout of 60 seconds') + if result is True: + initialized = True + return create_response(200, 'Successful operation; random number generator is ready and random numbers can be requested') + if result == 400: + return create_response(543, 'Tests failed, try again') + if result is False: + return create_response(500, 'Unable to generate random numbers. Restart/Reset System') + else: + return create_response(555, 'Unable to initialize the random number generator within a timeout of 60 seconds') @app.route('/trng/randomNum/getRandom', methods=['GET']) def get_random_numbers(): global initialized - quantity = request.args.get('quantity') - bits = request.args.get('numBits') - - if not quantity.isdigit() or not bits.isdigit(): + quantity = request.args.get('quantity', default=1) + bits = request.args.get('numBits', default=1) + + try: + quantity = int(quantity) + bits = int(bits) + except ValueError: return create_response(400, 'Invalid input. Quantity and bits must be numeric') - if int(quantity) <= 0 or int(bits) <= 0: + if quantity <= 0 or bits <= 0: return create_response(400, 'Invalid input. Quantity and bits must be positive integers') if not initialized: return create_response(432, 'System not ready; try init') - - random_numbers = analyze_data(int(quantity), int(bits), startup=False) + + with lock: # Sperre (Lock) verwenden, um sicherzustellen, dass nur ein Thread die Methode ausführt + random_numbers = analyze_data(quantity, bits, startup=False) - if random_numbers == 400: - return create_response(500, 'Tests failed, try again') - if random_numbers is False: - return create_response(500, 'Unable to generate random numbers. Restart/Reset System') - if random_numbers: - data = { - 'status': 200, - 'description': 'Successful operation; HEX-encoded bit arrays (with leading zeros if required)', - 'randomNumbers': random_numbers - } - return jsonify(data) - else: - return create_response(500, 'Unable to generate random numbers.') + if random_numbers == 400: + return create_response(543, 'Tests failed, try again') + if random_numbers is False: + return create_response(500, 'Unable to generate random numbers. Restart/Reset System') + if random_numbers: + data = { + 'status': 200, + 'description': 'Successful operation; HEX-encoded bit arrays (with leading zeros if required)', + 'randomNumbers': random_numbers + } + return jsonify(data) + else: + return create_response(500, 'Unable to generate random numbers.') @app.route('/trng/randomNum/shutdown', methods=['GET']) def shutdown_generator(): @@ -71,6 +81,12 @@ def shutdown_generator(): initialized = False return create_response(200, "Successful operation; random number generator has been set to 'standby mode'") + +# Fehlerbehandlungsroutine für nicht übereinstimmende Routen +@app.route('/', defaults={'path': ''}) +@app.route('/') +def handle_invalid_routes(path): + return create_response(404, 'Route not found') if __name__ == '__main__':