#!/usr/bin/env bash

# Wrapper script to gather all necessary auth data from the "isi auth" CLI
#
# This script is Access Zone aware, looping over various commands for all
# existing Access Zones, and all configured Auth Providers.

# This script replaces all the previous commands called in 7.0.
#    exe:
#       'isi_auth_ads_status':
#       'isi_auth_ads_dc':
#
#    local_exe:
#       'isi_auth_ads_spn_list':
#       'isi_auth_config':
#       'isi_auth_ads_list':
#       'isi_auth_file_list':
#       'isi_auth_ldap_list':
#       'isi_auth_local_list':
#       'isi_auth_nis_list':

# Newly added commands
#     isi auth ads trusts list
#     isi auth ads trusts controllers list
#     isi zone zones list
#     isi zone restrictions list

# Not included:
#     isi auth mapping dump - large data output, called directly by IGI
#     isi auth roles list - logically separate from auth config

#
# Parse Arguments
#
for i in "$@"; do
case $i in
	-n)
	PERNODE=true
	;;
	*)
	echo Usage:
	echo "   -n: gather per node information"
	echo "   default: gather cluster wide information"
	;;
esac
done

#
# Zones
#

ZONES=`isi zone zones list --no-header --no-footer`

if [ $PERNODE ]; then
	:
else
	COMMAND="/usr/bin/isi zone zones list --verbose"
	echo $COMMAND
	$COMMAND
	echo

	COMMANDS=(
	    "/usr/bin/isi zone restrictions list"
	    )

	for c in "${COMMANDS[@]}"; do
		for z in $ZONES; do
			echo $c $z
			$c $z
			echo
		done
	done
fi

#
# General Auth
#

NODE_COMMANDS=(
    "/usr/bin/isi --timeout=15 auth status --verbose"
    )

CLUS_COMMANDS=(
    "/usr/bin/isi --timeout=15 auth settings global view"
    "/usr/bin/isi --timeout=15 auth krb5 list"
    "/usr/bin/isi --timeout=15 auth mapping idrange --get-uid-range"
    "/usr/bin/isi --timeout=15 auth mapping idrange --get-gid-range"
    )

if [ $PERNODE ]; then
	COMMANDS=("${NODE_COMMANDS[@]}")
else
	COMMANDS=("${CLUS_COMMANDS[@]}")
fi

for c in "${COMMANDS[@]}"; do
	echo $c
	$c
	echo
done

#
# Active Directory
#

NODE_COMMANDS=(
    )

CLUS_COMMANDS=(
    "/usr/bin/isi --timeout=15 auth ads list"
    "/usr/bin/isi --timeout=15 auth ads list --verbose"
    )

if [ $PERNODE ]; then
	COMMANDS=("${NODE_COMMANDS[@]}")
else
	COMMANDS=("${CLUS_COMMANDS[@]}")
fi

for c in "${COMMANDS[@]}"; do
	echo $c
	$c
	echo
done

# AD commands requiring domain input

ADPROVIDERS=`isi auth ads list --format=csv --no-header | cut -d ',' -f 1`

NODE_COMMANDS=(
    "/usr/bin/isi_classic auth ads dc -v --domain"
    )

CLUS_COMMANDS=(
    "/usr/bin/isi --timeout=15 auth ads spn list --domain"
    "/usr/bin/isi --timeout=15 auth ads trusts list"
    "/usr/bin/isi --timeout=15 auth ads trusts controllers list --verbose --provider"
    )

if [ $PERNODE ]; then
	COMMANDS=("${NODE_COMMANDS[@]}")
else
	COMMANDS=("${CLUS_COMMANDS[@]}")
fi

for c in "${COMMANDS[@]}"; do
	for p in $ADPROVIDERS; do
		echo $c $p
		$c $p
		echo
	done
done

#
# Other Providers
#

NODE_COMMANDS=(
    )

CLUS_COMMANDS=(
    "/usr/bin/isi --timeout=15 auth ldap list"
    "/usr/bin/isi --timeout=15 auth ldap list --verbose"
    "/usr/bin/isi --timeout=15 auth nis list"
    "/usr/bin/isi --timeout=15 auth nis list --verbose"
    "/usr/bin/isi --timeout=15 auth local list"
    "/usr/bin/isi --timeout=15 auth local list --verbose"
    "/usr/bin/isi --timeout=15 auth file list"
    "/usr/bin/isi --timeout=15 auth file list --verbose"
    )

if [ $PERNODE ]; then
	COMMANDS=("${NODE_COMMANDS[@]}")
else
	COMMANDS=("${CLUS_COMMANDS[@]}")
fi

for c in "${COMMANDS[@]}"; do
	echo $c
	$c
	echo
done
