hcornet 506716e703
Some checks failed
Deployment Verification / deploy-and-test (push) Failing after 29s
first sync
2025-03-04 07:59:21 +01:00

103 lines
3.8 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.
# IMPORTS ------------------------------------------------
import os
import urllib.parse
from celery.signals import task_prerun
from flask_login import current_user
from app import app
from app import db
from app.datamgmt.case.case_db import get_case
from app.iris_engine.module_handler.module_handler import pipeline_dispatcher
from app.iris_engine.utils.common import build_upload_path
from app.iris_engine.utils.tracker import track_activity
from iris_interface import IrisInterfaceStatus as IStatus
from iris_interface.IrisModuleInterface import IrisPipelineTypes
app.config['timezone'] = 'Europe/Paris'
# CONTENT ------------------------------------------------
@task_prerun.connect
def on_task_init(*args, **kwargs):
db.engine.dispose()
def task_case_update(module, pipeline, pipeline_args, caseid):
"""
Update the current case of the current user with fresh data.
The files should have already been uploaded.
:return: Tuple (success, errors)
"""
errors = []
case = get_case(caseid=caseid)
if case:
# We have a case so we can update the current case
# Build the upload path where the files should be
fpath = build_upload_path(case_customer=case.client.name,
case_name=urllib.parse.unquote(case.name),
module=module)
# Check the path is valid and exists
if fpath:
if os.path.isdir(fpath):
# Build task args
task_args = {
"pipeline_args": pipeline_args,
"db_name": '',
"user": current_user.name,
"user_id": current_user.id,
"case_name": case.name,
"case_id": case.case_id,
"path": fpath,
"is_update": True
}
track_activity("started a new analysis import with pipeline {}".format(pipeline))
pipeline_dispatcher.delay(module_name=module,
hook_name=IrisPipelineTypes.pipeline_type_update,
pipeline_type=IrisPipelineTypes.pipeline_type_update,
pipeline_data=task_args,
init_user=current_user.name,
caseid=caseid)
return IStatus.I2Success('Pipeline task queued')
return IStatus.I2FileNotFound("Built path was not found ")
return IStatus.I2UnexpectedResult("Unable to build path")
else:
# The user do not have any context so we cannot update
# Return an error
errors.append('Current user does not have a valid case in context')
return IStatus.I2UnexpectedResult("Invalid context")
def chunks(lst, n):
"""Yield successive n-sized chunks from lst."""
for i in range(0, len(lst), n):
yield lst[i:i + n]