#!/usr/bin/bash

if [ $# -ne 1 ] || [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
	echo "usage: $(basename $0) [up|down|-h|--help]"
	exit 0
fi

if [ "$1" != "up" ] && [ "$1" != "down" ]; then
	echo "invalid command: $1"
	exit 1
fi

if [ "$UID" -ne "0" ]; then
	echo "must be run as root"
	exit 2
fi

if ! which zerotier-cli &> /dev/null; then
	echo zerotier-cli not found
	exit 3
fi

if ! which resolvectl &> /dev/null; then
	echo resolvectl not found
	exit 3
fi

readarray -t NETWORKS < <(zerotier-cli listnetworks -j | jq -c '.[]')

for NETWORK in ${NETWORKS[@]}; do
	if [ $(echo $NETWORK | jq '.allowDNS') = "true" ]; then
		DEVICE=$(echo $NETWORK | jq -r '.portDeviceName')
		if [ "$1" = "up" ]; then
			DOMAIN=$(echo $NETWORK | jq -r '.dns.domain')
			readarray -t SERVERS < <(echo $NETWORK | jq '.dns.servers' | jq -r 'join("\n")')
			resolvectl domain $DEVICE $DOMAIN
			resolvectl dns $DEVICE ${SERVERS[@]}
			echo configured $DEVICE, domain: $DOMAIN, servers: ${SERVERS[@]}
		else
			resolvectl domain $DEVICE ""
			resolvectl dns $DEVICE ""
			echo deconfigured $DEVICE
		fi
	fi
done
