132 lines
3.3 KiB
Python
132 lines
3.3 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
from flask import Blueprint, request, jsonify
|
||
|
from app.decorators import *
|
||
|
from app.classes.config import Config
|
||
|
from app.utils import get_device_uuid
|
||
|
import sys
|
||
|
|
||
|
config_bp = Blueprint("config", __name__)
|
||
|
config = Config()
|
||
|
|
||
|
|
||
|
@config_bp.route('/switch/<cat>/<key>', methods=['GET'])
|
||
|
@require_header_token
|
||
|
def switch(cat, key):
|
||
|
"""Switch the Boolean value of a configuration key.
|
||
|
|
||
|
Args:
|
||
|
cat (str): configuration category
|
||
|
key (key): configuration key
|
||
|
|
||
|
Returns:
|
||
|
dict: operation status
|
||
|
"""
|
||
|
try:
|
||
|
value = config.read_config((cat, key))
|
||
|
if value:
|
||
|
config.write_config(cat, key, False)
|
||
|
res = {"status": True,
|
||
|
"message": "Key switched to false"}
|
||
|
else:
|
||
|
config.write_config(cat, key, True)
|
||
|
res = {"status": True,
|
||
|
"message": "Key switched to true"}
|
||
|
except:
|
||
|
res = {"status": True,
|
||
|
"message": "Issue while changing value"}
|
||
|
|
||
|
return jsonify(res)
|
||
|
|
||
|
|
||
|
@config_bp.route('/ioc-type/add/<tag>', methods=['GET'])
|
||
|
@require_header_token
|
||
|
def ioc_type_add(tag):
|
||
|
"""Add an IOC type - defined via its tag - in the
|
||
|
configuration file for detection.
|
||
|
|
||
|
Args:
|
||
|
tag (str): IOC tag
|
||
|
|
||
|
Returns:
|
||
|
dict: operation status
|
||
|
"""
|
||
|
return jsonify(config.ioc_type_add(tag))
|
||
|
|
||
|
|
||
|
@config_bp.route('/ioc-type/delete/<tag>', methods=['GET'])
|
||
|
@require_header_token
|
||
|
def ioc_type_delete(tag):
|
||
|
"""Delete an IOC type - defined via its tag - in the
|
||
|
configuration file for detection.
|
||
|
|
||
|
Args:
|
||
|
tag (str): IOC tag
|
||
|
|
||
|
Returns:
|
||
|
dict: operation status
|
||
|
"""
|
||
|
return jsonify(config.ioc_type_delete(tag))
|
||
|
|
||
|
|
||
|
@config_bp.route('/edit/<cat>/<key>/<path:value>', methods=['GET'])
|
||
|
@require_header_token
|
||
|
def edit(cat, key, value):
|
||
|
"""Edit the string (or array) value of a configuration key.
|
||
|
|
||
|
Args:
|
||
|
cat (str): configuration category
|
||
|
key (str): configuration key
|
||
|
value (any): configuration value
|
||
|
Returns:
|
||
|
dict: operation status
|
||
|
"""
|
||
|
return jsonify(config.write_config(cat, key, value))
|
||
|
|
||
|
|
||
|
@config_bp.route('/db/export', methods=['GET'])
|
||
|
@require_get_token
|
||
|
def export_db():
|
||
|
"""Export the database.
|
||
|
|
||
|
Returns:
|
||
|
dict: the raw database
|
||
|
"""
|
||
|
return config.export_db()
|
||
|
|
||
|
|
||
|
@config_bp.route('/db/import', methods=['POST'])
|
||
|
@require_header_token
|
||
|
def import_db():
|
||
|
"""Import a database via Flash methods
|
||
|
and replace the existant.
|
||
|
|
||
|
Returns:
|
||
|
dict: operation status
|
||
|
"""
|
||
|
try:
|
||
|
f = request.files["file"]
|
||
|
assert f.read(15) == b"SQLite format 3"
|
||
|
d = "/".join(sys.path[0].split("/")[:-2])
|
||
|
f.save("/{}/database.sqlite3".format(d))
|
||
|
res = {"status": True,
|
||
|
"message": "Database updated"}
|
||
|
except:
|
||
|
res = {"status": False,
|
||
|
"message": "Error while database upload"}
|
||
|
return jsonify(res)
|
||
|
|
||
|
|
||
|
@config_bp.route('/list', methods=['GET'])
|
||
|
def list():
|
||
|
"""List key, values of the configuration
|
||
|
|
||
|
Returns:
|
||
|
dict: configuration content
|
||
|
"""
|
||
|
res = config.export_config()
|
||
|
res["backend"]["password"] = ""
|
||
|
res["device_uuid"] = get_device_uuid()
|
||
|
return jsonify(res)
|