Add "bash3boilerplate" from "https://git.knownelement.com/ExternalVendorCode/bash3boilerplate.git@main"
git-vendor-name: bash3boilerplate git-vendor-dir: vendor/git.knownelement.com/ExternalVendorCode/bash3boilerplate git-vendor-repository: https://git.knownelement.com/ExternalVendorCode/bash3boilerplate.git git-vendor-ref: main
This commit is contained in:
84
vendor/git.knownelement.com/ExternalVendorCode/bash3boilerplate/src/parse_url.sh
generated
vendored
Normal file
84
vendor/git.knownelement.com/ExternalVendorCode/bash3boilerplate/src/parse_url.sh
generated
vendored
Normal file
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env bash
|
||||
# BASH3 Boilerplate: parse_url
|
||||
#
|
||||
# This file:
|
||||
#
|
||||
# - Takes a URL and parses protocol, user, pass, host, port, path.
|
||||
#
|
||||
# Based on:
|
||||
#
|
||||
# - http://stackoverflow.com/a/6174447/151666
|
||||
#
|
||||
# Usage as a function:
|
||||
#
|
||||
# source parse_url.sh
|
||||
# parse_url 'http://johndoe:abc123@example.com:8080/index.html' pass
|
||||
#
|
||||
# Usage as a command:
|
||||
#
|
||||
# parse_url.sh 'http://johndoe:abc123@example.com:8080/index.html'
|
||||
#
|
||||
# Based on a template by BASH3 Boilerplate vv2.7.2
|
||||
# http://bash3boilerplate.sh/#authors
|
||||
#
|
||||
# The MIT License (MIT)
|
||||
# Copyright (c) 2013 Kevin van Zonneveld and contributors
|
||||
# You are not obligated to bundle the LICENSE file with your b3bp projects as long
|
||||
# as you leave these references intact in the header comments of your source files.
|
||||
|
||||
function parse_url() {
|
||||
local parse="${1}"
|
||||
local need="${2:-}"
|
||||
|
||||
local proto
|
||||
local url
|
||||
local userpass
|
||||
local user
|
||||
local pass
|
||||
local hostport
|
||||
local host
|
||||
local port
|
||||
local path
|
||||
|
||||
proto="$(echo "${parse}" | grep :// | sed -e's,^\(.*://\).*,\1,g')"
|
||||
url="${parse/${proto}/}"
|
||||
userpass="$(echo "${url}" | grep @ | cut -d@ -f1)"
|
||||
user="$(echo "${userpass}" | grep : | cut -d: -f1)"
|
||||
pass="$(echo "${userpass}" | grep : | cut -d: -f2)"
|
||||
hostport="$(echo "${url/${userpass}@/}" | cut -d/ -f1)"
|
||||
host="$(echo "${hostport}" | grep : | cut -d: -f1)"
|
||||
port="$(echo "${hostport}" | grep : | cut -d: -f2)"
|
||||
path="$(echo "${url}" | grep / | cut -d/ -f2-)"
|
||||
|
||||
[[ ! "${user}" ]] && user="${userpass}"
|
||||
[[ ! "${host}" ]] && host="${hostport}"
|
||||
if [[ ! "${port}" ]]; then
|
||||
[[ "${proto}" = "http://" ]] && port="80"
|
||||
[[ "${proto}" = "https://" ]] && port="443"
|
||||
[[ "${proto}" = "mysql://" ]] && port="3306"
|
||||
[[ "${proto}" = "redis://" ]] && port="6379"
|
||||
fi
|
||||
|
||||
if [[ "${need}" ]]; then
|
||||
echo "${!need}"
|
||||
else
|
||||
echo ""
|
||||
echo " Use second argument to return just 1 variable."
|
||||
echo " parse_url() demo: "
|
||||
echo ""
|
||||
echo " proto: ${proto}"
|
||||
echo " user: ${user}"
|
||||
echo " pass: ${pass}"
|
||||
echo " host: ${host}"
|
||||
echo " port: ${port}"
|
||||
echo " path: ${path}"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ "${BASH_SOURCE[0]}" != "${0}" ]]; then
|
||||
export -f parse_url
|
||||
else
|
||||
parse_url "${@}"
|
||||
exit ${?}
|
||||
fi
|
Reference in New Issue
Block a user