fix: stabilize console scrolling and protect administrator login

This commit is contained in:
2026-09-30 00:09:01 +08:00
parent 9a15406f76
commit f56f233704
32 changed files with 1308 additions and 86 deletions

View File

@@ -8,13 +8,14 @@ E2E_IMAGE=${ORBIT_E2E_IMAGE:-orbit:e2e}
E2E_SUFFIX=$$
E2E_MYSQL="orbit-e2e-mysql-$E2E_SUFFIX"
E2E_ORBIT="orbit-e2e-server-$E2E_SUFFIX"
E2E_ORBIT_SECOND="orbit-e2e-login-peer-$E2E_SUFFIX"
E2E_DIR=$(mktemp -d "${TMPDIR:-/tmp}/orbit-console-e2e.XXXXXX")
E2E_PASSWORD_FILE="$E2E_DIR/console-password"
E2E_CREDENTIALS_FILE="$E2E_DIR/credentials.json"
cleanup() {
"$E2E_DOCKER" stop "$E2E_ORBIT" "$E2E_MYSQL" >/dev/null 2>&1 || true
"$E2E_DOCKER" container rm "$E2E_ORBIT" "$E2E_MYSQL" >/dev/null 2>&1 || true
"$E2E_DOCKER" stop "$E2E_ORBIT_SECOND" "$E2E_ORBIT" "$E2E_MYSQL" >/dev/null 2>&1 || true
"$E2E_DOCKER" container rm "$E2E_ORBIT_SECOND" "$E2E_ORBIT" "$E2E_MYSQL" >/dev/null 2>&1 || true
if [ -d "$E2E_DIR/archive-job" ]; then
for e2e_artifact in "$E2E_DIR/archive-job"/.lock "$E2E_DIR/archive-job"/manifest.json "$E2E_DIR/archive-job"/batch-000001.json; do
if [ -f "$e2e_artifact" ]; then unlink "$e2e_artifact"; fi
@@ -115,6 +116,9 @@ printf '%s\n' "[4/8] start Orbit container"
--env ORBIT_MYSQL_DSN="$E2E_DSN" \
--env ORBIT_HTTP_ADDR=0.0.0.0:8080 \
--env ORBIT_CONSOLE_QUEUE_ID="$E2E_QUEUE" \
--env ORBIT_CONSOLE_LOGIN_FAILURE_LIMIT=3 \
--env ORBIT_CONSOLE_LOGIN_LOCK_DURATION=10s \
--env ORBIT_CONSOLE_LOGIN_RATE_WINDOW=2s \
--env ORBIT_CONSOLE_APPLICATION_ADMIN="$E2E_ADMIN" \
--env ORBIT_CREDENTIAL_KEY_FILE=/run/credential-keys.json \
--volume "$E2E_DIR/credential-keys.json:/run/credential-keys.json:ro" \
@@ -199,6 +203,22 @@ assert status == 200, status
print("console_login=ok protected_page=ok")
PY
printf '%s\n' "[login] cross-node rejection, restart and recovery"
"$E2E_DOCKER" run -d --name "$E2E_ORBIT_SECOND" --network bridge --link "$E2E_MYSQL:mysql" \
--env ORBIT_MYSQL_DSN="$E2E_DSN" --env ORBIT_HTTP_ADDR=0.0.0.0:8080 \
--env ORBIT_CONSOLE_APPLICATION_ADMIN="$E2E_ADMIN" \
--env ORBIT_CREDENTIAL_KEY_FILE=/run/credential-keys.json \
--env ORBIT_CONSOLE_LOGIN_FAILURE_LIMIT=3 \
--env ORBIT_CONSOLE_LOGIN_LOCK_DURATION=10s \
--env ORBIT_CONSOLE_LOGIN_RATE_WINDOW=2s \
--volume "$E2E_DIR/credential-keys.json:/run/credential-keys.json:ro" \
--publish 127.0.0.1::8080 "$E2E_IMAGE" >/dev/null
E2E_SECOND_PORT=$("$E2E_DOCKER" port "$E2E_ORBIT_SECOND" 8080/tcp | sed -n 's/.*:\([0-9][0-9]*\)$/\1/p' | head -n 1)
ORBIT_E2E_URL="$E2E_URL" ORBIT_E2E_SECOND_URL="http://127.0.0.1:$E2E_SECOND_PORT" \
ORBIT_E2E_SECOND_CONTAINER="$E2E_ORBIT_SECOND" ORBIT_E2E_USER="$E2E_ADMIN" \
ORBIT_E2E_PASSWORD_FILE="$E2E_PASSWORD_FILE" DOCKER="$E2E_DOCKER" python3 scripts/test-console-login.py
"$E2E_DOCKER" stop "$E2E_ORBIT_SECOND" >/dev/null
printf '%s\n' "[6/8] WebSocket Worker task execution"
(cd examples && ORBIT_URL="$E2E_URL" ORBIT_CREDENTIALS_FILE="$E2E_CREDENTIALS_FILE" \
"$E2E_GO" run ./worker) | tee "$E2E_DIR/worker.log"