33from typing import Tuple , TypedDict , Optional
44from pathlib import Path
55from json import load as json_load
6+ from copy import deepcopy
67
78from helpermodules .utils .run_command import run_command
89
@@ -24,12 +25,12 @@ class MosquittoRole(TypedDict):
2425 acls : list [MosquittoAcl ]
2526
2627
27- def _get_packages_path () -> Path :
28+ def _get_base_path () -> Path :
2829 return Path (__file__ ).resolve ().parents [3 ]
2930
3031
3132def _get_default_roles () -> list [MosquittoRole ]:
32- with open (_get_packages_path () /
33+ with open (_get_base_path () /
3334 "data" / "config" / "mosquitto" / "public" / "default-dynamic-security.json" , 'r' ,
3435 encoding = 'utf-8' ) as file :
3536 dynsec_config = json_load (file )
@@ -38,7 +39,7 @@ def _get_default_roles() -> list[MosquittoRole]:
3839
3940
4041def _get_role_templates () -> list [MosquittoRole ]:
41- with open (_get_packages_path () /
42+ with open (_get_base_path () /
4243 "data" / "config" / "mosquitto" / "public" / "role-templates.json" , 'r' , encoding = 'utf-8' ) as file :
4344 roles : list [MosquittoRole ] = json_load (file )
4445 return roles if roles else []
@@ -51,21 +52,22 @@ def extract_id_from_role_name(role_name: str) -> Optional[int]:
5152 return None
5253
5354
54- def get_acl_role_data (role_template : str , id : int ) -> MosquittoRole :
55- roles = _get_role_templates ()
56- role_data = None
57- for role in roles :
58- if role ["rolename" ] == role_template :
59- role_data = role
60- break
61- if role_data is None :
62- raise ValueError (f"Kein passendes Rollen-Template für '{ role_template } ' gefunden." )
63- role_data ["rolename" ] = role_data ["rolename" ].replace ("<id>" , str (id ))
64- role_data ["textname" ] = role_data ["textname" ].replace ("<id>" , str (id ))
65- role_data ["textdescription" ] = role_data ["textdescription" ].replace ("<id>" , str (id ))
66- for acl in role_data ["acls" ]:
67- acl ["topic" ] = acl ["topic" ].replace ("<id>" , str (id ))
68- return role_data
55+ def get_acl_role_data (role_template_name : str , id : int ) -> MosquittoRole :
56+ template_roles = _get_role_templates ()
57+ for template_role in template_roles :
58+ if template_role ["rolename" ] == role_template_name :
59+ role_data : MosquittoRole = {
60+ "rolename" : template_role ["rolename" ].replace ("<id>" , str (id )),
61+ "textname" : template_role ["textname" ].replace ("<id>" , str (id )),
62+ "textdescription" : template_role ["textdescription" ].replace ("<id>" , str (id )),
63+ "acls" : []
64+ }
65+ for acl in template_role ["acls" ]:
66+ new_acl = deepcopy (acl )
67+ new_acl ["topic" ] = new_acl ["topic" ].replace ("<id>" , str (id ))
68+ role_data ["acls" ].append (new_acl )
69+ return role_data
70+ raise ValueError (f"Kein passendes Rollen-Template für '{ role_template_name } ' gefunden." )
6971
7072
7173def get_configured_role_data (role_name : str ) -> Optional [MosquittoRole ]:
0 commit comments