#!/bin/bash

function usage {
	echo "$0 <URL> <username:password> <user/group> <image> <session_setting>"
	echo
	echo "Example: $0 http://localhost:8080 mcadmin1:pass my_user my_image my_setting"
	echo "Example: $0 https://localhost:8443 mcadmin1:pass %my_group my_image my_setting"
	echo
}

[ "$#" -ne 5 ] && usage && exit 1

base_url=$1
admin_password=$2
user_or_group=$3
image=$4
setting=$5


session_setting=$(curl -k --silent --request GET --header "Authorization: $admin_password" "$base_url/mc/rest/sessionSettings" | grep "name='$setting'")
if [ -z "$session_setting" ]; then
	echo "Could not find session setting named $setting!  Exiting..."
	exit 1
fi

policy_assignment_id=$(curl -k --silent --request GET --header "Authorization: $admin_password" "$base_url/mc/rest/userSelect" | grep -B 1 -A 999999 "<name>$user_or_group</name>" | grep -B 999999 -m 1 '</userSelect>' | grep -B 1 "<image name='$image'" | head -n 1 | sed -e "s|'>||" | sed -e "s|.*'||")
if [ -z "$policy_assignment_id" ]; then
	echo "Could not find policy assignment for $user_or_group $image!  Exiting..."
	exit 1
fi

policy_assignment=$(curl -k --silent --request GET --header "Authorization: $admin_password" "$base_url/mc/rest/userSelect" | grep -B 1 -A 999999 "<name>$user_or_group</name>" | grep -A 999999 "<policyAssignment id='$policy_assignment_id'>" | grep -B 999999 -m 1 '</policyAssignment>' | grep -v '<policy name=' | sed -e "s|<policyAssignment id='$policy_assignment_id'>|<policyAssignment><userSelectName>$user_or_group</userSelectName>|" | sed -e "s|<deploymentModes>|$session_setting<deploymentModes>|")

echo "Deleting old policy assignment for $user_or_group $image..."
result=$(curl -k --silent --request DELETE --header "Content-Type: text/xml" --header "Authorization: $admin_password" "$base_url/mc/rest/policyAssignment?id=$policy_assignment_id")
echo $result | grep -q '^SUCCESS'
if [ "$?" = "0" ]; then
	echo "Successfully deleted old policy assignment."
else
	echo "Failed to delete old policy assignment! Exiting..."
	exit 1
fi

echo "Creating new policy assignment $user_or_group $image $setting..."
result=$(curl -k --silent --request POST --header "Content-Type: text/xml" --header "Authorization: $admin_password" --data @- "$base_url/mc/rest/policyAssignment" <<EOF
$policy_assignment
EOF
)
echo $result | grep -q '</policyAssignment>'
if [ "$?" = "0" ]; then
	echo "Successfully created new policy assignment."
else
	echo "Failed to create new policy assignment!"
	exit 1
fi

