Skip to content
This repository has been archived by the owner on Sep 22, 2020. It is now read-only.

Commit

Permalink
Use Local Copy of rs-conn Script
Browse files Browse the repository at this point in the history
Heroku Deploy Buttons do not currently support Git Submodules, which we need in order to pull the latest version of the rs-conn script automagically.
  • Loading branch information
Polytonic committed Dec 4, 2014
1 parent e794294 commit c5913ac
Show file tree
Hide file tree
Showing 2 changed files with 165 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Procfile
Original file line number Diff line number Diff line change
@@ -1 +1 @@
web: ./sputnik/sockets-connect/rs-conn python3 sputnik
web: ./sputnik/vendor/rs-conn python3 sputnik
164 changes: 164 additions & 0 deletions sputnik/vendor/rs-conn
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
#!/bin/bash

# Argument = -t test -r server -p password -v

usage()
{
cat << EOF
usage: $0 options {cmd}
Run an app over a RuppellSok tunnel.
OPTIONS:
-h Show this message
-r tunnel URI
-f Frontend port to connect your app to
-b Port your app runs on (defaults to 1337)
-v Verbose
EOF
}

TUNNEL_URI=
FRONTEND_URI=
BACKEND_PORT=
VERBOSE=

while getopts “hr:f:b:v” OPTION
do
case $OPTION in
h)
usage
exit 1
;;
r)
TUNNEL_URI=$OPTARG
;;
f)
FRONTEND_URI=$OPTARG
;;
b)
BACKEND_PORT=$OPTARG
;;
v)
VERBOSE=1
;;
?)
usage
exit
;;
esac
done

CMD=${@:$OPTIND:$#}

if [[ -z $CMD ]]
then
usage
exit 1
fi

if [[ -z $FRONTEND_URI && -z $RUPPELLS_SOCKETS_FRONTEND_URI && -z $TUNNEL_URI && -z $RUPPELLS_SOCKETS_TUNNEL_URI ]]
then
echo "No frontend or tunnel URI defined, falling back to dev mode."
echo " You can connect to your app on localhost:10000"
BACKEND_PORT=10000
DEV_MODE=true
else
if [[ -z $FRONTEND_URI ]]
then
if [[ -z $RUPPELLS_SOCKETS_FRONTEND_URI ]]
then
usage
exit 1
fi
FRONTEND_URI=$RUPPELLS_SOCKETS_FRONTEND_URI
fi
FRONTEND_PORT=${FRONTEND_URI##tcp://}; FRONTEND_PORT=${FRONTEND_PORT#*:}; FRONTEND_PORT=${FRONTEND_PORT%*/}

if [[ -z $BACKEND_PORT ]]
then
BACKEND_PORT=1337
fi

if [[ -z $TUNNEL_URI ]]
then
if [[ -z $RUPPELLS_SOCKETS_TUNNEL_URI ]]
then
usage
exit 1
fi
TUNNEL_URI=$RUPPELLS_SOCKETS_TUNNEL_URI
fi

# kudos - https://gist.github.com/cdown/1163649
urlencode() {
# urlencode <string>
local length="${#1}"
for (( i = 0 ; i < length ; i++ )); do
local c="${1:i:1}"
case "$c" in
[a-zA-Z0-9.~_-]) printf "$c" ;;
' ') printf + ;;
*) printf '%%%X' "'$c"
esac
done
}

urldecode() {
# urldecode <string>
local url_encoded=${1//+/ }
printf '%b' "${url_encoded//%/\\x}"
}

SSH_AUTH=${TUNNEL_URI##ssh://} ; SSH_AUTH=${SSH_AUTH%@*}
SSH_USER=${SSH_AUTH%:*}
urldecode ${SSH_AUTH#*:} > /tmp/$$.key
chmod 600 /tmp/$$.key

SSH_ENDPOINT=${TUNNEL_URI##ssh://*@}
SSH_HOST=${SSH_ENDPOINT%:*}
SSH_PORT=${SSH_ENDPOINT#*:}
fi

function sigtermed()
{
if [[ $VERBOSE ]] ; then echo "forwarding SIGTERM to children" ; fi
kill -SIGTERM $CMDPID 2>/dev/null
(sleep 10 ; kill -0 $CMDPID ; if [[ $? ]]; then kill -9 $CMDPID ; fi ; ) & KILLER_PID=$!
wait $CMDPID 2>/dev/null
CMDEXIT=$?
kill $KILLER_PID 2>/dev/null
exit $CMDEXIT
}

function finish()
{
EXIT_CODE=$?
kill -9 $SSHPID 2>/dev/null
rm /tmp/$$.key
exit $EXIT_CODE
}

trap sigtermed SIGTERM SIGINT
trap finish EXIT

if [[ -z $DEV_MODE ]]
then
echo -n "Connecting tcp://localhost:${BACKEND_PORT}/ to ${FRONTEND_URI}... "
ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o TCPKeepAlive=yes -nN -i /tmp/$$.key -R $FRONTEND_PORT:127.0.2.1:$BACKEND_PORT -l $SSH_USER $SSH_HOST $KEY_CMD -p $SSH_PORT & SSHPID=$!
echo "done"
fi
echo -n "Running ${CMD}... "
RUPPELLS_SOCKETS_LOCAL_PORT=$BACKEND_PORT $CMD & CMDPID=$!
echo "done"

if [[ -z $DEV_MODE ]]
then
while $(kill -0 $CMDPID) && $(kill -0 $SSHPID); do
sleep 0.5
done
else
while $(kill -0 $CMDPID); do
sleep 0.5
done
fi

0 comments on commit c5913ac

Please sign in to comment.