From 2f73bb2b8d54eb23c1d3b57b8b4451d74bf0d84d Mon Sep 17 00:00:00 2001 From: Alexandr Bogomyakov Date: Mon, 25 Sep 2023 20:22:44 +0300 Subject: [PATCH] Many things --- lib.py | 24 ++++++++++----- main.py | 41 +++++++++++++++++++++++--- templates/base.html | 2 +- templates/clients.html | 66 ++++++++++++++++++++++++++++++++++++++---- templates/index.html | 2 +- 5 files changed, 117 insertions(+), 18 deletions(-) diff --git a/lib.py b/lib.py index 5d04a51..3099f2c 100644 --- a/lib.py +++ b/lib.py @@ -7,7 +7,7 @@ logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%d-%m-%Y %H:%M:%S') -log = logging.getLogger('OutlineFleet.lib') + class ServerDict(TypedDict): @@ -44,6 +44,7 @@ class Server: 'hostname_for_access_keys': self.client.get_server_information()["hostnameForAccessKeys"], 'keys': self.client.get_keys() } + self.log = logging.getLogger(f'OutFleet.server[{self.data["name"]}]') def info(self) -> ServerDict: return self.data @@ -51,23 +52,32 @@ class Server: def apply_config(self, config): if config.get("name"): self.client.set_server_name(config.get("name")) - log.info("Changed %s name to '%s'", self.data["server_id"], config.get("name")) + self.log.info("Changed %s name to '%s'", self.data["server_id"], config.get("name")) if config.get("metrics"): self.client.set_metrics_status(True if config.get("metrics") == 'True' else False) - log.info("Changed %s metrics status to '%s'", self.data["server_id"], config.get("metrics")) + self.log.info("Changed %s metrics status to '%s'", self.data["server_id"], config.get("metrics")) if config.get("port_for_new_access_keys"): self.client.set_port_new_for_access_keys(int(config.get("port_for_new_access_keys"))) - log.info("Changed %s port_for_new_access_keys to '%s'", self.data["server_id"], config.get("port_for_new_access_keys")) + self.log.info("Changed %s port_for_new_access_keys to '%s'", self.data["server_id"], config.get("port_for_new_access_keys")) if config.get("hostname_for_access_keys"): self.client.set_hostname(config.get("hostname_for_access_keys")) - log.info("Changed %s hostname_for_access_keys to '%s'", self.data["server_id"], config.get("hostname_for_access_keys")) + self.log.info("Changed %s hostname_for_access_keys to '%s'", self.data["server_id"], config.get("hostname_for_access_keys")) if config.get("comment"): with open("config.yaml", "r") as file: config_file = yaml.safe_load(file) or {} config_file["servers"][self.data['server_id']]['comment'] = config.get("comment") with open("config.yaml", "w") as file: yaml.safe_dump(config_file, file) - log.info("Changed %s comment to '%s'", self.data["server_id"], config.get("comment")) + self.log.info("Changed %s comment to '%s'", self.data["server_id"], config.get("comment")) def create_key(self, key_name): - return self.client.create_key(key_name) \ No newline at end of file + self.log.info("New key created: %s", key_name) + return self.client.create_key(key_name) + + def rename_key(self, key_id, new_name): + self.log.info("Key %s renamed: %s", key_id, new_name) + return self.client.rename_key(key_id, new_name) + + def delete_key(self, key_id): + self.log.info("Key %s deleted", key_id) + return self.client.delete_key(key_id) \ No newline at end of file diff --git a/main.py b/main.py index 59fd151..8ba2b14 100644 --- a/main.py +++ b/main.py @@ -12,7 +12,8 @@ logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%d-%m-%Y %H:%M:%S') -log = logging.getLogger('OutlineFleet') + +log = logging.getLogger('OutFleet') SERVERS = list() CLIENTS = list() @@ -140,11 +141,43 @@ def add_client(): for server in SERVERS: if server.data["server_id"] in request.form.getlist('servers'): - log.info("%s", server.create_key(request.form.get('name'))) + client = next((item for item in server.data["keys"] if item.name == request.form.get('old_name')), None) + if client: + if client.name == request.form.get('name'): + pass + else: + server.rename_key(client.key_id, request.form.get('name')) + else: + server.create_key(request.form.get('name')) + else: + client = next((item for item in server.data["keys"] if item.name == request.form.get('old_name')), None) + if client: + server.delete_key(client.key_id) update_state() - return redirect(url_for('index', nt="User has been added")) + return redirect(url_for('clients', nt="Clients updated", selected_client=request.form.get('user_id'))) + + +@app.route('/del_client', methods=['POST']) +def del_client(): + if request.method == 'POST': + with open("config.yaml", "r") as file: + config = yaml.safe_load(file) or {} + + clients = config.get('clients', dict()) + user_id = request.form.get('user_id') + if user_id in clients: + for server in SERVERS: + client = next((item for item in server.data["keys"] if item.name == request.form.get('name')), None) + if client: + server.delete_key(client.key_id) + + config["clients"].pop(user_id) + with open("config.yaml", "w") as file: + yaml.safe_dump(config, file) + update_state() + return redirect(url_for('clients', nt="User has been deleted")) if __name__ == '__main__': update_state() - app.run() + app.run(host='0.0.0.0') diff --git a/templates/base.html b/templates/base.html index 438cc6b..c5ee715 100644 --- a/templates/base.html +++ b/templates/base.html @@ -15,7 +15,7 @@ Menu