| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- # IRIS Source Code
- # Copyright (C) 2021 - Airbus CyberSecurity (SAS)
- # ir@cyberactionlab.net
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU Lesser General Public
- # License as published by the Free Software Foundation; either
- # version 3 of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # Lesser General Public License for more details.
- #
- # You should have received a copy of the GNU Lesser General Public License
- # along with this program; if not, write to the Free Software Foundation,
- # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- from flask import Blueprint, request
- from werkzeug import Response
- from app.datamgmt.case.case_assets_db import get_compromise_status_dict
- from app.datamgmt.case.case_assets_db import get_case_outcome_status_dict
- from app.datamgmt.manage.manage_case_objs import search_analysis_status_by_name
- from app.models.models import AnalysisStatus
- from app.schema.marshables import AnalysisStatusSchema
- from app.blueprints.access_controls import ac_api_requires
- from app.blueprints.responses import response_error
- from app.blueprints.responses import response_success
- manage_analysis_status_rest_blueprint = Blueprint('manage_analysis_status_rest', __name__)
- @manage_analysis_status_rest_blueprint.route('/manage/analysis-status/list', methods=['GET'])
- @ac_api_requires()
- def list_anastatus():
- lstatus = AnalysisStatus.query.with_entities(
- AnalysisStatus.id,
- AnalysisStatus.name
- ).all()
- data = [row._asdict() for row in lstatus]
- return response_success("", data=data)
- @manage_analysis_status_rest_blueprint.route('/manage/compromise-status/list', methods=['GET'])
- @ac_api_requires()
- def list_compr_status():
- compro_status = get_compromise_status_dict()
- return response_success("", data=compro_status)
- @manage_analysis_status_rest_blueprint.route('/manage/outcome-status/list', methods=['GET'])
- @ac_api_requires()
- def list_outcome_status() -> Response:
- """Returns a list of outcome status
- Args:
- caseid (int): Case ID
- Returns:
- Response: Flask response object
- """
- outcome_status = get_case_outcome_status_dict()
- return response_success("", data=outcome_status)
- @manage_analysis_status_rest_blueprint.route('/manage/analysis-status/<int:cur_id>', methods=['GET'])
- @ac_api_requires()
- def view_anastatus(cur_id):
- lstatus = AnalysisStatus.query.with_entities(
- AnalysisStatus.id,
- AnalysisStatus.name
- ).filter(
- AnalysisStatus.id == cur_id
- ).first()
- if not lstatus:
- return response_error(f"Analysis status ID {cur_id} not found")
- return response_success("", data=lstatus._asdict())
- @manage_analysis_status_rest_blueprint.route('/manage/analysis-status/search', methods=['POST'])
- @ac_api_requires()
- def search_analysis_status():
- if not request.is_json:
- return response_error("Invalid request")
- analysis_status = request.json.get('analysis_status')
- if analysis_status is None:
- return response_error("Invalid analysis status. Got None")
- exact_match = request.json.get('exact_match', False)
- # Search for analysis status with a name that contains the specified search term
- analysis_status = search_analysis_status_by_name(analysis_status, exact_match=exact_match)
- if not analysis_status:
- return response_error("No analysis status found")
- # Serialize the analysis status and return them in a JSON response
- schema = AnalysisStatusSchema(many=True)
- return response_success("", data=schema.dump(analysis_status))
- # TODO : Add management of analysis status
|