|
@@ -0,0 +1,108 @@
|
|
|
+from flask import request
|
|
|
+from flask_login import login_required
|
|
|
+from flask_restful import Resource, marshal, marshal_with, reqparse
|
|
|
+from werkzeug.exceptions import NotFound
|
|
|
+
|
|
|
+from controllers.console import api
|
|
|
+from controllers.console.wraps import account_initialization_required, setup_required
|
|
|
+from fields.external_application_fields import external_application_fields
|
|
|
+from models.external_application import ExternalApplication
|
|
|
+from services.external_application_service import ExternalApplicationService
|
|
|
+
|
|
|
+
|
|
|
+class ExternalApplicationListApi(Resource):
|
|
|
+
|
|
|
+ @setup_required
|
|
|
+ @login_required
|
|
|
+ @account_initialization_required
|
|
|
+ def get(self):
|
|
|
+ page = request.args.get("page", default=1, type=int)
|
|
|
+ limit = request.args.get("limit", default=20, type=int)
|
|
|
+ search = request.args.get("search", default=None, type=str)
|
|
|
+ type = request.args.get("type", default=None, type=str)
|
|
|
+ url = request.args.get("url", default=None, type=str)
|
|
|
+ method = request.args.get("method", default=None, type=str)
|
|
|
+
|
|
|
+ external_applications, total = ExternalApplicationService.get_external_applications(
|
|
|
+ page, limit, search, type, url, method)
|
|
|
+
|
|
|
+ data = marshal(external_applications, external_application_fields)
|
|
|
+ response = {"data": data, "has_more": len(external_applications) == limit, "limit": limit,
|
|
|
+ "total": total, "page": page}
|
|
|
+ return response, 200
|
|
|
+
|
|
|
+ @setup_required
|
|
|
+ @login_required
|
|
|
+ @account_initialization_required
|
|
|
+ @marshal_with(external_application_fields)
|
|
|
+ def post(self):
|
|
|
+ parser = reqparse.RequestParser()
|
|
|
+ parser.add_argument(
|
|
|
+ "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
|
|
|
+ )
|
|
|
+ parser.add_argument(
|
|
|
+ "type", type=str, location="json", choices=ExternalApplication.EXTERNAL_APPLICATION_TYPE_LIST,
|
|
|
+ nullable=False, help="Invalid external_application type."
|
|
|
+ )
|
|
|
+ parser.add_argument(
|
|
|
+ "url", type=str, location="json", nullable=False, help="Invalid external_application url."
|
|
|
+ )
|
|
|
+ parser.add_argument(
|
|
|
+ "method", type=str, location="json", nullable=False, help="Invalid external_application method."
|
|
|
+ )
|
|
|
+ parser.add_argument(
|
|
|
+ "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
|
|
|
+ )
|
|
|
+ args = parser.parse_args()
|
|
|
+ external_application = ExternalApplicationService.save_external_application(args)
|
|
|
+ return external_application, 200
|
|
|
+
|
|
|
+class ExternalApplicationApi(Resource):
|
|
|
+
|
|
|
+ @setup_required
|
|
|
+ @login_required
|
|
|
+ @account_initialization_required
|
|
|
+ @marshal_with(external_application_fields)
|
|
|
+ def get(self, external_application_id):
|
|
|
+ external_application = ExternalApplicationService.get_external_application(external_application_id)
|
|
|
+ if not external_application:
|
|
|
+ raise NotFound(f"ExternalApplication with id {id} not found.")
|
|
|
+ return external_application, 200
|
|
|
+
|
|
|
+ @setup_required
|
|
|
+ @login_required
|
|
|
+ @account_initialization_required
|
|
|
+ @marshal_with(external_application_fields)
|
|
|
+ def patch(self, external_application_id):
|
|
|
+ external_application_id = str(external_application_id)
|
|
|
+
|
|
|
+ parser = reqparse.RequestParser()
|
|
|
+ parser.add_argument(
|
|
|
+ "name", location="json", nullable=False, required=True, help="Name must be between 1 to 50 characters."
|
|
|
+ )
|
|
|
+ parser.add_argument(
|
|
|
+ "type", type=str, location="json", nullable=False, help="Invalid external_application type."
|
|
|
+ )
|
|
|
+ parser.add_argument(
|
|
|
+ "url", type=str, location="json", nullable=False, help="Invalid external_application url."
|
|
|
+ )
|
|
|
+ parser.add_argument(
|
|
|
+ "method", type=str, location="json", nullable=False, help="Invalid external_application method."
|
|
|
+ )
|
|
|
+ parser.add_argument(
|
|
|
+ "status", type=bool, location="json", nullable=False, help="Invalid external_application status."
|
|
|
+ )
|
|
|
+ args = parser.parse_args()
|
|
|
+ external_application = ExternalApplicationService.update_external_application(args, external_application_id)
|
|
|
+ return external_application, 200
|
|
|
+
|
|
|
+ @setup_required
|
|
|
+ @login_required
|
|
|
+ @account_initialization_required
|
|
|
+ def delete(self, external_application_id):
|
|
|
+ external_application_id = str(external_application_id)
|
|
|
+ ExternalApplicationService.delete_external_application(external_application_id)
|
|
|
+ return 200
|
|
|
+
|
|
|
+api.add_resource(ExternalApplicationListApi, '/external_applications')
|
|
|
+api.add_resource(ExternalApplicationApi, '/external_applications/<external_application_id>')
|