test: Route tests for frame ancestors config

This commit is contained in:
Shrikant Sharat Kandula 2023-12-19 17:01:28 +05:30
parent ad8c0d8f82
commit ea4079da4b
6 changed files with 53 additions and 36 deletions

View File

@ -1,8 +1,7 @@
FROM node:lts-alpine FROM node:lts-alpine
RUN apk add --no-cache bash caddy \ RUN apk add --no-cache bash caddy \
&& apk add --no-cache hurl mkcert --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/ \ && apk add --no-cache hurl mkcert --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing/
&& mkcert -install
WORKDIR /code WORKDIR /code

View File

@ -16,7 +16,7 @@ GET https://custom-domain.com
HTTP 200 HTTP 200
[Asserts] [Asserts]
header "Server" not exists header "Server" not exists
certificate "Issuer" == "O = mkcert development CA, OU = root@ar, CN = mkcert root@ar" certificate "Issuer" contains "{{ca_issuer}}"
GET https://custom-domain.com/random/path GET https://custom-domain.com/random/path
HTTP 200 HTTP 200

View File

@ -1,6 +1,7 @@
GET http://localhost GET http://localhost
HTTP 200 HTTP 200
Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=utf-8
Content-Security-Policy: frame-ancestors {{frame_ancestors}}
[Asserts] [Asserts]
header "Server" not exists header "Server" not exists
body == "index.html body" body == "index.html body"
@ -8,6 +9,7 @@ body == "index.html body"
GET http://127.0.0.1 GET http://127.0.0.1
HTTP 200 HTTP 200
Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=utf-8
Content-Security-Policy: frame-ancestors {{frame_ancestors}}
[Asserts] [Asserts]
header "Server" not exists header "Server" not exists
body == "index.html body" body == "index.html body"
@ -15,6 +17,7 @@ body == "index.html body"
GET http://local.com GET http://local.com
HTTP 200 HTTP 200
Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=utf-8
Content-Security-Policy: frame-ancestors {{frame_ancestors}}
[Asserts] [Asserts]
header "Server" not exists header "Server" not exists
body == "index.html body" body == "index.html body"
@ -22,6 +25,7 @@ body == "index.html body"
GET http://localhost/some/non/handled/path GET http://localhost/some/non/handled/path
HTTP 200 HTTP 200
Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=utf-8
Content-Security-Policy: frame-ancestors {{frame_ancestors}}
[Asserts] [Asserts]
header "Server" not exists header "Server" not exists
body == "index.html body" body == "index.html body"
@ -29,6 +33,7 @@ body == "index.html body"
GET http://127.0.0.1/some/non/handled/path GET http://127.0.0.1/some/non/handled/path
HTTP 200 HTTP 200
Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=utf-8
Content-Security-Policy: frame-ancestors {{frame_ancestors}}
[Asserts] [Asserts]
header "Server" not exists header "Server" not exists
body == "index.html body" body == "index.html body"
@ -36,6 +41,7 @@ body == "index.html body"
GET http://local.com/some/non/handled/path GET http://local.com/some/non/handled/path
HTTP 200 HTTP 200
Content-Type: text/html; charset=utf-8 Content-Type: text/html; charset=utf-8
Content-Security-Policy: frame-ancestors {{frame_ancestors}}
[Asserts] [Asserts]
header "Server" not exists header "Server" not exists
body == "index.html body" body == "index.html body"

View File

@ -3,11 +3,14 @@
set -o errexit set -o errexit
set -o nounset set -o nounset
set -o pipefail set -o pipefail
#set -o xtrace
new-spec() { new-spec() {
echo "-----------" "$@" "-----------" echo "-----------" "$@" "-----------"
unset APPSMITH_CUSTOM_DOMAIN
# Unset influencing state
unset APPSMITH_CUSTOM_DOMAIN APPSMITH_ALLOWED_FRAME_ANCESTORS
# Clean custom certificates
mkdir -p /appsmith-stacks/ssl mkdir -p /appsmith-stacks/ssl
find /appsmith-stacks/ssl -type f -delete find /appsmith-stacks/ssl -type f -delete
} }
@ -59,8 +62,12 @@ caddy start --config "$TMP/Caddyfile" >> "$TMP/caddy.log" 2>&1
sleep 1 sleep 1
# Default values for Hurl variables
export HURL_frame_ancestors="'self'"
new-spec "Spec 1: With no custom domain"
# Run tests, scenario by scenario
new-spec "Spec 1: With no custom domain and no frame ancestors"
node /caddy-reconfigure.mjs node /caddy-reconfigure.mjs
reload-caddy reload-caddy
run-hurl common/*.hurl run-hurl common/*.hurl
@ -72,7 +79,8 @@ node /caddy-reconfigure.mjs
#sed -i '2i acme_ca https://acme-staging-v02.api.letsencrypt.org/directory' "$TMP/Caddyfile" #sed -i '2i acme_ca https://acme-staging-v02.api.letsencrypt.org/directory' "$TMP/Caddyfile"
sed -i '/https:\/\/'"$APPSMITH_CUSTOM_DOMAIN"' {$/a tls internal' "$TMP/Caddyfile" sed -i '/https:\/\/'"$APPSMITH_CUSTOM_DOMAIN"' {$/a tls internal' "$TMP/Caddyfile"
reload-caddy reload-caddy
run-hurl common/*.hurl common-https/*.hurl spec-2/*.hurl run-hurl --variable ca_issuer="CN = Caddy Local Authority - ECC Intermediate" \
common/*.hurl common-https/*.hurl
new-spec "Spec 3: With a custom domain, certs given in ssl folder" new-spec "Spec 3: With a custom domain, certs given in ssl folder"
@ -80,4 +88,35 @@ export APPSMITH_CUSTOM_DOMAIN=custom-domain.com
mkcert -cert-file "/appsmith-stacks/ssl/fullchain.pem" -key-file "/appsmith-stacks/ssl/privkey.pem" "$APPSMITH_CUSTOM_DOMAIN" mkcert -cert-file "/appsmith-stacks/ssl/fullchain.pem" -key-file "/appsmith-stacks/ssl/privkey.pem" "$APPSMITH_CUSTOM_DOMAIN"
node /caddy-reconfigure.mjs node /caddy-reconfigure.mjs
reload-caddy reload-caddy
run-hurl common/*.hurl spec-3/*.hurl run-hurl --variable ca_issuer="O = mkcert development CA" \
common/*.hurl common-https/*.hurl
new-spec "Spec 4: No custom domain, but certs present in ssl folder"
mkcert -cert-file "/appsmith-stacks/ssl/fullchain.pem" -key-file "/appsmith-stacks/ssl/privkey.pem" random-domain.com
node /caddy-reconfigure.mjs
reload-caddy
run-hurl common/*.hurl
new-spec "Spec 5: Empty custom domain, but certs present in ssl folder"
export APPSMITH_CUSTOM_DOMAIN=""
mkcert -cert-file "/appsmith-stacks/ssl/fullchain.pem" -key-file "/appsmith-stacks/ssl/privkey.pem" random-domain.com
node /caddy-reconfigure.mjs
reload-caddy
run-hurl common/*.hurl
new-spec "Spec 6: Custom frame ancestors"
export APPSMITH_ALLOWED_FRAME_ANCESTORS="something.com another.com"
node /caddy-reconfigure.mjs
reload-caddy
run-hurl --variable frame_ancestors="something.com another.com" \
common/*.hurl
new-spec "Spec 7: Empty frame ancestors"
export APPSMITH_ALLOWED_FRAME_ANCESTORS=""
node /caddy-reconfigure.mjs
reload-caddy
run-hurl common/*.hurl

View File

@ -4,7 +4,7 @@ set -o errexit
set -o nounset set -o nounset
loc="$(dirname "$0")" loc="$(dirname "$0")"
docker build -f "$loc/Dockerfile" --tag ar "$loc/.." #docker build -f "$loc/Dockerfile" --tag ar "$loc/.."
docker run \ docker run \
--name ar \ --name ar \
--rm \ --rm \

View File

@ -1,27 +0,0 @@
GET http://custom-domain.com
HTTP 302
Location: https://custom-domain.com/
[Asserts]
header "Server" not exists
GET http://custom-domain.com/random/path
HTTP 302
Location: https://custom-domain.com/random/path
[Asserts]
header "Server" not exists
GET https://custom-domain.com
HTTP 200
[Asserts]
header "Server" not exists
certificate "Issuer" == "CN = Caddy Local Authority - ECC Intermediate"
GET https://custom-domain.com/random/path
HTTP 200
[Asserts]
header "Server" not exists
GET https://custom-domain.com/static/x
HTTP 404
[Asserts]
header "Server" not exists