#! /bin/bash

# EXPORT USER
# TODO: EXPORT USER AGING
# TODO: EXPORT A GROUP
# TODO: EXPORT SSH KEYS

function exportuser() {
    OIFS="$IFS"
    IFS=:
    for U in "$@" ; do
    id -u "$U" > /dev/null || continue
    {
    grep "^$U:" /etc/shadow | head -1
    grep "^$U:" /etc/passwd | head -1
    } |{
        # andrewm:$3$7XYyBiHm$C6yfDor13:17021:0:40:14:::
        read LOGIN S_PASS D3 D4 D5 D6 D7 D8 D9 
        # andrewm:x:500:500::/home/andrewm:/bin/bash
        read PNAME PPASS P_UID P_GID PGECOS P_DIR P_SHELL

        LASTDAY="$( chage -l $U | sed '/Last password change/ { s/.*: //; q; } ; d;' )"           

        EXPIREDATE="$( chage -l $U | sed '/Account expires/ { s/.*: //; q; } ; d;' )"               

        INACTIVE=$( chage -l $U | sed '/Password inactive/ { s/.*: //; q; } ; d;' )
        if [ "$INACTIVE" = never ] ; then INACTIVE=-1; else INACTIVE=$(( ( $( date -d "$INACTIVE" +%s ) - $( date +%s ) ) / 86400 )); fi

        #EXPIRES=$( chage -l $U | sed '/Account expires/ { s/.*: //; q; } ; d;' )
        if [ "$EXPIREDATE" = never ] ; then EXPIREDATE=-1; else EXPIREDATE=$( date -d "$EXPIREDATE" +%Y-%m-%d ); fi

        MINDAYS="$( chage -l $U | sed '/Minimum number of days / { s/.*: //; q; } ; d;' )"        

        MAXDAYS="$( chage -l $U | sed '/Maximum number of days / { s/.*: //; q; } ; d;' )"        

        WARNDAYS="$( chage -l $U | sed '/warning before password expires/ { s/.*: //; q; } ; d;' )"
cat << EOF
# Export of $U@$(hostname) --
[ id\$( id -u "$U" 2>/dev/null ) = id"$P_UID" ] ||
  useradd -p '$S_PASS' -d "$P_DIR" -u "$P_UID" -s "$P_SHELL" "$U"
[ id\$( id -u "$U" 2>/dev/null ) = id"$P_UID" ] && {
  usermod -p '$S_PASS' '$U' 
  chage --lastday    "$LASTDAY"    "$U"
  chage --expiredate "$EXPIREDATE"    "$U"
  chage --inactive   "$INACTIVE"   "$U"
  chage --mindays    "$MINDAYS"    "$U"
  chage --maxdays    "$MAXDAYS"    "$U"
  chage --warndays   "$WARNDAYS"   "$U"
}
EOF
    }
    done
    IFS="$OIFS"
}

exportuser "$@"

