Skip to content

Instantly share code, notes, and snippets.

@seangreen
Created June 10, 2015 13:53
Show Gist options
  • Save seangreen/9df34f8179c654f92d13 to your computer and use it in GitHub Desktop.
Save seangreen/9df34f8179c654f92d13 to your computer and use it in GitHub Desktop.
Shell Script to switch the Magento braintree gateway from Sandbox mode to Production mode and vice-versa
#!/bin/bash
# Author: Sean Grünböck / studio19.at
# Version: 1.0
# Usage: Use this script to switch braintree to sandbox or production mode
# VARIABLES
CONFIG_FILE="./app/etc/local.xml"
PAYMENT_PROVIDER="Braintree"
# SANDBOX
SANDBOX_CSE=""
SANDBOX_MERCHANTID=""
SANDBOX_ENVIRONMENT=""
SANDBOX_PRIVATEKEY=""
SANDBOX_PUBLICKEY=""
# PRODUCTION
PRODUCTION_CSE=""
PRODUCTION_MERCHANTID=""
PRODUCTION_ENVIRONMENT=""
PRODUCTION_PRIVATEKEY=""
PRODUCTION_PUBLICKEY=""
# USAGE
function usage()
{
cat <<EOF
Usage: $0 [OPTIONS]
Version: 1.0
Author: Sean Grünböck / studio19.at
Use this script to switch braintree to sandbox or production mode
OPTIONS:
-s Set to Sandbox
-p Set to Production
EOF
}
# MESSAGE FUNCTION
function message()
{
STRIP=$(for i in {1..38}; do echo -n "#"; done)
echo -e "$STRIP\n$1\n$STRIP"
}
# GET OPTIONS
while getopts ":sp" OPTION; do
case $OPTION in
h)
usage
exit 0
;;
*)
[[ "$OPTARG" == "" ]] && OPTARG='"-'$OPTION' 1"'
OPTION="OPT_$OPTION"
eval ${OPTION}=$OPTARG
;;
esac
done
# EXIT IF NO OPTIONS
[[ "$OPT_s$OPT_p" == "" ]] && usage && exit 1
# GET PARAMETERS FROM LOCAL.XML
function getParam()
{
RETVAL=$(grep -Eoh "<$1>(<!\[CDATA\[)?(.*)(\]\]>)?<\/$1>" $TMP_FILE | sed "s#<$1><!\[CDATA\[##g;s#\]\]><\/$1>##g")
if [[ "$2" == "sanitise" ]]; then
RETVAL=$(echo "$RETVAL" | sed 's/"/\\\"/g')
fi
echo -e "$RETVAL"
}
which mktemp >/dev/null 2>&1
[ $? -eq 0 ] && TMP_FILE=$(mktemp ./var/local.xml.XXXXX) || TMP_FILE="./var/.tmp.local.xml"
sed -ne '/default_setup/,/\/default_setup/p' $CONFIG_FILE > $TMP_FILE
IGNORE_STRING=""
DBHOST=$(getParam "host")
DBUSER=$(getParam "username")
DBPASS=$(getParam "password" "sanitise" )
DBNAME=$(getParam "dbname")
TABLE_PREFIX=$(getParam "table_prefix")
[ -f $TMP_FILE ] && rm $TMP_FILE
# DO THE MAGIC
if [[ ! "$OPT_s" == "" ]]; then
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$SANDBOX_CSE' WHERE path='payment/braintree/client_side_encryption_key'" $DBNAME;
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$SANDBOX_MERCHANTID' WHERE path='payment/braintree/merchant_id'" $DBNAME;
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$SANDBOX_ENVIRONMENT' WHERE path='payment/braintree/environment'" $DBNAME;
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$SANDBOX_PRIVATEKEY' WHERE path='payment/braintree/private_key'" $DBNAME;
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$SANDBOX_PUBLICKEY' WHERE path='payment/braintree/public_key'" $DBNAME;
message "Switched $PAYMENT_PROVIDER to SANDBOX"
elif [[ ! "$OPT_p" == "" ]]; then
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$PRODUCTION_CSE' WHERE path='payment/braintree/client_side_encryption_key'" $DBNAME;
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$PRODUCTION_MERCHANTID' WHERE path='payment/braintree/merchant_id'" $DBNAME;
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$PRODUCTION_ENVIRONMENT' WHERE path='payment/braintree/environment'" $DBNAME;
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$PRODUCTION_PRIVATEKEY' WHERE path='payment/braintree/private_key'" $DBNAME;
mysql -h $DBHOST -u $DBUSER -p$DBPASS -e "UPDATE core_config_data SET value='$PRODUCTION_PUBLICKEY' WHERE path='payment/braintree/public_key'" $DBNAME;
message "Switched $PAYMENT_PROVIDER to PRODUCTION"
fi
@seangreen
Copy link
Author

I should load Sandbox and Production information from a config file - maybe add it to etc/local.xml ... that would be more secure, than having the data directly in the script.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment