#!/usr/local/bin/cbsd
#v11.0.0
CBSDMODULE="node"
MYARG="md5name ip port"
MYOPTARG="cbsdkeyfile pw"
MYDESC="Get rsa get from remote node"

. ${subrdir}/nc.subr
. ${cbsdinit}
. ${nodes}

[ -z "${cbsdkeyfile}" -a -z "${pw}" ] && err 1 "${N1_COLOR}nodeaddkey: ${N2_COLOR}pw=${N1_COLOR} or ${N2_COLOR}cbsdkeyfile=${N1_COLOR} is mandatory${N0_COLOR}"

LOCALKEY="${rsshdir}/${md5name}.id_rsa"
REMOTEKEY=".ssh/${md5name}.id_rsa"

iptype ${ip} >/dev/null 2>&1
_ret=$?

# if natip is not valid IPv4, assume it is NIC variable.
# so try to find out first IPv4 for aliasing
case ${_ret} in
	1)
		if [ -n "${cbsdkeyfile}" ]; then
			# key-based auth
			CBSD_SFTP_CMD="${SCP_CMD} -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oBatchMode=yes -oPort=${port} -i ${cbsdkeyfile} ${cbsduser}@${ip}:${REMOTEKEY} ${LOCALKEY}"
		else
			# pw-based auth
			CBSD_SFTP_CMD="cbsdsftp ${ip} ${port} ${cbsduser} ${pw} ${REMOTEKEY} ${LOCALKEY}"
		fi
		;;
	2)
		if [ -n "${cbsdkeyfile}" ]; then
			# key-based auth
			CBSD_SFTP_CMD="${SCP_CMD} -6 -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oBatchMode=yes -oPort=${port} -i ${cbsdkeyfile} ${cbsduser}@${ip}:${REMOTEKEY} ${LOCALKEY}"
		else
			CBSD_SFTP_CMD="cbsdsftp6 ${ip} ${port} ${cbsduser} ${pw} ${REMOTEKEY} ${LOCALKEY}"
		fi
		;;
	*)
		err 1 "${N1_COLOR}nodeaddkey: unknown IP type: ${N2_COLOR}${ip}${N0_COLOR}"
	;;
esac

cbsdlogger NOTICE ${CBSD_APP}: ${CBSD_SFTP_CMD}
${CBSD_SFTP_CMD}
_res=$?

[ ! -r "${LOCALKEY}" ] && _res=3

case ${_res} in
	0)
		# 0440 also not suitable (for 'cbsd' group, e.g. for 3rd party app)!
		${CHMOD_CMD} 0400 ${LOCALKEY}
		${CHOWN_CMD} ${cbsduser}:${cbsduser} ${LOCALKEY}
		log_err 0 "${N1_COLOR}Key has been added succesful for ${ip}: ${N2_COLOR}${LOCALKEY}${N0_COLOR}"
		;;
	1)
		log_err 1 "${N1_COLOR}Bad user or password.${N0_COLOR}"
		;;
	2)
		log_err 2 "${N1_COLOR}No such key on remote host:${N2_COLOR} ${REMOTEKEY}${N0_COLOR}"
		;;
	3)
		log_err 2 "${N1_COLOR}sftp passed but key not saved: ${N2_COLOR}${REMOTEKEY}${N0_COLOR}"
		;;
	*)
		log_err 3 "${N1_COLOR}Unknown error.${N0_COLOR}"
		;;
esac

exit 0
