diff --git a/server/configs/server.conf.sample b/server/configs/server.conf.sample index 979ceb1..74da7d1 100644 --- a/server/configs/server.conf.sample +++ b/server/configs/server.conf.sample @@ -3,3 +3,5 @@ use_default_save_directory = yes save_directory = None +[D4_Server] +server_mode = registration # registration or shared-secret diff --git a/server/lib/Sensor.py b/server/lib/Sensor.py index 0940ecd..c74b6a3 100755 --- a/server/lib/Sensor.py +++ b/server/lib/Sensor.py @@ -25,7 +25,26 @@ def is_valid_uuid_v4(UUID): except: return False -def _get_sensor_metadata(sensor_uuid, first_seen=True, last_seen=True, mail=True, description=True): +def _get_sensor_type(sensor_uuid, first_seen=True, last_seen=True, time_format='default'): + uuid_type = [] + uuid_all_type = r_serv_db.smembers('all_types_by_uuid:{}'.format(sensor_uuid)) + for type in uuid_all_type: + type_meta = {} + type_meta['type'] = type + if first_seen: + type_meta['first_seen'] = r_serv_db.hget('metadata_type_by_uuid:{}:{}'.format(sensor_uuid, type), 'first_seen') + if last_seen: + type_meta['last_seen'] = r_serv_db.hget('metadata_type_by_uuid:{}:{}'.format(sensor_uuid, type), 'last_seen') + # time format + if time_format=='gmt': + if type_meta['first_seen']: + type_meta['first_seen'] = datetime.datetime.fromtimestamp(float(type_meta['first_seen'])).strftime('%Y-%m-%d %H:%M:%S') + if type_meta['last_seen']: + type_meta['last_seen'] = datetime.datetime.fromtimestamp(float(type_meta['last_seen'])).strftime('%Y-%m-%d %H:%M:%S') + uuid_type.append(type_meta) + return uuid_type + +def _get_sensor_metadata(sensor_uuid, first_seen=True, last_seen=True, time_format='default', sensor_types=False, mail=True, description=True): meta_sensor = {} meta_sensor['uuid'] = sensor_uuid @@ -33,6 +52,15 @@ def _get_sensor_metadata(sensor_uuid, first_seen=True, last_seen=True, mail=True meta_sensor['first_seen'] = r_serv_db.hget('metadata_uuid:{}'.format(sensor_uuid), 'first_seen') if last_seen: meta_sensor['last_seen'] = r_serv_db.hget('metadata_uuid:{}'.format(sensor_uuid), 'last_seen') + # time format + if time_format=='gmt': + if meta_sensor['first_seen']: + meta_sensor['first_seen'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(meta_sensor['first_seen']))) + if meta_sensor['last_seen']: + meta_sensor['last_seen'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(meta_sensor['last_seen']))) + + if sensor_types: + meta_sensor['types'] = _get_sensor_type(sensor_uuid, first_seen=False, last_seen=False) if description: meta_sensor['description'] = r_serv_db.hget('metadata_uuid:{}'.format(sensor_uuid), 'description') if mail: @@ -77,6 +105,15 @@ def _register_sensor(sensor_uuid, secret_key, user_id=None, description=None): def get_pending_sensor(): return list(r_serv_db.smembers('sensor_pending_registration')) +def get_nb_pending_sensor(): + return r_serv_db.scard('sensor_pending_registration') + +def get_nb_registered_sensors(): + return r_serv_db.scard('registered_uuid') + +def get_registered_sensors(): + return list(r_serv_db.smembers('registered_uuid')) + def approve_sensor(req_dict): sensor_uuid = req_dict.get('uuid', None) if not is_valid_uuid_v4(sensor_uuid): diff --git a/server/server.py b/server/server.py index 98f11ca..917e689 100755 --- a/server/server.py +++ b/server/server.py @@ -12,6 +12,7 @@ import datetime import argparse import logging import logging.handlers +import configparser from twisted.internet import ssl, task, protocol, endpoints, defer from twisted.python import log @@ -27,7 +28,6 @@ accepted_type = [1, 2, 4, 8, 254] accepted_extended_type = ['ja3-jl'] all_server_modes = ('registration', 'shared-secret') -server_mode = 'registration' timeout_time = 30 @@ -584,6 +584,21 @@ if __name__ == "__main__": logger.addHandler(handler_log) logger.setLevel(args.verbose) + + # get file config + config_file_server = os.path.join(os.environ['D4_HOME'], 'configs/server.conf') + config_server = configparser.ConfigParser() + config_server.read(config_file_server) + + # get server_mode + server_mode = config_server['D4_Server'].get('server_mode') + if server_mode not in all_server_modes: + print('Error: incorrect server_mode') + logger.critical('Error: incorrect server_mode') + sys.exit(1) + logger.info('Server mode: {}'.format(server_mode)) + + logger.info('Launching Server ...') task.react(main) diff --git a/server/web/Flask_server.py b/server/web/Flask_server.py index e5d4b31..50eee84 100755 --- a/server/web/Flask_server.py +++ b/server/web/Flask_server.py @@ -38,6 +38,8 @@ baseUrl = '' if baseUrl != '': baseUrl = '/'+baseUrl +all_server_modes = ('registration', 'shared-secret') + host_redis_stream = os.getenv('D4_REDIS_STREAM_HOST', "localhost") port_redis_stream = int(os.getenv('D4_REDIS_STREAM_PORT', 6379)) @@ -61,6 +63,10 @@ if use_default_save_directory: else: data_directory = config_server['Save_Directories'].get('save_directory') +server_mode = config_server['D4_Server'].get('server_mode') +if server_mode not in all_server_modes: + print('Error: incorrect server_mode') + redis_server_stream = redis.StrictRedis( host=host_redis_stream, port=port_redis_stream, @@ -506,6 +512,9 @@ def show_active_uuid(): @login_required @login_user_basic def server_management(): + nb_sensors_registered = Sensor.get_nb_registered_sensors() + nb_sensors_pending = Sensor.get_nb_pending_sensor() + blacklisted_ip = request.args.get('blacklisted_ip') unblacklisted_ip = request.args.get('unblacklisted_ip') blacklisted_uuid = request.args.get('blacklisted_uuid') @@ -570,6 +579,8 @@ def server_management(): list_accepted_extended_types.append({"name": extended_type, 'list_analyzer_uuid': list_analyzer_uuid}) return render_template("server_management.html", list_accepted_types=list_accepted_types, list_accepted_extended_types=list_accepted_extended_types, + server_mode=server_mode, + nb_sensors_registered=nb_sensors_registered, nb_sensors_pending=nb_sensors_pending, default_analyzer_max_line_len=default_analyzer_max_line_len, blacklisted_ip=blacklisted_ip, unblacklisted_ip=unblacklisted_ip, blacklisted_uuid=blacklisted_uuid, unblacklisted_uuid=unblacklisted_uuid) @@ -709,6 +720,15 @@ def blacklisted_uuid(): page=page, nb_page_max=nb_page_max, unblacklisted_uuid=unblacklisted_uuid, blacklisted_uuid=blacklisted_uuid) +@app.route('/server/registered_sensor') +@login_required +@login_admin +def registered_sensor(): + sensors = Sensor.get_registered_sensors() + all_sensors = [] + for sensor_uuid in sensors: + all_sensors.append(Sensor._get_sensor_metadata(sensor_uuid, time_format='gmt', sensor_types=True)) + return render_template("registered_sensors.html", all_sensors=all_sensors) @app.route('/server/pending_sensor') @login_required diff --git a/server/web/templates/registered_sensors.html b/server/web/templates/registered_sensors.html new file mode 100644 index 0000000..f97bb89 --- /dev/null +++ b/server/web/templates/registered_sensors.html @@ -0,0 +1,110 @@ + + + + + D4-Project + + + + + + + + + + + + + + + + + + + + + {% include 'navbar.html' %} + +
+ + + + + + + + + + + + {% for row_uuid in all_sensors %} + + + + + + + + {% endfor %} + +
UUIDfirst seenlast seentypesStatus
+ + {{row_uuid['uuid']}} + + {% if row_uuid['description'] %} +
{{row_uuid['description']}}
+ {% endif %} +
+ {% if row_uuid['first_seen'] %} + {{row_uuid['first_seen']}} + {% else %} + {{'-'}} + {% endif %} + + {% if row_uuid['first_seen'] %} + {{row_uuid['first_seen']}} + {% else %} + {{'-'}} + {% endif %} + + {{type_description}} + {% for uuid_type in row_uuid['types'] %} + + {{uuid_type['type']}} + + {% endfor %} + + OK - + {% else %} + div class="text-danger"> + {{row_uuid['Error']}} + {% endif %} + {% if row_uuid['active_connection'] %} + Connected + {% endif %} +
+
+ + + {% include 'navfooter.html' %} + + + diff --git a/server/web/templates/server_management.html b/server/web/templates/server_management.html index 1ac8d1c..cbb062a 100644 --- a/server/web/templates/server_management.html +++ b/server/web/templates/server_management.html @@ -21,6 +21,24 @@ {% include 'navbar.html' %} +
+
+ +
+
+