more sync mesh fixes

This commit is contained in:
wh1te909 2024-03-04 10:05:45 +00:00
parent bad646141c
commit 1ae4e23db1
2 changed files with 27 additions and 10 deletions

View File

@ -59,15 +59,19 @@ def transform_mesh(obj):
for _, nodes in obj.items():
for node in nodes:
node_id = node["_id"]
try:
user_ids = [
user_id
for user_id in node["links"].keys()
if pattern.match(user_id)
]
ret.append({"node_id": node_id, "user_ids": user_ids})
except KeyError:
# will trigger on initial sync cuz no mesh users yet
# also triggers for invalid agents after sync
pass
else:
ret.append({"node_id": node_id, "user_ids": user_ids})
except Exception:
logger.debug(traceback.format_exc)
return ret

View File

@ -405,6 +405,12 @@ def sync_mesh_perms_task(self):
block_dashboard_login=False,
)
trmm_agents_meshnodeids = [
f"node//{i.hex_mesh_node_id}"
for i in Agent.objects.only("mesh_node_id")
if i.mesh_node_id
]
mesh_users_dict = {}
for user in users:
full_name = build_mesh_display_name(
@ -473,6 +479,10 @@ def sync_mesh_perms_task(self):
target_map = {item["node_id"]: set(item["user_ids"]) for item in final_mesh}
for node_id, source_users in source_map.items():
# skip agents without valid node id
if node_id not in trmm_agents_meshnodeids:
continue
target_users = target_map.get(node_id, set()) - set(
users_to_delete_globally
)
@ -494,7 +504,10 @@ def sync_mesh_perms_task(self):
ms2 = MeshSync(uri)
unique_ids = ms2.get_unique_mesh_users(new_trmm_agents)
for user in unique_ids:
try:
mesh_realname = ms2.mesh_users[user]["realname"]
except KeyError:
mesh_realname = ""
trmm_realname = mesh_users_dict[user]["full_name"]
if mesh_realname != trmm_realname:
logger.info(