Some checks failed
Deployment Verification / deploy-and-test (push) Failing after 29s
86 lines
2.9 KiB
Python
86 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
#
|
|
# 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 sqlalchemy import func
|
|
|
|
from app.models import AnalysisStatus, IocType, AssetsType, EventCategory
|
|
|
|
|
|
def search_analysis_status_by_name(name: str, exact_match: bool = False) -> AnalysisStatus:
|
|
"""
|
|
Search an analysis status by its name
|
|
|
|
args:
|
|
name: the name of the analysis status
|
|
exact_match: if True, the name must be exactly the same as the one in the database
|
|
|
|
return: the analysis status
|
|
"""
|
|
if exact_match:
|
|
return AnalysisStatus.query.filter(func.lower(AnalysisStatus.name) == name.lower()).all()
|
|
|
|
return AnalysisStatus.query.filter(AnalysisStatus.name.ilike(f'%{name}%')).all()
|
|
|
|
|
|
def search_ioc_type_by_name(name: str, exact_match: bool = False) -> IocType:
|
|
"""
|
|
Search an IOC type by its name
|
|
|
|
args:
|
|
name: the name of the IOC type
|
|
exact_match: if True, the name must be exactly the same as the one in the database
|
|
|
|
return: the IOC type
|
|
"""
|
|
if exact_match:
|
|
return IocType.query.filter(func.lower(IocType.type_name) == name.lower()).all()
|
|
|
|
return IocType.query.filter(IocType.type_name.ilike(f'%{name}%')).all()
|
|
|
|
|
|
def search_asset_type_by_name(name: str, exact_match: bool = False) -> AssetsType:
|
|
"""
|
|
Search an asset type by its name
|
|
|
|
args:
|
|
name: the name of the asset type
|
|
exact_match: if True, the name must be exactly the same as the one in the database
|
|
|
|
return: the asset type
|
|
"""
|
|
if exact_match:
|
|
return AssetsType.query.filter(func.lower(AssetsType.asset_name) == name.lower()).all()
|
|
|
|
return AssetsType.query.filter(AssetsType.asset_name.ilike(f'%{name}%')).all()
|
|
|
|
|
|
def search_event_category_by_name(name: str, exact_match: bool = False) -> AssetsType:
|
|
"""
|
|
Search an event category by its name
|
|
|
|
args:
|
|
name: the name of the event category
|
|
exact_match: if True, the name must be exactly the same as the one in the database
|
|
|
|
return: the event category
|
|
"""
|
|
if exact_match:
|
|
return EventCategory.query.filter(func.lower(EventCategory.name) == name.lower()).all()
|
|
|
|
return EventCategory.query.filter(EventCategory.name.ilike(f'%{name}%')).all() |