#!/bin/bash set -euo pipefail source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh" tmpdir=$(mktemp -d) trap 'rm -rf "$tmpdir"' EXIT home="$tmpdir/home" mkdir -p "$home/.local/share/applications" install_webapp() { HOME="$home" "$ROOT/bin/omarchy-webapp-install" "$@" } desktop_for() { printf '%s' "$home/.local/share/applications/$1.desktop" } if install_webapp "Example" "https://example.com" "webapp" >"$tmpdir/out" 2>"$tmpdir/err"; then : else fail "webapp install accepts an https URL" "$(cat "$tmpdir/err")" fi desktop=$(desktop_for Example) [[ -f $desktop ]] || fail "webapp install writes a desktop file" grep -Fxq 'Name=Example' "$desktop" || fail "webapp install writes the app name" grep -Fxq 'Exec=omarchy-launch-webapp https://example.com' "$desktop" || fail "webapp install launches the https URL" "$(cat "$desktop")" pass "webapp install writes an https desktop entry" if install_webapp "Plain" "example.org/app" "webapp" >"$tmpdir/out" 2>"$tmpdir/err"; then : else fail "webapp install prefixes a schemeless URL with https" "$(cat "$tmpdir/err")" fi grep -Fxq 'Exec=omarchy-launch-webapp https://example.org/app' "$(desktop_for Plain)" || fail "webapp install stores the prefixed https URL" "$(cat "$(desktop_for Plain)")" pass "webapp install prefixes a schemeless URL with https" if install_webapp "Local" "https://localhost:47990" "webapp" "omarchy-launch-webapp https://localhost:47990 --ignore-certificate-errors" >"$tmpdir/out" 2>"$tmpdir/err"; then : else fail "webapp install keeps a custom https exec" "$(cat "$tmpdir/err")" fi grep -Fxq 'Exec=omarchy-launch-webapp https://localhost:47990 --ignore-certificate-errors' "$(desktop_for Local)" || fail "webapp install writes the custom exec" "$(cat "$(desktop_for Local)")" pass "webapp install keeps a custom https exec" for url in "javascript:alert(1)" "file:///etc/passwd" "data:text/html,hi" "ftp://example.com" "ext://x"; do if install_webapp "Bad" "$url" "webapp" >"$tmpdir/out" 2>"$tmpdir/err"; then fail "webapp install refuses '$url'" fi grep -Fq 'must be http or https' "$tmpdir/err" || fail "webapp install names the scheme refusal for '$url'" "$(cat "$tmpdir/err")" [[ ! -e $(desktop_for Bad) ]] || fail "webapp install does not write a desktop file for '$url'" done pass "webapp install refuses non-http(s) URLs"