From 16e4231807ff67f5847e30840edc552c45805991 Mon Sep 17 00:00:00 2001 From: Tobias Kurze Date: Wed, 5 Aug 2020 07:51:13 +0200 Subject: [PATCH] now returning bad request when wrong parameters are supplied for room / recorder creation --- backend/api/__init__.py | 14 ++++++++++ backend/api/recorder_api.py | 16 +++++++---- backend/api/room_api.py | 29 +++++++++++++------- backend/app.db_debug | Bin 0 -> 270336 bytes backend/app.db_old | Bin 0 -> 847872 bytes backend/cert.pem | 33 +++++++++++++++++++++++ backend/key.pem | 52 ++++++++++++++++++++++++++++++++++++ 7 files changed, 129 insertions(+), 15 deletions(-) create mode 100644 backend/app.db_debug create mode 100644 backend/app.db_old create mode 100644 backend/cert.pem create mode 100644 backend/key.pem diff --git a/backend/api/__init__.py b/backend/api/__init__.py index 81fce38..5d8fc6f 100644 --- a/backend/api/__init__.py +++ b/backend/api/__init__.py @@ -2,6 +2,7 @@ from flask import Blueprint, abort from flask_restx import Api, Namespace +from werkzeug.exceptions import InternalServerError api_authorizations = { 'apikey': { @@ -73,6 +74,19 @@ from .virtual_command_api import * # from .group_api import * +""" +@api_v1.errorhandler(InternalServerError) +def handle_500(e): + original = getattr(e, "original_exception", None) + + if original is None: + # direct 500 error, such as abort(500) + api_v1.abort(500) + + # wrapped unhandled error + #return render_template("500_unhandled.html", e=original), 500 + api_v1.abort(500) +""" @api_bp.route('/') def catch_all_api(path): diff --git a/backend/api/recorder_api.py b/backend/api/recorder_api.py index a130fe9..2abd75c 100644 --- a/backend/api/recorder_api.py +++ b/backend/api/recorder_api.py @@ -2,19 +2,21 @@ """ This module provides functions related to recorders through the API. """ +import logging from datetime import datetime from pprint import pprint from flask_jwt_extended import jwt_required from flask_restx import fields, Resource, inputs -from backend import db, app +from backend import db, app, LrcException from backend.api import api_recorder from backend.api.models import recorder_model, recorder_model_model, recorder_command_model from backend.models.recorder_model import Recorder, RecorderModel, RecorderCommand from backend.models.room_model import Room import backend.recorder_adapters as r_a +logger = logging.getLogger("lrc.api.recorder") # == @@ -116,10 +118,14 @@ class RecorderList(Resource): else: return "specified recorder model (id: {}) does not exist!".format( api_recorder.payload["recorder_model_id"]), 404 - recorder = Recorder(**api_recorder.payload) - db.session.add(recorder) - db.session.commit() - return recorder + try: + recorder = Recorder(**api_recorder.payload) + db.session.add(recorder) + db.session.commit() + return recorder + except LrcException as e: + logger.error(e) + return api_recorder.abort(400, str(e)) @api_recorder.route('/model/') diff --git a/backend/api/room_api.py b/backend/api/room_api.py index 8b6a40f..e80969e 100644 --- a/backend/api/room_api.py +++ b/backend/api/room_api.py @@ -5,15 +5,20 @@ For example: listing of available auth providers or registration of users. Login through API does not start a new session, but instead returns JWT. """ +import logging + from flask_jwt_extended import jwt_required from flask_restx import fields, Resource from sqlalchemy import exc -from backend import db, app +from backend import db, app, LrcException from backend.api import api_room from backend.models.room_model import Room from backend.models.recorder_model import Recorder + +logger = logging.getLogger("lrc.api.room") + room_model = api_room.model('Room', { 'id': fields.String(required=False, description='The room\'s identifier'), 'created_at': fields.DateTime(required=False, description='Creation date of the room info'), @@ -80,8 +85,8 @@ class RoomResource(Resource): room.recorder = api_room.payload["recorder"] else: num_rows_matched = Room.query.filter_by(id=id).update(api_room.payload) - db.session.commit() - return "ok" + db.session.commit() + return "ok" api_room.abort(404) @@ -112,11 +117,15 @@ class RoomList(Resource): else: return "specified recorder (id: {}) does not exist!".format(api_room.payload["recorder_id"]), 404 del api_room.payload["recorder_id"] - room = Room(**api_room.payload) - db.session.add(room) try: - db.session.commit() - return room - except exc.IntegrityError as e: - db.session.rollback() - return str(e.detail), 400 + room = Room(**api_room.payload) + db.session.add(room) + try: + db.session.commit() + return room + except exc.IntegrityError as e: + db.session.rollback() + return str(e.detail), 400 + except LrcException as e: + logger.error(e) + return api_room.abort(400, str(e)) diff --git a/backend/app.db_debug b/backend/app.db_debug new file mode 100644 index 0000000000000000000000000000000000000000..a4cd81c38a8bd80f1a3ee0bd21d19cc7580c6c9c GIT binary patch literal 270336 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 Pu@!3iV&(9$f; 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 z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ yfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJ_}3H%Sn%5hHs literal 0 HcmV?d00001 diff --git a/backend/cert.pem b/backend/cert.pem new file mode 100644 index 0000000..14e0030 --- /dev/null +++ b/backend/cert.pem @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIJAPBUPeRmjeGxMA0GCSqGSIb3DQEBCwUAMG0xCzAJBgNV +BAYTAkRFMQswCQYDVQQIDAJCVzELMAkGA1UEBwwCS0ExDDAKBgNVBAoMA0tJVDEM +MAoGA1UECwwDQklCMSgwJgYDVQQDDB91YmthcHMxNTQudWJrYS51bmkta2FybHNy +dWhlLmRlMB4XDTE4MDIwOTEyMTAwOFoXDTE5MDIwOTEyMTAwOFowbTELMAkGA1UE +BhMCREUxCzAJBgNVBAgMAkJXMQswCQYDVQQHDAJLQTEMMAoGA1UECgwDS0lUMQww +CgYDVQQLDANCSUIxKDAmBgNVBAMMH3Via2FwczE1NC51YmthLnVuaS1rYXJsc3J1 +aGUuZGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDMIX23STpm+2fC +zX1SoafxhtDwBbHLc7bhhPqiHV2wp92sj8GVr4TRNPtdxMaAtA6PYJJ+rOZggNi5 +8ugkQLa9omRRn5Q3V3IQxvUaD5qo0OXI/qHP2xzhBZBzaFwQWfl77kZNibNTYyY0 +p9Yueg/fMoO7Xeous6DG2cQ57KfNC7vPzTre5f7wMgMgUHf+ziGrYfP8fMIEP2j7 +u2ULaVgrLhgFrVySJBYDfrBoSU5xIy0U26gcKgAfyX441ybRRRtPThmvW9/MIoH+ +zRRQAv3SnnnlLH9LAWKEx7OfxjS5Yts8GwJtOJ+TNwO7bIX7TE1+1mZP4hGQHk88 +JNO/kHM0el2Cbto703F5x0Nk3KCI5oJ9/A+96Dv/8N9F7bQTpbZa89HcEcuwd2iq +AsyGVlhEZCyhwsfaNC+IDEBGEfgejvZPBUkuXFLR6F1KwoM3+L4RB2FsI9EYNXjw +m/8YCx+2Qn9NoLckf6kJxVYENlLzMWNriyynpmqaQ6XYPPQ1I7OjGqh7jueXV/Bx +bvkrUsXW7zbcAuMxVXW1yH8KuXAdMKLTW5gZ3Dj51agErfiRpc06LPPPHaIaCfT8 +cz4pY3IJQ27jv/fbu2SnpGLuZSADPlWuuLvHKVgtrVS6V3Heay7VQJxDXi5Nzfyd +IxGymBfnnjekF4ALJ0f+IZsvDTGojQIDAQABo1MwUTAdBgNVHQ4EFgQU7WjmKeC/ +yEqGXTK8Qr2irECh5L4wHwYDVR0jBBgwFoAU7WjmKeC/yEqGXTK8Qr2irECh5L4w +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAxw/iJGQ0zJaYGobl +EmzZX7De/PqiaE/da4Z7Nw2ck5yb0s4z5V5ov41LRWOO/VsaDvP+ucPOrsQzs9uZ +ZYpNdb9X1j1ZLLvTepjVFigJO2tXS08oCanSyt5PFjkH/sfyOvrRNr2VPBSB9RDn +L8Eru1Cbd2PcZFFO+jm8ioFkRz83uXgTP2t7IZxlc0NUAfT252o+7Y3wf2W4zcXS +CiQQTF+isD7F6JVQnmWVLKkBooDE135E3SzesD8bA7VP2OXcld20TMtV6D/HWQKH +s/5HlB/D+02+z1kU09xCbpYiUeAk7pRMkR2doAXZ2XjKu5z47H22WD+pzdXn01kX +rsxcpRUgv9N+wVScGSK01wcBNNRPXijC/k6hIumlwrYuLN0i3VpJx0sOlnZJ34Gv +sVCiW0RDx4mc/HpwMkvNbdKCrra0Q/aX+yjKcAFwelevu0vfj82WF53BAM41aor4 +yHCDBpFhrfrtOQm3K1jYbUyqTJXbCwNiNs+wstWmDnfkr0qMebXBBGXF81GLrE/4 +s7LgUuyxu3/dX5Hh/yG7p13LszT3xgk1iEVwEWy6w9Op00pzBDMKGR0Yisq4bzdx +ITald/abOFTk+ZwpCOw1HTQO4A6HgwXLAdrVVX45qTP4VsUY8RCcIeEZZtj81SnF +xtchwBqM0lLufxWTUOCBIXMVUuU= +-----END CERTIFICATE----- diff --git a/backend/key.pem b/backend/key.pem new file mode 100644 index 0000000..29f3bcf --- /dev/null +++ b/backend/key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +MyJDELvA01ZFZW9xXMwfxTk7k7fUCA== +-----END PRIVATE KEY-----