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):