# usage:
# 	 node2master <master>
#
# Actions:
# 1. Check existance of apl and host public keys
# 2. generege sos key-pair if not exits
# 3. send sos.pub key to sos@master (ATTN! sos password should be provided at prompt!)
# 4. send apl.pub and host.pub to sos@master
# 5. run key4node setup on master via ssh
# 6. copy master-apl.pub from master
# 7. setup apl's known hosts and authorized keys


dst=$1
usr=sos

mykey=~/.ssh/id_rsa
myhostkey=/etc/ssh/ssh_host_rsa_key.pub
myhostname=`hostname`
APL=/opt/sarch
APL_USR=apl
APL_VAR=/var/sarch
APL_SSH=/var/sarch/home/.ssh
APL_KEY=$APL_SSH/id_rsa
UNI=`/usr/bin/perl -ne 'print if s/^UNI=//' $APL_VAR/conf/node/conf`
VER=`$APL/vpatch/bin/vctl ver`;

ClenAll () {
	rm -f .ssh/apl-$UNI.pub 2>/dev/null
}

ErrExit() {
	echo "ERROR: Cannot register node, $1"
#	CleanAll
	exit 1
}

[ -z "$dst" ] &&  ErrExit "3: Master is not defined"
[ -z "$UNI" ] &&  ErrExit "1: UNI is not defined"
[ -z "$VER" ] &&  ErrExit "2: Version is not defined"
#------------------------------ check if keys already present
mver=`su apl -c "ssh $dst '$APL/vpatch/bin/vctl ver'" 2>/dev/null`
if [ $? == 0 ]; then
  [ $VER != "$mver" ] && ErrExit "Software versions do not match with master $mver !=$VER" 
  echo "keys are present"
  exit 0
fi
#------------------------------ make key if not exists
[ -f $mykey ] || ssh-keygen -q -t rsa -f $mykey -N ''

#------------------------------ copy my public key
scp $mykey.pub $usr@$dst:.ssh/authorized_keys #>/dev/null

[ $? == 0 ] || ErrExit "10:"
#------------------------------ check version
mver=`ssh $usr@$dst 'cat /opt/sos/ver'`
[ $? == 0 ] || ErrExit "19: Cannot find master-version"
[ $VER != "$mver" ] && ErrExit "Software versions do not match with master $mver !=$VER"
#------------------------------ copy apl public key
[ -f $APL_KEY.pub ] || ErrExit "20: Apl key is missing"
#                 place UNI into public key
perl -pe "s/\\sapl.\\w+/ apl\@$UNI/" <$APL_KEY.pub >~/.ssh/apl-$UNI.pub
scp  ~/.ssh/apl-$UNI.pub $usr@$dst:.ssh/apl-$UNI.pub >/dev/null
[ $? == 0 ] || ErrExit "25:"

scp  /home/sos/smx.cert $usr@$dst:.ssh/smx-$UNI.cert
[ $? == 0 ] || ErrExit "30: Failed to upload node certificate to master host"

scp  $usr@$dst:/home/sos/smx.cert /home/sos/smx-master.cert
[ $? == 0 ] || ErrExit "31: Failed to download master certificate"

/opt/sarch/smix/bin/keymanager import /home/sos/smx-master.cert MASTER
[ $? == 0 ] || ErrExit "32: Failed to import master certificate into keystore"

#------------------------------ copy host public key
[ -f $myhostkey ] || ErrExit "40: host name is missing"
scp  $myhostkey $usr@$dst:.ssh/host-$UNI.pub >/dev/null
[ $? == 0 ] || ErrExit "45:"
#------------------------------ known hosts for apl (simple version)
cp ~/.ssh/known_hosts $APL_SSH
chown $APL_USR $APL_SSH/known_hosts
chmod 0600 $APL_SSH/known_hosts
#------------------------------ run remote setup
result=`ssh $usr@$dst "/usr/bin/sudo /opt/sos/key4node $UNI $myhostname \\\$SSH_CLIENT"`
[ $? == 0 ] || ErrExit "50: Remote setup fails: $result"
#------------------------------ copy apl.pub to authorized_keys
su apl -c "scp $dst:.ssh/id_rsa.pub $APL_SSH/authorized_keys"

echo COMPLETED
