diff --git a/plugins/domains/commands b/plugins/domains/commands index 771bebe412b..c479a63f3a0 100755 --- a/plugins/domains/commands +++ b/plugins/domains/commands @@ -17,6 +17,11 @@ RE_IPV6="${RE_IPV6}fe08:(:[0-9a-fA-F]{1,4}){2,2}%[0-9a-zA-Z]{1,}|" # TEST: f RE_IPV6="${RE_IPV6}::(ffff(:0{1,4}){0,1}:){0,1}${RE_IPV4}|" # TEST: ::255.255.255.255 ::ffff:255.255.255.255 ::ffff:0:255.255.255.255 (IPv4-mapped IPv6 addresses and IPv4-translated addresses) RE_IPV6="${RE_IPV6}([0-9a-fA-F]{1,4}:){1,4}:${RE_IPV4}" # TEST: 2001:db8:3:4::192.0.2.33 64:ff9b::192.0.2.33 +# Ensure the ip address continues to the end of the line +# Fixes using a wildcard dns service such as xip.io which allows for *..xip.io +RE_IPV4="${RE_IPV4}\$" +RE_IPV6="${RE_IPV6}\$" + case "$1" in domains) [[ -z $2 ]] && echo "Please specify an app to run the command on" && exit 1 diff --git a/plugins/nginx-vhosts/bind-external-ip b/plugins/nginx-vhosts/bind-external-ip index 422ddc2f0cf..40ba4c4e813 100755 --- a/plugins/nginx-vhosts/bind-external-ip +++ b/plugins/nginx-vhosts/bind-external-ip @@ -19,6 +19,12 @@ RE_IPV6="${RE_IPV6}fe08:(:[0-9a-fA-F]{1,4}){2,2}%[0-9a-zA-Z]{1,}|" # TEST: f RE_IPV6="${RE_IPV6}::(ffff(:0{1,4}){0,1}:){0,1}${RE_IPV4}|" # TEST: ::255.255.255.255 ::ffff:255.255.255.255 ::ffff:0:255.255.255.255 (IPv4-mapped IPv6 addresses and IPv4-translated addresses) RE_IPV6="${RE_IPV6}([0-9a-fA-F]{1,4}:){1,4}:${RE_IPV4}" # TEST: 2001:db8:3:4::192.0.2.33 64:ff9b::192.0.2.33 + +# Ensure the ip address continues to the end of the line +# Fixes using a wildcard dns service such as xip.io which allows for *..xip.io +RE_IPV4="${RE_IPV4}\$" +RE_IPV6="${RE_IPV6}\$" + [[ -f "$DOKKU_ROOT/VHOST" ]] && GLOBAL_VHOST=$(< "$DOKKU_ROOT/VHOST") if [[ -n "$NO_VHOST" ]]; then diff --git a/tests/unit/ports.bats b/tests/unit/ports.bats index 3612c5932cc..b0d3c728c12 100644 --- a/tests/unit/ports.bats +++ b/tests/unit/ports.bats @@ -116,3 +116,13 @@ teardown() { echo "status: "$status assert_success } + +@test "port exposure (xip.io style hostnames)" { + echo "127.0.0.1.xip.io" > "$DOKKU_ROOT/VHOST" + deploy_app + + run bash -c "response=\"$(curl -s -S my-cool-guy-test-app.127.0.0.1.xip.io)\"; echo \$response; test \"\$response\" == \"nodejs/express\"" + echo "output: "$output + echo "status: "$status + assert_success +}