#!/bin/bash set -euo pipefail PLUGIN_DIR="$(cd "$(dirname "$0")/.." && pwd)" ARCHIVE="${1:-$(cd "$PLUGIN_DIR/.." && pwd)/1.2.10/alt-mysql.tar.gz}" fail() { echo "FAIL: $*" >&2 exit 1 } [ -s "$ARCHIVE" ] || fail "archive does not exist or is empty: $ARCHIVE" LIST="$(tar -tzf "$ARCHIVE")" printf '%s\n' "$LIST" | grep -Eq '^(\./)?plugin\.conf$' \ || fail "archive does not contain plugin.conf at tar root" if printf '%s\n' "$LIST" | grep -Eq '^(\./)?alt-mysql/'; then fail "archive contains parent alt-mysql directory" fi if printf '%s\n' "$LIST" | grep -Eiq 'postgres|postgresql|pgsql|phppgadmin'; then fail "archive contains PostgreSQL/phpPgAdmin leftovers" fi if printf '%s\n' "$LIST" | grep -Eq '^(\./)?tests/'; then fail "archive contains local test suite" fi if printf '%s\n' "$LIST" | grep -Eq '(^|/)\._[^/]+$|(^|/)\.DS_Store$|__MACOSX'; then fail "archive contains macOS AppleDouble or Finder metadata" fi printf '%s\n' "$LIST" | grep -Eq '^(\./)?scripts/setup/phpmyadmin_private_install\.sh$' \ || fail "archive does not contain private phpMyAdmin installer" printf '%s\n' "$LIST" | grep -Eq '^(\./)?scripts/install_db\.sh$' \ || fail "archive does not contain install_db.sh at scripts/" if printf '%s\n' "$LIST" | grep -Eq '(^|/)install-alt-mariadb\.sh$'; then fail "archive contains old install-alt-mariadb.sh" fi CONF="$(tar -xOzf "$ARCHIVE" ./plugin.conf 2>/dev/null || tar -xOzf "$ARCHIVE" plugin.conf)" printf '%s\n' "$CONF" | grep -Fxq "name=alt-mysql" || fail "archive plugin name is not alt-mysql" printf '%s\n' "$CONF" | grep -Fxq "id=alt-mysql" || fail "archive plugin id is not alt-mysql" printf '%s\n' "$CONF" | grep -Fxq "version=1.2.10" || fail "archive plugin version is not 1.2.10" SETTINGS="$(tar -xOzf "$ARCHIVE" ./plugin-settings.conf 2>/dev/null || tar -xOzf "$ARCHIVE" plugin-settings.conf)" printf '%s\n' "$SETTINGS" | grep -Fxq "PHPMYADMIN_INSTALL_DIR=/var/www/html/alt-mysql-phpmyadmin" \ || fail "archive settings do not point to private phpMyAdmin install dir" printf '%s\n' "$SETTINGS" | grep -Fxq "PHPMYADMIN_URL_PATH=/alt-mysql-phpmyadmin" \ || fail "archive settings do not point to private phpMyAdmin URL" printf '%s\n' "$SETTINGS" | grep -Fxq "always_enabled=1" \ || fail "archive settings do not enable always_enabled by default" INSTALL_SCRIPT="$(tar -xOzf "$ARCHIVE" ./scripts/install.sh 2>/dev/null || tar -xOzf "$ARCHIVE" scripts/install.sh)" printf '%s\n' "$INSTALL_SCRIPT" | grep -Fq 'always_enabled()' \ || fail "archive install script does not read always_enabled" printf '%s\n' "$INSTALL_SCRIPT" | grep -Fq 'if always_enabled; then' \ || fail "archive install script does not hide custom package fields when always_enabled is on" DB_INSTALLER="$(tar -xOzf "$ARCHIVE" ./scripts/install_db.sh 2>/dev/null || tar -xOzf "$ARCHIVE" scripts/install_db.sh)" printf '%s\n' "$DB_INSTALLER" | grep -Fq 'apply_cli_args "$@"' \ || fail "archive install_db.sh does not apply positional arguments" printf '%s\n' "$DB_INSTALLER" | grep -Fq 'MARIADB_VERSION="$1"' \ || fail "archive install_db.sh does not accept MariaDB version as first argument" printf '%s\n' "$DB_INSTALLER" | grep -Fq 'PORT="$2"' \ || fail "archive install_db.sh does not accept TCP port as second argument" printf '%s\n' "$DB_INSTALLER" | grep -Fq 'rerun_plugin_install_if_available' \ || fail "archive install_db.sh does not refresh plugin install.sh after DB setup" printf '%s\n' "$DB_INSTALLER" | grep -Fq 'SKIP_PLUGIN_INSTALL_REFRESH' \ || fail "archive install_db.sh does not expose a test/maintenance escape hatch for plugin refresh" printf '%s\n' "$DB_INSTALLER" | grep -Fq '[[ $# -eq 0 ]]' \ || fail "archive install_db.sh does not show usage when called without arguments" printf '%s\n' "$DB_INSTALLER" | grep -Fq ' ' \ || fail "archive install_db.sh usage does not require version and port" INSTALLER="$(tar -xOzf "$ARCHIVE" ./scripts/setup/phpmyadmin_install.sh 2>/dev/null || tar -xOzf "$ARCHIVE" scripts/setup/phpmyadmin_install.sh)" printf '%s\n' "$INSTALLER" | grep -Fq "\$cfg['Servers'][\$i]['SignonURL'] = da_mysql_phpmyadmin_signon_url(\$runtimeConfig);" \ || fail "archive phpMyAdmin installer does not configure SignonURL" printf '%s\n' "$INSTALLER" | grep -Fq 'SIGNON_URL_PAGE="${PHPMYADMIN_PRIVATE_DIR}/da_login.php"' \ || fail "archive phpMyAdmin installer does not create SignonURL page" printf '%s\n' "$INSTALLER" | grep -Fq 'DA_MYSQL_PHPMYADMIN_AUTH' \ || fail "archive phpMyAdmin installer does not create ticket-based da_login.php" printf '%s\n' "$INSTALLER" | grep -Fq 'da_mysql_signon_read_auth' \ || fail "archive phpMyAdmin installer does not isolate phpMyAdmin and SSO sessions" OPEN_HANDLER="$(tar -xOzf "$ARCHIVE" ./exec/handlers/open_phpmyadmin.php 2>/dev/null || tar -xOzf "$ARCHIVE" exec/handlers/open_phpmyadmin.php)" printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'phpmyadmin_health_check.sh' \ || fail "archive open phpMyAdmin handler does not run health check" printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'phpmyadmin_repair.sh' \ || fail "archive open phpMyAdmin handler does not run repair before redirect" printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'HTTP/1.1 302 Found' \ || fail "archive open phpMyAdmin raw handler does not emit an HTTP redirect" printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'Location: ' \ || fail "archive open phpMyAdmin raw handler does not emit a Location header" if printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'meta http-equiv="refresh"'; then fail "archive open phpMyAdmin raw handler still uses meta refresh" fi if printf '%s\n' "$OPEN_HANDLER" | grep -Fq 'Set-Cookie: '; then fail "archive open phpMyAdmin handler still tries to pass SSO through DirectAdmin PHP session cookie" fi SSO_CLASS="$(tar -xOzf "$ARCHIVE" ./exec/lib/PhpMyAdminSso.php 2>/dev/null || tar -xOzf "$ARCHIVE" exec/lib/PhpMyAdminSso.php)" printf '%s\n' "$SSO_CLASS" | grep -Fq 'writeLoginTicket' \ || fail "archive phpMyAdmin SSO class does not write login tickets" printf '%s\n' "$SSO_CLASS" | grep -Fq '/da_login.php?' \ || fail "archive phpMyAdmin SSO class does not target da_login.php ticket flow" echo "package_archive_test: OK"