From eefa8f0078d9793849f86118003cb84c2036db50 Mon Sep 17 00:00:00 2001 From: alegarsan11 Date: Tue, 28 May 2024 23:05:08 +0200 Subject: [PATCH] fix: save changes on deploy --- nftables-frontend/api.py | 24 +++++++++++++++++++++++- nftables-frontend/service.py | 7 ------- nftables-frontend/views.py | 7 ++++--- nftables-parser/main.py | 3 ++- nftables-parser/service.py | 24 ++++++++++++++++++++++++ 5 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 nftables-parser/service.py diff --git a/nftables-frontend/api.py b/nftables-frontend/api.py index 2582128..3495513 100644 --- a/nftables-frontend/api.py +++ b/nftables-frontend/api.py @@ -1,3 +1,4 @@ +import os import requests import service @@ -381,4 +382,25 @@ def delete_element_from_map_request(map_name, map_family, map_table, key, value) if(response.json()[0] == 0): return "Success" else: - return "Error deleting element from map." \ No newline at end of file + return "Error deleting element from map." + +def reload_service(): + response = requests.get('http://localhost:8000/service/reload_service') + if(response.json()["status"] == "success"): + return "Success" + else: + return "Error reloading service." + +def save_service(): + response = requests.get('http://localhost:8000/service/save_service') + if(response.json()["status"] == "success"): + return "Success" + else: + return "Error saving service." + +def save_service_temp(): + response = requests.get('http://localhost:8000/service/save_service_temp') + if(response.json()["status"] == "success"): + return "Success" + else: + return "Error saving service temp." \ No newline at end of file diff --git a/nftables-frontend/service.py b/nftables-frontend/service.py index 504190e..a777560 100644 --- a/nftables-frontend/service.py +++ b/nftables-frontend/service.py @@ -667,13 +667,6 @@ def check_set_or_map(name): if _map: return _map.type return None - -def save_changes_permanent(): - os.system("sudo su") - os.system("sudo rm -f /etc/nftables.conf") - os.system("sudo nft list ruleset > /etc/nftables.conf") - os.system("sudo systemctl restart nftables") - delete_all_data_except_users() def save_changes_on_file(): files = glob.glob("./temp_config/nftables_temp*.conf") diff --git a/nftables-frontend/views.py b/nftables-frontend/views.py index 3355ca6..c6df07c 100644 --- a/nftables-frontend/views.py +++ b/nftables-frontend/views.py @@ -618,10 +618,10 @@ def save_changes_post(): type_ = request.form.get('save') if type_ != "" or type_ != None: if type_ == 'config': - service.save_changes_permanent() + api.save_service() flash('Changes saved successfully.') elif type_ == 'file': - service.save_changes_on_file() + api.save_service_temp() flash('Changes discarded successfully.') return redirect('/') @@ -663,7 +663,8 @@ def add_list_post(): @visualization_bp.route('/reload') @login_required def reload(): - service.reload_service() + service.delete_all_data_except_users() + api.reload_service() return redirect('/') @visualization_bp.route('/rules//edit_description') diff --git a/nftables-parser/main.py b/nftables-parser/main.py index a5a5595..adc624e 100644 --- a/nftables-parser/main.py +++ b/nftables-parser/main.py @@ -1,5 +1,5 @@ import hug -import tables, chains, rules, sets, maps +import tables, chains, rules, sets, maps, service api = hug.API(__name__) api.extend(tables, '/tables') @@ -7,3 +7,4 @@ api.extend(rules, '/rules') api.extend(sets, '/sets') api.extend(maps, '/maps') +api.extend(service, '/service') diff --git a/nftables-parser/service.py b/nftables-parser/service.py new file mode 100644 index 0000000..9ebf171 --- /dev/null +++ b/nftables-parser/service.py @@ -0,0 +1,24 @@ +import glob +import json +from nftables import Nftables +import sys, os +import hug + +@hug.get('/reload_service') +def reload_service(): + os.system("sudo systemctl restart nftables") + return {"status": "success"} + +@hug.get('/save_service') +def save_service(): + os.system("sudo rm -f /etc/nftables.conf") + os.system("sudo nft list ruleset > /etc/nftables.conf") + os.system("sudo systemctl restart nftables") + return {"status": "success"} + +@hug.get('/save_service_temp') +def save_service_temp(): + files = glob.glob("./temp_config/nftables_temp*.conf") + numbers = [int(f.replace("./temp_config/nftables_temp", "").replace(".conf", "")) for f in files] + highest_number = max(numbers) if numbers else 0 + os.system(f"sudo nft list ruleset > ./temp_config/nftables_temp{highest_number + 1}.conf") \ No newline at end of file