Files
sf-cli-wrapper/sf-web-logout
2025-08-29 15:37:05 +08:00

108 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
show_help() {
cat <<'EOF'
sf-web-logout — wrapper for `sf org logout`
USAGE:
sf-web-logout [-to <ORG_ALIAS_OR_USERNAME>] [-al] [-hp] [-ve]
OPTIONS:
-to Org alias or username to logout from (passes --target-org)
-al Logout from all authenticated orgs (passes --all)
-ve Enable verbose output
-hp Show this help
EXAMPLES:
1) Logout from specific org:
sf-web-logout -to DEMO
2) Logout from all orgs:
sf-web-logout -al
3) Logout with verbose output:
sf-web-logout -to NUSHUB-PROD -ve
EOF
}
TARGET_ORG=""
LOGOUT_ALL=0
VERBOSE=0
# If no args → show help + examples and exit without error
if [[ $# -eq 0 ]]; then
show_help
exit 0
fi
# Parse command line arguments using manual parsing for two-character options
while [[ $# -gt 0 ]]; do
case $1 in
-to)
TARGET_ORG="$2"
shift 2
;;
-al)
LOGOUT_ALL=1
shift
;;
-ve)
VERBOSE=1
shift
;;
-hp)
show_help
exit 0
;;
*)
echo "Unknown option: $1" >&2
echo
show_help
exit 1
;;
esac
done
# Validate that both target org and all aren't specified
if [[ -n "$TARGET_ORG" && $LOGOUT_ALL -eq 1 ]]; then
echo "Error: Cannot specify both -to and -al options" >&2
exit 1
fi
# Silent environment check - verify SF CLI is available
if ! command -v sf >/dev/null 2>&1; then
echo "❌ Salesforce CLI (sf) not found!"
echo
echo "Running environment check to help you get started..."
echo
# Try to find and run sf-check in the same directory as this script
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [[ -x "$SCRIPT_DIR/sf-check" ]]; then
"$SCRIPT_DIR/sf-check"
elif command -v sf-check >/dev/null 2>&1; then
sf-check
else
echo "sf-check not found. Please install the Salesforce CLI from:"
echo "https://developer.salesforce.com/tools/sfdxcli"
fi
exit 1
fi
CMD=(sf org logout)
[[ -n "$TARGET_ORG" ]] && CMD+=(--target-org "$TARGET_ORG")
[[ $LOGOUT_ALL -eq 1 ]] && CMD+=(--all)
if [[ $VERBOSE -eq 1 ]]; then
echo "🚪 Starting Logout Process"
echo "========================="
[[ -n "$TARGET_ORG" ]] && echo "Target org: $TARGET_ORG"
[[ $LOGOUT_ALL -eq 1 ]] && echo "Logout from: All authenticated orgs"
echo
fi
echo ">>> Running: ${CMD[*]}"
exec "${CMD[@]}"