root@wireguard:/etc/wireguard/wgctl# grep "^def " /etc/wireguard/wgctl/core/json_helper.py def get(file, key): def set_key(file, key, value): def delete_key(file, key): def append(file, key, value): def remove_value(file, key, value): def cat(file): def has_key(file, key): def filter_values(file, key, value): def last_event(file, key, field, client): def events_for(file, ip, limit): def fw_events(file, filter_ip, filter_type, clients_dir, limit): def wg_events(file, filter_client, filter_type, limit): def format_fw_event(line, clients_dir): def format_wg_event(line): def remove_events(file, identifier): def follow_logs(fw_file, wg_file, filter_ip, filter_type, clients_dir, filter_peers=""): def count(file, key): def audit_fw_counts(clients_dir): def peer_group_map(groups_dir): def peer_groups(groups_dir, peer_name): def iso_to_ts(iso_str): def rule_list_data(rules_dir, meta_dir): def group_list_data(groups_dir, blocks_dir): def fmt_datetime(iso_str, fmt): def create_rule(file, name, desc, dns_redirect, allow_ips, block_ips, def cleanup_config(config_file): def remove_peer_block(config_file, name): def create_group(file, name, desc): def parse_event(line): def parse_fw_event(line): def peer_transfer(wg_interface): def peer_transfer_delta(wg_interface, cache_file): def remove_events_filtered(wg_file, fw_file, filter_name, filter_ip, def _rule_resolve_internal(rules_dir, rule_name, visited=None): def rule_resolve(rules_dir, rule_name): def rule_resolve_field(rules_dir, rule_name, field): def rule_inspect(rules_dir, rule_name): def find_rule_file(rules_dir, rule_name): def get_raw(file, key): def count_resolved(rules_dir, rule_name, key): def _block_init(peer_ip): def _block_read(file): def _block_write(file, data): def block_get(file): def block_is_blocked(file): def block_set_direct(file, peer_ip, value): def block_add_group(file, peer_ip, group): def block_remove_group(file, peer_ip, group): def block_add_rule(file, peer_ip, rule_type, name="", target="", def block_remove_rule(file, rule_type, target="", port="", proto=""): def block_get_rules(file): def block_get_groups(file): def block_get_direct(file): def _net_read(file): def _net_write(file, data): def net_list(file): def net_show(file, name): def net_exists(file, name): def net_add_service(file, name, ip, desc='', tags=''): def net_add_port(file, service, port_name, port, proto='tcp', desc=''): def net_remove(file, name): def net_resolve(file, name): def net_reverse_lookup(file, ip, port='', proto=''): def block_is_empty(file): def group_has_peer(file, peer_name): def _subnet_read(file): def _subnet_write(file, data): def _subnet_is_group(entry): def subnet_lookup(file, name, type_key=''): def subnet_type(file, name, type_key=''): def subnet_tunnel_mode(file, name, type_key=''): def subnet_for_ip(file, ip): def subnet_list(file): def subnet_show(file, name): def subnet_add(file, name, subnet, type_key, tunnel_mode, desc, group_parent=''): def subnet_remove(file, name, peers_using): def subnet_rename(file, old_name, new_name, peers_using): def subnet_peers(meta_dir, clients_dir, subnet_name, subnets_file): def subnet_exists(file, name): def identity_rules(file): def identity_add_rule(file, identity_name, rule_name): def identity_remove_rule(file, rule_name): def identity_clear_rules(file): def identity_has_rule(file, rule_name): def _identity_read(file): def _identity_write(file, data): def _identity_init(name): def _parse_peer_name(peer_name): def identity_list(identities_dir): def identity_show(file): def identity_add_peer(file, identity_name, peer_name, peer_type, index): def identity_remove_peer(file, peer_name): def identity_remove(file): def identity_next_index(file, peer_type): def identity_peers(file, filter_type=''): def identity_migrate(identities_dir, clients_dir, meta_dir, dry_run): def identity_infer(peer_name): def identity_exists(file): def peer_data(clients_dir, meta_dir, events_log): def subnet_default_rule(file, name, type_key=''): def subnet_list_names(file): def _policy_read(file): def _policy_write(file, data): def _policy_get_entry(data, name): def policy_get(file, name, field=''): def policy_list(file): def policy_exists(file, name): def policy_add(file, name, tunnel_mode, default_rule, strict_rule, auto_apply, desc): def policy_remove(file, name): def policy_set_field(file, name, field, value): def subnet_policy(subnets_file, subnet_name, type_key=''): def json_get_nested(file, *keys): def json_set_nested(file, *args):