#!/bin/bash

COUNT=$(gcloud compute firewall-rules list --filter="(name: app-firewall-rule-ingress)"  --format='get(name)' | wc -l)

if [ $COUNT -eq 0 ]; then
  printf "Error: There are no firewall rules to update.\nExiting...\n"
  exit 99
fi

FIREWALL_NAMES=($(gcloud compute firewall-rules list --filter='(name: app-firewall-rule-ingress)' --format='get(name)' | sed 's/-app-firewall-rule-ingress//'))

if [ $COUNT -gt 1 ]; then
  fn_num=0
  printf "Cluster Names:\n------------------------------------------------------------\n"
  while [ ${fn_num} -le ${#FIREWALL_NAMES[@]} ]; do
    printf "  %-25s %-25s\n" \
      "${FIREWALL_NAMES[$((fn_num + 0))]}" \
      "${FIREWALL_NAMES[$((fn_num + 1))]}"
    fn_num=$((fn_num+2))
  done
  echo -n "Cluster Name: "
  read USER_FIREWALL_NAME
  FIREWALL_NAME=${USER_FIREWALL_NAME}
fi

MY_IP=$(curl -s ifconfig.me)

echo "For below, specify an IP address (such as ${MY_IP}) or a range (e.g. 0.0.0.0/0 to allow traffic from the global Internet"
echo -n "IP Address: (${MY_IP}): "
read USER_MY_IP
if [ "x${USER_MY_IP}" = "x" ]; then
	MY_IP=${USER_MY_IP}
fi

printf "Updating Firewall Rule %s with source IP %s..." ${FIREWALL_NAME} ${MY_IP}
gcloud compute firewall-rules update ${FIREWALL_NAME} --source-ranges=${MY_IP}
printf "  done!\n"
