Skip to content

Instantly share code, notes, and snippets.

@megahertz
Created February 28, 2018 04:10
Show Gist options
  • Save megahertz/c46136a77c4d42e285ec5a2f32215903 to your computer and use it in GitHub Desktop.
Save megahertz/c46136a77c4d42e285ec5a2f32215903 to your computer and use it in GitHub Desktop.
Parse MongoDB connection string in bash
#!/usr/bin/env bash
set -e
# Usage: parse_mongo_url URL
# It sets the following variables:
# MONGO_HOST
# MONGO_PORT
# MONGO_DATABASE
# MONGO_USER
# MONGO_PASSWORD
function parse_mongo_url {
local MONGO_URL="$1"
local AUTH
local HOST_PORT
local PROTO
local URL
PROTO="$(echo ${MONGO_URL} | grep :// | sed -e's,^\(.*://\).*,\1,g')"
URL="${MONGO_URL/${PROTO}/}"
AUTH="$(echo ${URL} | grep @ | rev | cut -d@ -f2- | rev)"
if [ -n ${AUTH} ]; then
URL="$(echo ${URL} | rev | cut -d@ -f1 | rev)"
fi
MONGO_PASSWORD="$(echo ${AUTH} | grep : | cut -d: -f2-)"
if [ -n "${MONGO_PASSWORD}" ]; then
MONGO_USER="$(echo ${AUTH} | grep : | cut -d: -f1)"
else
MONGO_USER=${AUTH}
fi
HOST_PORT="$(echo ${URL} | cut -d/ -f1)"
MONGO_PORT="$(echo ${HOST_PORT} | grep : | cut -d: -f2)"
if [ -n "${MONGO_PORT}" ]; then
MONGO_HOST="$(echo ${HOST_PORT} | grep : | cut -d: -f1)"
else
MONGO_PORT=27017
MONGO_HOST="${HOST_PORT}"
fi
MONGO_DATABASE="$(echo ${URL} | grep / | cut -d/ -f2-)"
}
#!/usr/bin/env bash
set -e
function check_eq {
local EXPECTED=$1
local ACTUAL=$2
local PREFIX=$3
if [ "${EXPECTED}" != "${ACTUAL}" ]; then
echo "${PREFIX}Check error. Expected: [${EXPECTED}], Actual: [${ACTUAL}]"
exit 2
fi
}
function check_mongo_url {
local MONGO_URL=$1
local TEST_USER=$2
local TEST_PASSWORD=$3
local TEST_HOST=$4
local TEST_PORT=$5
local TEST_DATABASE=$6
local ERROR_PREFIX=" ✗ parse_mongo_url ${MONGO_URL}"
parse_mongo_url ${MONGO_URL}
check_eq "${TEST_USER}" "${MONGO_USER}" "${ERROR_PREFIX} "
check_eq "${TEST_PASSWORD}" "${MONGO_PASSWORD}" "${ERROR_PREFIX} "
check_eq "${TEST_HOST}" "${MONGO_HOST}" "${ERROR_PREFIX} "
check_eq "${TEST_PORT}" "${MONGO_PORT}" "${ERROR_PREFIX} "
check_eq "${TEST_DATABASE}" "${MONGO_DATABASE}" "${ERROR_PREFIX} "
echo " ✓ parse_mongo_url ${MONGO_URL}"
}
source mongo-url.sh
check_mongo_url "" "" "" "" "27017" ""
check_mongo_url "mongo" "" "" "mongo" "27017" ""
check_mongo_url "mongodb://mongo" "" "" "mongo" "27017" ""
check_mongo_url "mongodb://mongo:27018/" "" "" "mongo" "27018" ""
check_mongo_url "mongodb://user@mongo" "user" "" "mongo" "27017" ""
check_mongo_url "mongodb://user:pa:@ss@mongo" "user" "pa:@ss" "mongo" "27017" ""
check_mongo_url "mongodb://user@mongo/db" "user" "" "mongo" "27017" "db"
echo "All tests passed"
#!/usr/bin/env bash
source mongo-url.sh
parse_mongo_url "mongodb://user:password@myhost.com/database
echo "Host: ${MONGO_HOST}"
echo "Port: ${MONGO_PORT}"
echo "User: ${MONGO_USER}"
echo "Password: ${MONGO_PASSWORD}"
echo "Database: ${MONGO_HOST}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment