# Copyright (C) 2020-2024 Soleta Networks # # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU Affero General Public License as published by the # Free Software Foundation; either version 3 of the License, or # (at your option) any later version. import json import ipaddress import re def scope_lookup(scope_id, scope_type, d): if scope_id == d.get('id') and scope_type == d.get('type'): return d for scope in d['scope']: lookup = scope_lookup(scope_id, scope_type, scope) if lookup is not None: return lookup return None def ips_in_scope(scope): if scope is None: return [] if 'ip' in scope: return [scope['ip']] ips = [] for child in scope['scope']: ips += ips_in_scope(child) return ips def reorder_json_tree(payload): if isinstance(payload, list): elements = payload[:] for val in elements: if isinstance(val, (dict, list)): payload.remove(val) payload.append(val) reorder_json_tree(val) elif isinstance(payload, dict): keys = list(payload.keys()) for k in keys: val = payload[k] if isinstance(val, (dict, list)): del payload[k] payload[k] = val reorder_json_tree(val) def print_json(text): payload = json.loads(text) reorder_json_tree(payload) print(json.dumps(payload, indent=2)) def check_address(addr): try: ip = ipaddress.ip_address(addr) return True except: return False def check_mac_address(addr): if re.match("[a-f0-9]{2}(:[a-f0-9]{2}){5}$", addr.lower()): return True else: print(addr.lower()) return False