2018-05-04 13:53:29 +02:00
#!/usr/bin/env python3
2016-12-09 08:46:37 +01:00
# -*-coding:UTF-8 -*
'''
Flask global variables shared accross modules
'''
2021-04-28 15:24:33 +02:00
##################################
# Import External packages
##################################
2016-12-09 08:46:37 +01:00
import os
2019-06-20 10:56:31 +02:00
import re
2018-06-14 16:51:06 +02:00
import sys
2016-12-09 08:46:37 +01:00
2021-04-28 15:24:33 +02:00
##################################
# Import Project packages
##################################
2019-10-28 13:48:43 +01:00
sys . path . append ( os . path . join ( os . environ [ ' AIL_BIN ' ] , ' lib/ ' ) )
import ConfigLoader
2021-04-28 15:24:33 +02:00
from pubsublogger import publisher
2019-10-28 13:48:43 +01:00
2016-12-09 08:46:37 +01:00
# FLASK #
app = None
# CONFIG #
2019-10-28 13:48:43 +01:00
config_loader = ConfigLoader . ConfigLoader ( )
2016-12-09 08:46:37 +01:00
# REDIS #
2019-10-28 13:48:43 +01:00
r_serv = config_loader . get_redis_conn ( " Redis_Queues " )
r_cache = config_loader . get_redis_conn ( " Redis_Cache " )
r_serv_log = config_loader . get_redis_conn ( " Redis_Log " )
r_serv_log_submit = config_loader . get_redis_conn ( " Redis_Log_submit " )
r_serv_charts = config_loader . get_redis_conn ( " ARDB_Trending " )
r_serv_sentiment = config_loader . get_redis_conn ( " ARDB_Sentiment " )
r_serv_term = config_loader . get_redis_conn ( " ARDB_Tracker " )
r_serv_cred = config_loader . get_redis_conn ( " ARDB_TermCred " )
r_serv_tags = config_loader . get_redis_conn ( " ARDB_Tags " )
r_serv_metadata = config_loader . get_redis_conn ( " ARDB_Metadata " )
r_serv_db = config_loader . get_redis_conn ( " ARDB_DB " )
r_serv_statistics = config_loader . get_redis_conn ( " ARDB_Statistics " )
r_serv_onion = config_loader . get_redis_conn ( " ARDB_Onion " )
2018-08-16 17:24:39 +02:00
2021-04-28 15:24:33 +02:00
# Logger (Redis)
redis_logger = publisher
# Port of the redis instance used by pubsublogger
redis_logger . port = 6380
# Channel name to publish logs
redis_logger . channel = ' front '
2018-06-14 16:51:06 +02:00
sys . path . append ( ' ../../configs/keys ' )
# MISP #
try :
2018-06-19 11:31:30 +02:00
from pymisp import PyMISP
2018-06-14 16:51:06 +02:00
from mispKEYS import misp_url , misp_key , misp_verifycert
pymisp = PyMISP ( misp_url , misp_key , misp_verifycert )
misp_event_url = misp_url + ' /events/view/ '
print ( ' Misp connected ' )
except :
print ( ' Misp not connected ' )
2018-06-15 17:25:43 +02:00
pymisp = False
2018-06-14 16:51:06 +02:00
misp_event_url = ' # '
# The Hive #
try :
2018-06-19 11:31:30 +02:00
from thehive4py . api import TheHiveApi
import thehive4py . exceptions
from theHiveKEYS import the_hive_url , the_hive_key , the_hive_verifycert
2018-06-15 17:25:43 +02:00
if the_hive_url == ' ' :
HiveApi = False
hive_case_url = ' # '
print ( ' The HIVE not connected ' )
else :
2018-06-19 11:31:30 +02:00
HiveApi = TheHiveApi ( the_hive_url , the_hive_key , cert = the_hive_verifycert )
2018-06-15 17:25:43 +02:00
hive_case_url = the_hive_url + ' /index.html#/case/id_here/details '
2018-06-14 16:51:06 +02:00
except :
print ( ' The HIVE not connected ' )
2018-06-15 17:25:43 +02:00
HiveApi = False
2018-06-14 16:51:06 +02:00
hive_case_url = ' # '
2018-06-19 11:43:16 +02:00
if HiveApi != False :
2018-06-19 11:42:06 +02:00
try :
HiveApi . get_alert ( 0 )
print ( ' The Hive connected ' )
except thehive4py . exceptions . AlertException :
HiveApi = False
print ( ' The Hive not connected ' )
2018-06-19 11:31:30 +02:00
2019-07-25 17:26:32 +02:00
#### VARIABLES ####
2019-10-28 13:48:43 +01:00
baseUrl = config_loader . get_config_str ( " Flask " , " baseurl " )
2018-09-20 10:38:19 +02:00
baseUrl = baseUrl . replace ( ' / ' , ' ' )
if baseUrl != ' ' :
baseUrl = ' / ' + baseUrl
2019-10-28 13:48:43 +01:00
max_preview_char = int ( config_loader . get_config_str ( " Flask " , " max_preview_char " ) ) # Maximum number of character to display in the tooltip
max_preview_modal = int ( config_loader . get_config_str ( " Flask " , " max_preview_modal " ) ) # Maximum number of character to display in the modal
2016-12-09 08:46:37 +01:00
2019-03-20 13:25:02 +01:00
max_tags_result = 50
2019-10-28 13:48:43 +01:00
DiffMaxLineLength = int ( config_loader . get_config_str ( " Flask " , " DiffMaxLineLength " ) ) #Use to display the estimated percentage instead of a raw value
2018-06-01 11:26:45 +02:00
bootstrap_label = [ ' primary ' , ' success ' , ' danger ' , ' warning ' , ' info ' ]
2018-06-08 16:49:20 +02:00
2019-04-24 16:19:35 +02:00
dict_update_description = { ' v1.5 ' : { ' nb_background_update ' : 5 , ' update_warning_message ' : ' An Update is running on the background. Some informations like Tags, screenshot can be ' ,
2019-11-08 16:00:42 +01:00
' update_warning_message_notice_me ' : ' missing from the UI. ' } ,
' v2.4 ' : { ' nb_background_update ' : 1 , ' update_warning_message ' : ' An Update is running on the background. Some informations like Domain Tags/Correlation can be ' ,
2019-12-17 15:13:36 +01:00
' update_warning_message_notice_me ' : ' missing from the UI. ' } ,
' v2.6 ' : { ' nb_background_update ' : 1 , ' update_warning_message ' : ' An Update is running on the background. Some informations like Domain Tags/Correlation can be ' ,
2020-01-09 15:07:51 +01:00
' update_warning_message_notice_me ' : ' missing from the UI. ' } ,
' v2.7 ' : { ' nb_background_update ' : 1 , ' update_warning_message ' : ' An Update is running on the background. Some informations like Domain Tags can be ' ,
2020-12-11 21:31:14 +01:00
' update_warning_message_notice_me ' : ' missing from the UI. ' } ,
' v3.4 ' : { ' nb_background_update ' : 1 , ' update_warning_message ' : ' An Update is running on the background. Some informations like Domain Languages can be ' ,
2020-01-09 15:07:51 +01:00
' update_warning_message_notice_me ' : ' missing from the UI. ' }
2019-04-18 10:56:00 +02:00
}
2018-06-08 16:49:20 +02:00
UPLOAD_FOLDER = os . path . join ( os . environ [ ' AIL_FLASK ' ] , ' submitted ' )
2018-07-26 11:35:54 +02:00
2019-10-28 13:48:43 +01:00
PASTES_FOLDER = os . path . join ( os . environ [ ' AIL_HOME ' ] , config_loader . get_config_str ( " Directories " , " pastes " ) ) + ' / '
2021-01-08 17:37:18 +01:00
SCREENSHOT_FOLDER = config_loader . get_files_directory ( ' screenshot ' )
2018-08-16 17:24:39 +02:00
2020-04-20 17:50:40 +02:00
REPO_ORIGIN = ' https://github.com/ail-project/ail-framework.git '
2019-04-16 17:24:59 +02:00
2019-10-28 13:48:43 +01:00
max_dashboard_logs = int ( config_loader . get_config_str ( " Flask " , " max_dashboard_logs " ) )
2018-08-24 10:35:28 +02:00
2019-10-28 13:48:43 +01:00
crawler_enabled = config_loader . get_config_boolean ( " Crawler " , " activate_crawler " )
2019-06-04 14:22:46 +02:00
2019-06-24 13:43:16 +02:00
email_regex = r ' [a-zA-Z0-9._ % +-]+@[a-zA-Z0-9.-]+ \ .[a-zA-Z] { 2,6} '
2019-06-20 10:56:31 +02:00
email_regex = re . compile ( email_regex )
2021-04-28 15:24:33 +02:00
# SubmitPaste vars
SUBMIT_PASTE_TEXT_MAX_SIZE = int ( config_loader . get_config_str ( " SubmitPaste " , " TEXT_MAX_SIZE " ) )
SUBMIT_PASTE_FILE_MAX_SIZE = int ( config_loader . get_config_str ( " SubmitPaste " , " FILE_MAX_SIZE " ) )
SUBMIT_PASTE_FILE_ALLOWED_EXTENSIONS = [ item . strip ( ) for item in config_loader . get_config_str ( " SubmitPaste " , " FILE_ALLOWED_EXTENSIONS " ) . split ( ' , ' ) ]
2019-07-26 14:28:02 +02:00
2018-08-24 10:35:28 +02:00
# VT
2018-06-29 10:02:29 +02:00
try :
from virusTotalKEYS import vt_key
if vt_key != ' ' :
vt_auth = vt_key
vt_enabled = True
print ( ' VT submission is enabled ' )
else :
vt_enabled = False
print ( ' VT submission is disabled ' )
except :
2019-10-28 13:48:43 +01:00
vt_auth = { ' apikey ' : config_loader . get_config_str ( " Flask " , " max_preview_char " ) }
2018-06-29 10:02:29 +02:00
vt_enabled = False
print ( ' VT submission is disabled ' )