test coverage improvements; mTLS enforcement; agent broke :(
This commit is contained in:
1 parent
921b760f80
commit
31b726b439
43 files changed
+3343
-80
No files matched your search
Executable
+139
@@ -0,0 +1,139 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eu -o pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
RUN_ARG="${1:-}"
|
||||
|
||||
if [ -n "${RUN_ARG}" ]; then
|
||||
if [ -d "${RUN_ARG}" ]; then
|
||||
RUN_DIR="${RUN_ARG}"
|
||||
RUN_ID="$(basename "${RUN_DIR}")"
|
||||
else
|
||||
RUN_ID="${RUN_ARG}"
|
||||
RUN_DIR="${ROOT_DIR}/evidence/runs/${RUN_ID}"
|
||||
fi
|
||||
else
|
||||
RUN_DIR="$(ls -1dt "${ROOT_DIR}"/evidence/runs/* 2>/dev/null | head -n 1)"
|
||||
RUN_ID="$(basename "${RUN_DIR}")"
|
||||
fi
|
||||
|
||||
if [ -z "${RUN_DIR:-}" ] || [ ! -d "${RUN_DIR}" ]; then
|
||||
echo "Run directory not found." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BASE_URL="${KEYWARDEN_SCREENSHOT_BASE_URL:-}"
|
||||
ADMIN_USER="${KEYWARDEN_ADMIN_USERNAME:-}"
|
||||
ADMIN_EMAIL="${KEYWARDEN_ADMIN_EMAIL:-}"
|
||||
ADMIN_PASS="${KEYWARDEN_ADMIN_PASSWORD:-}"
|
||||
SERVER_ID="${KEYWARDEN_SCREENSHOT_SERVER_ID:-}"
|
||||
|
||||
if [ -f "${ROOT_DIR}/.env" ]; then
|
||||
if [ -z "${BASE_URL}" ]; then
|
||||
DOMAIN_LINE="$(grep -m1 '^KEYWARDEN_DOMAIN=' "${ROOT_DIR}/.env" || true)"
|
||||
DOMAIN_VALUE="${DOMAIN_LINE#KEYWARDEN_DOMAIN=}"
|
||||
if [ -n "${DOMAIN_VALUE}" ]; then
|
||||
if printf "%s" "${DOMAIN_VALUE}" | grep -qE '^https?://'; then
|
||||
BASE_URL="${DOMAIN_VALUE}"
|
||||
else
|
||||
BASE_URL="https://${DOMAIN_VALUE}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if [ -z "${ADMIN_USER}" ]; then
|
||||
USER_LINE="$(grep -m1 '^KEYWARDEN_ADMIN_USERNAME=' "${ROOT_DIR}/.env" || true)"
|
||||
ADMIN_USER="${USER_LINE#KEYWARDEN_ADMIN_USERNAME=}"
|
||||
fi
|
||||
if [ -z "${ADMIN_EMAIL}" ]; then
|
||||
EMAIL_LINE="$(grep -m1 '^KEYWARDEN_ADMIN_EMAIL=' "${ROOT_DIR}/.env" || true)"
|
||||
ADMIN_EMAIL="${EMAIL_LINE#KEYWARDEN_ADMIN_EMAIL=}"
|
||||
fi
|
||||
if [ -z "${ADMIN_PASS}" ]; then
|
||||
PASS_LINE="$(grep -m1 '^KEYWARDEN_ADMIN_PASSWORD=' "${ROOT_DIR}/.env" || true)"
|
||||
ADMIN_PASS="${PASS_LINE#KEYWARDEN_ADMIN_PASSWORD=}"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "${BASE_URL}" ]; then
|
||||
BASE_URL="https://localhost"
|
||||
fi
|
||||
if [ -z "${ADMIN_USER}" ]; then
|
||||
ADMIN_USER="admin"
|
||||
fi
|
||||
if [ -z "${ADMIN_EMAIL}" ]; then
|
||||
ADMIN_EMAIL="admin@example.com"
|
||||
fi
|
||||
if [ -z "${ADMIN_PASS}" ]; then
|
||||
echo "Missing KEYWARDEN_ADMIN_PASSWORD (env or .env)." >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ -z "${SERVER_ID}" ] && [ -f "${RUN_DIR}/logs/agent-endpoint-status-counts.txt" ]; then
|
||||
SERVER_ID="$(
|
||||
sed -n 's#.*servers/\([0-9][0-9]*\)/.*#\1#p' "${RUN_DIR}/logs/agent-endpoint-status-counts.txt" \
|
||||
| head -n 1
|
||||
)"
|
||||
fi
|
||||
|
||||
CONTAINER_TOOL_DIR="/tmp/keywarden-evidence-tools"
|
||||
CONTAINER_OUT_DIR="/app/.evidence-screens/${RUN_ID}"
|
||||
HOST_TMP_OUT_DIR="${ROOT_DIR}/app/.evidence-screens/${RUN_ID}"
|
||||
HOST_FINAL_OUT_DIR="${RUN_DIR}/screenshots"
|
||||
|
||||
docker compose exec -T \
|
||||
-e KEYWARDEN_SCREENSHOT_BASE_URL="${BASE_URL}" \
|
||||
-e KEYWARDEN_ADMIN_USERNAME="${ADMIN_USER}" \
|
||||
-e KEYWARDEN_ADMIN_EMAIL="${ADMIN_EMAIL}" \
|
||||
-e KEYWARDEN_ADMIN_PASSWORD="${ADMIN_PASS}" \
|
||||
-e KEYWARDEN_SCREENSHOT_SERVER_ID="${SERVER_ID}" \
|
||||
keywarden sh -lc "
|
||||
set -eu
|
||||
mkdir -p '${CONTAINER_TOOL_DIR}' '${CONTAINER_OUT_DIR}'
|
||||
if [ ! -f '${CONTAINER_TOOL_DIR}/package.json' ]; then
|
||||
cd '${CONTAINER_TOOL_DIR}'
|
||||
npm init -y >/dev/null 2>&1
|
||||
npm pkg set private=true >/dev/null 2>&1
|
||||
npm pkg set type=module >/dev/null 2>&1
|
||||
fi
|
||||
if [ ! -d '${CONTAINER_TOOL_DIR}/node_modules/playwright' ]; then
|
||||
cd '${CONTAINER_TOOL_DIR}'
|
||||
npm install --silent playwright@1.53.0
|
||||
fi
|
||||
ln -sfn '${CONTAINER_TOOL_DIR}/node_modules' /app/scripts/node_modules
|
||||
cd '${CONTAINER_TOOL_DIR}'
|
||||
if [ ! -f '${CONTAINER_TOOL_DIR}/.deps-ok' ]; then
|
||||
if ! npx playwright install-deps chromium >/dev/null 2>&1; then
|
||||
apt-get update >/dev/null
|
||||
apt-get install -y --no-install-recommends \
|
||||
libglib2.0-0 \
|
||||
libdbus-1-3 \
|
||||
libatk1.0-0 \
|
||||
libatk-bridge2.0-0 \
|
||||
libatspi2.0-0 \
|
||||
libcups2 \
|
||||
libxcb1 \
|
||||
libxkbcommon0 \
|
||||
libx11-6 \
|
||||
libxcomposite1 \
|
||||
libxdamage1 \
|
||||
libxext6 \
|
||||
libxfixes3 \
|
||||
libxrandr2 \
|
||||
libgbm1 \
|
||||
libcairo2 \
|
||||
libpango-1.0-0 \
|
||||
libasound2 >/dev/null
|
||||
fi
|
||||
touch '${CONTAINER_TOOL_DIR}/.deps-ok'
|
||||
fi
|
||||
npx playwright install chromium >/dev/null
|
||||
cd /app
|
||||
python manage.py shell -c \"import os; from django.contrib.auth import get_user_model; U=get_user_model(); username=os.environ['KEYWARDEN_ADMIN_USERNAME']; email=os.environ.get('KEYWARDEN_ADMIN_EMAIL','admin@example.com'); password=os.environ['KEYWARDEN_ADMIN_PASSWORD']; user, created = U.objects.get_or_create(username=username, defaults={'email': email}); user.email = ((user.email or email) if created else user.email); user.is_active=True; user.is_staff=True; user.is_superuser=True; user.set_password(password); user.save(); print('ensured-screenshot-admin', user.username, 'created=' + str(created))\"
|
||||
node /app/scripts/capture_ui_screenshots.mjs '${CONTAINER_OUT_DIR}'
|
||||
"
|
||||
|
||||
rm -rf "${HOST_FINAL_OUT_DIR}"
|
||||
mkdir -p "${HOST_FINAL_OUT_DIR}"
|
||||
cp -R "${HOST_TMP_OUT_DIR}/." "${HOST_FINAL_OUT_DIR}/"
|
||||
ls -1 "${HOST_FINAL_OUT_DIR}" > "${HOST_FINAL_OUT_DIR}/listing.txt"
|
||||
|
||||
echo "Screenshots captured for run ${RUN_ID}: ${HOST_FINAL_OUT_DIR}"
|
||||
Reference in new issue
Block a user