.PHONY: install clean test lint

USERNAME = $$(whoami)

CA CA.pub users hosts:
	./ssh-ca init

users/$(USERNAME): users CA CA.pub
	./ssh-ca newuser $(USERNAME)

hosts/localhost: hosts CA CA.pub
	./ssh-ca newhost localhost

known_hosts: CA.pub
	echo "@cert-authority * $$(cat CA.pub)" > known_hosts

sshd_config:
	@echo "ListenAddress 127.0.0.1:22222" > sshd_config
	@echo "HostKey $$PWD/hosts/localhost/ssh_host_rsa_key" >> sshd_config
	@echo "HostKey $$PWD/hosts/localhost/ssh_host_dsa_key" >> sshd_config
	@echo "HostKey $$PWD/hosts/localhost/ssh_host_ecdsa_key" >> sshd_config
	@echo "HostKey $$PWD/hosts/localhost/ssh_host_ed25519_key" >> sshd_config
	@echo "HostCertificate $$PWD/hosts/localhost/ssh_host_rsa_key-cert.pub" >> sshd_config
	@echo "HostCertificate $$PWD/hosts/localhost/ssh_host_dsa_key-cert.pub" >> sshd_config
	@echo "HostCertificate $$PWD/hosts/localhost/ssh_host_ecdsa_key-cert.pub" >> sshd_config
	@echo "HostCertificate $$PWD/hosts/localhost/ssh_host_ed25519_key-cert.pub" >> sshd_config
	@echo "PidFile sshd.pid" >> sshd_config
	@echo "UsePrivilegeSeparation no" >> sshd_config
	@echo "MaxAuthTries 20" >> sshd_config
	@echo "TrustedUserCAKeys $$PWD/CA.pub" >> sshd_config

ssh_config:
	@echo "Host test" > ssh_config
	@echo "HostName localhost" >> ssh_config
	@echo "Port 22222"  >> ssh_config
	@echo "IdentityFile users/%u/id_rsa" >> ssh_config
	@echo "IdentityFile users/%u/id_dsa" >> ssh_config
	@echo "IdentityFile users/%u/id_ecdsa" >> ssh_config
	@echo "IdentityFile users/%u/id_ed25519" >> ssh_config
	@echo "UserKnownHostsFile known_hosts" >> ssh_config
	@echo "StrictHostKeyChecking yes" >> ssh_config
	@echo "BatchMode yes" >> ssh_config

install:
	cp ssl-ca /usr/local/bin/ssh-ca
	chmod 755 /usr/local/bin/ssh-ca

clean:
	if [ -f sshd.pid ] && [ -d "/proc/$$(cat sshd.pid)" ]; then kill "$$(cat sshd.pid)"; fi
	rm -rf CA CA.pub users hosts known_hosts sshd.pid sshd_config ssh_config

lint:
	/bin/sh -en ssh-ca

test: lint clean ssh_config sshd_config CA CA.pub users/$(USERNAME) hosts/localhost known_hosts
	$$(PATH=$$PATH:/usr/local/sbin:/usr/sbin:/sbin which sshd) -f sshd_config
	test "$$(ssh -F ssh_config test whoami)" = "$$USER"
	kill $$(cat sshd.pid)