#!/usr/bin/env bash

set -e

eval `ultrapossum-config init`
tmp=`tempfile`
trap "/bin/rm -f $tmp; eval `ultrapossum-config term`" 0

home=$(getent passwd | egrep "^`whoami`:" | cut -d: -f6)
if test "x$home" = "x"; then
  home=$HOME
fi

#keygen <cmd>
keygen() {
  if ! test -f "$SSHKEYDIR/$1/id_rsa"; then
    install -d $SSHKEYDIR/$1
    ssh-keygen -t rsa -f $SSHKEYDIR/$1/id_rsa -N ""
  fi
}

auth() {
  add_startmark "##" "SERVER" > $tmp
  echo -n "Registering ssh permissions..." 1>&2
  /bin/ls $SSHKEYDIR | while read cmd
  do
    if test -f $SSHKEYDIR/$cmd/id_rsa.pub; then
      echo -n " $cmd" 1>&2
      echo "command=\"$MODULEDIR/server/$cmd\" `cat $SSHKEYDIR/$cmd/id_rsa.pub`" >> $tmp
    fi
  done
  echo "." 1>&2
  add_endmark "##" "SERVER" >> $tmp
  install -m700 -d $home/.ssh/
  touch $home/.ssh/authorized_keys
  add_end_vaconf $home/.ssh/authorized_keys $tmp "SERVER"
}

unauth() {
  if test -f $home/.ssh/authorized_keys; then
    strip_vaconf $home/.ssh/authorized_keys "SERVER"
  fi
}

# cmd <host> <cmd>
cmd() {
  getconfig | ssh -T -i $SSHKEYDIR/$2/id_rsa $1 $MODULEDIR/server/$2
}

case "x$1" in
  xkeygen)
    install -m 750 -d $SSHKEYDIR
    if test "x$2" = "x"; then
      echo "Usage: $0 keygen <cmd>" 1>&2
      exit 1
    fi
    keygen "$2"
    ;;
  xauth)
    auth
    ;;
  xunauth)
    unauth
    ;;
  xcmd)
    if test "x$3" = "x"; then
      echo "Usage: $0 cmd <host> <cmd>" 1>&2
      exit 1
    fi
    cmd "$2" "$3"
    ;;
  *)
    echo "Unknown argument: $1" 1>&2
    exit 1
    ;;
esac

