gendesign/scripts/auth/remove_user.sh
Light1YT 7aced2a5e0 fix(auth): scripts/auth/*.sh — правильный SNIPPET path
Bug: `dirname` x2 от $0 даёт `<repo>/scripts`, не `<repo>` →
скрипт ищет snippet в `<repo>/scripts/caddy/...` (не существует)
вместо `<repo>/caddy/users.caddy.snippet`.

Discovered 2026-05-26 QA RBAC сессия:
> grep: /opt/gendesign/scripts/caddy/users.caddy.snippet: No such file
> ERROR: cannot find closing brace in /opt/gendesign/scripts/caddy/...

Все 3 скрипта (add_user.sh, list_users.sh, remove_user.sh) имели
одинаковый баг — теперь все используют explicit REPO_ROOT:

```bash
SCRIPT_DIR="$(cd "$(dirname "$(realpath "$0")")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
SNIPPET="$REPO_ROOT/caddy/users.caddy.snippet"
```

Так понятнее (explicit `../..` от script-dir) и устойчиво к любой
глубине перемещения файла.

PR #426 (2026-05-23) изначально создавал 11 юзеров через add_user.sh
— скрипт работал в той worktree-сессии (видимо запускался из dir
где realpath давал нужный depth, e.g. через `cd scripts/auth && bash add_user.sh`),
но после compaction worktree удалён, реальный run-context утерян.

Production runs 2026-05-23 → user1..user10 + admin + kopylov были добавлены.
После 2026-05-26 manual workflow (`awk ... > tmp && mv tmp; docker restart caddy`)
заменил bash скрипт; теперь скрипт снова работает.

Detail: vault [[Bug_AddUser_Sh_Snippet_Path_Fixed]].

Verified locally: `realpath` resolves к `/Users/anton/Птица/gendesign/caddy/users.caddy.snippet` (correct).
2026-05-26 13:39:01 +05:00

45 lines
1.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# remove_user.sh — удалить пользователя из caddy/users.caddy.snippet
# Usage: ./scripts/auth/remove_user.sh <username>
#
# НЕ коммитит изменения — это задача разработчика.
set -euo pipefail
# 3× dirname от $0 (.../scripts/auth/remove_user.sh) → repo root. Bug fix 2026-05-26.
SCRIPT_DIR="$(cd "$(dirname "$(realpath "$0")")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
SNIPPET="$REPO_ROOT/caddy/users.caddy.snippet"
usage() {
echo "Usage: $0 <username>" >&2
exit 1
}
[[ $# -lt 1 ]] && usage
USERNAME="$1"
# Validate username format
if ! [[ "$USERNAME" =~ ^[a-z][a-z0-9-]{2,30}$ ]]; then
echo "ERROR: invalid username '$USERNAME'. Must match ^[a-z][a-z0-9-]{2,30}$" >&2
exit 1
fi
# Check user exists
if ! grep -qP "^\s+${USERNAME}\s" "$SNIPPET" 2>/dev/null; then
echo "ERROR: user '$USERNAME' not found in $SNIPPET" >&2
exit 1
fi
# Remove the line with this username (safe in-place via temp file)
TMP="$(mktemp)"
trap 'rm -f "$TMP"' EXIT
grep -vP "^\s+${USERNAME}\s" "$SNIPPET" > "$TMP"
mv "$TMP" "$SNIPPET"
echo "Removed user '$USERNAME' from $SNIPPET"
echo ""
echo "Next steps:"
echo " 1. Commit caddy/users.caddy.snippet → PR → merge → GHA deploy"
echo " 2. After deploy, Caddy auto-reloads — user access revoked"