2020-08-20 13:20:31 +02:00
|
|
|
#!/usr/bin/python3
|
|
|
|
|
|
|
|
"""
|
|
|
|
Config save in DB
|
|
|
|
===================
|
|
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import redis
|
|
|
|
|
|
|
|
sys.path.append(os.path.join(os.environ['AIL_BIN'], 'lib'))
|
2022-11-28 15:01:40 +01:00
|
|
|
from lib import ConfigLoader
|
2020-08-20 13:20:31 +02:00
|
|
|
|
|
|
|
config_loader = ConfigLoader.ConfigLoader()
|
|
|
|
r_serv_db = config_loader.get_redis_conn("ARDB_DB")
|
|
|
|
config_loader = None
|
|
|
|
|
|
|
|
#### TO PUT IN CONFIG
|
|
|
|
# later => module timeout
|
|
|
|
#
|
|
|
|
## data retention
|
|
|
|
#########################
|
|
|
|
|
2022-03-07 15:12:01 +01:00
|
|
|
|
|
|
|
ail_config = {
|
2020-08-20 13:20:31 +02:00
|
|
|
"crawler": {
|
2022-03-07 15:12:01 +01:00
|
|
|
"enable_har_by_default": {
|
|
|
|
"default": False,
|
|
|
|
"type": bool,
|
|
|
|
"info": "Enable HAR by default"
|
|
|
|
},
|
|
|
|
"enable_screenshot_by_default": {
|
|
|
|
"default": True,
|
|
|
|
"type": bool,
|
|
|
|
"info": "Enable screenshot by default"
|
|
|
|
},
|
|
|
|
"depth_limit": {
|
|
|
|
"default": 1,
|
|
|
|
"type": int,
|
|
|
|
"info": "Maximum number of url depth"
|
|
|
|
},
|
|
|
|
"closespider_pagecount": {
|
|
|
|
"default": 50,
|
|
|
|
"type": int,
|
|
|
|
"info": "Maximum number of pages"
|
|
|
|
},
|
|
|
|
"user_agent": {
|
|
|
|
"default": 50,
|
|
|
|
"type": str,
|
|
|
|
"info": "User agent used by default"
|
|
|
|
},
|
|
|
|
"timeout": {
|
|
|
|
"default": 30,
|
|
|
|
"type": int,
|
|
|
|
"info": "Crawler connection timeout"
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"misp": {
|
|
|
|
"url": {
|
|
|
|
"default": "https://localhost:8443/",
|
|
|
|
"type": str,
|
|
|
|
"info": "Crawler connection timeout"
|
|
|
|
},
|
|
|
|
"key": {
|
|
|
|
"default": "",
|
|
|
|
"type": str,
|
|
|
|
"info": "Crawler connection timeout"
|
|
|
|
},
|
|
|
|
"verifycert": {
|
|
|
|
"default": True,
|
|
|
|
"type": bool,
|
|
|
|
"info": "Crawler connection timeout"
|
|
|
|
},
|
2020-08-20 13:20:31 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-03-07 15:12:01 +01:00
|
|
|
# The MISP auth key can be found on the MISP web interface under the automation section
|
|
|
|
|
|
|
|
def get_config_value(section, field, value):
|
|
|
|
return r_serv_db.hget(f'ail:config:global:{section}', field, value)
|
|
|
|
|
|
|
|
def get_config_default_value(section, field, value):
|
|
|
|
return ail_config[section][field]['default']
|
|
|
|
|
|
|
|
def get_config_type(section, field, value):
|
|
|
|
return ail_config[section][field]['type']
|
|
|
|
|
|
|
|
def get_config_info(section, field, value):
|
|
|
|
return ail_config[section][field]['info']
|
|
|
|
|
|
|
|
def save_config(section, field, value):
|
|
|
|
if section in ail_config:
|
|
|
|
if is_valid_type(value, section, field, value_type=value_type):
|
|
|
|
# if value_type in ['list', 'set', 'dict']:
|
|
|
|
# pass
|
|
|
|
# else:
|
|
|
|
r_serv_db.hset(f'ail:config:global:{section}', field, value)
|
|
|
|
|
|
|
|
|
|
|
|
config_documentation = {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
default_config = {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2020-08-20 13:20:31 +02:00
|
|
|
def get_default_config():
|
|
|
|
return default_config
|
|
|
|
|
|
|
|
def get_default_config_value(section, field):
|
|
|
|
return default_config[section][field]
|
|
|
|
|
2022-03-07 15:12:01 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### DEFAULT CONFIG ####
|
|
|
|
|
|
|
|
#### CONFIG TYPE ####
|
|
|
|
# CONFIG DOC
|
2020-08-20 13:20:31 +02:00
|
|
|
config_type = {
|
|
|
|
|
2022-03-07 15:12:01 +01:00
|
|
|
}
|
2020-08-20 13:20:31 +02:00
|
|
|
|
|
|
|
# # TODO: add set, dict, list and select_(multiple_)value
|
|
|
|
def is_valid_type(obj, section, field, value_type=None):
|
|
|
|
res = isinstance(obj, get_config_type(section, field))
|
|
|
|
return res
|
|
|
|
|
2022-03-07 15:12:01 +01:00
|
|
|
# # TODO: ###########################################################
|
2020-08-20 13:20:31 +02:00
|
|
|
def reset_default_config():
|
2022-03-07 15:12:01 +01:00
|
|
|
for section in config_type:
|
|
|
|
|
2020-08-20 13:20:31 +02:00
|
|
|
pass
|
|
|
|
|
|
|
|
def set_default_config(section, field):
|
|
|
|
save_config(section, field, get_default_config_value(section, field))
|
|
|
|
|
|
|
|
def get_all_config_sections():
|
|
|
|
return list(get_default_config())
|
|
|
|
|
|
|
|
def get_all_config_fields_by_section(section):
|
|
|
|
return list(get_default_config()[section])
|
|
|
|
|
|
|
|
def get_config(section, field):
|
|
|
|
# config field don't exist
|
|
|
|
if not r_serv_db.hexists(f'config:global:{section}', field):
|
|
|
|
set_default_config(section, field)
|
|
|
|
return get_default_config_value(section, field)
|
|
|
|
|
|
|
|
# load default config section
|
|
|
|
if not r_serv_db.exists('config:global:{}'.format(section)):
|
|
|
|
save_config(section, field, get_default_config_value(section, field))
|
|
|
|
return get_default_config_value(section, field)
|
|
|
|
|
|
|
|
return r_serv_db.hget(f'config:global:{section}', field)
|
|
|
|
|
|
|
|
def get_config_dict_by_section(section):
|
|
|
|
config_dict = {}
|
|
|
|
for field in get_all_config_fields_by_section(section):
|
|
|
|
config_dict[field] = get_config(section, field)
|
|
|
|
return config_dict
|
|
|
|
|
|
|
|
|
|
|
|
# check config value + type
|
|
|
|
def check_integrity():
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def get_field_full_config(section, field):
|
|
|
|
dict_config = {}
|
|
|
|
dict_config['value'] = get_config(section, field)
|
|
|
|
dict_config['type'] = get_config_type(section, field)
|
|
|
|
dict_config['info'] = get_config_documentation(section, field)
|
|
|
|
return dict_config
|
|
|
|
|
|
|
|
def get_full_config_by_section(section):
|
|
|
|
dict_config = {}
|
|
|
|
for field in get_all_config_fields_by_section(section):
|
|
|
|
dict_config[field] = get_field_full_config(section, field)
|
|
|
|
return dict_config
|
|
|
|
|
|
|
|
def get_full_config():
|
|
|
|
dict_config = {}
|
|
|
|
for section in get_all_config_sections():
|
|
|
|
dict_config[section] = get_full_config_by_section(section)
|
|
|
|
return dict_config
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
res = get_full_config()
|
|
|
|
print(res)
|