register-judger.sh 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/bin/sh
  2. #
  3. # Register (or update) this judger in the web database. Run it on the *host*,
  4. # after `docker compose up`, whenever JUDGER_PASSWORD / JUDGER_SOCKET_* change.
  5. #
  6. # ./judger/register-judger.sh
  7. # ./judger/register-judger.sh main_judger 'my-secret' uoj-judger
  8. #
  9. # It is an upsert, so it is safe to re-run.
  10. #
  11. # judger_name must equal JUDGER_NAME in the judger container (see
  12. # docker-compose.yml); ip is what /judge/sync-judge-client dials, so for
  13. # compose that is the service name `uoj-judger`.
  14. set -eu
  15. JUDGER_NAME="${1:-${JUDGER_NAME:-main_judger}}"
  16. JUDGER_PASSWORD="${2:-${JUDGER_PASSWORD:-_judger_password_}}"
  17. JUDGER_IP="${3:-${JUDGER_IP:-uoj-judger}}"
  18. DB_CONTAINER="${DB_CONTAINER:-uoj-db}"
  19. DB_NAME="${DATABASE_NAME:-app_uoj233}"
  20. DB_USER="${DATABASE_USER:-root}"
  21. DB_PASSWORD="${DATABASE_PASSWORD:-root}"
  22. # Keep passwords free of single quotes: they are embedded in SQL below.
  23. case "$JUDGER_NAME$JUDGER_PASSWORD$JUDGER_IP" in
  24. *"'"*)
  25. echo "ERROR: passwords/names must not contain a single quote" >&2
  26. exit 1
  27. ;;
  28. esac
  29. docker exec -i "$DB_CONTAINER" \
  30. mysql -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" <<SQL
  31. insert into judger_info (judger_name, password, ip)
  32. values ('$JUDGER_NAME', '$JUDGER_PASSWORD', '$JUDGER_IP')
  33. on duplicate key update password = values(password), ip = values(ip);
  34. select judger_name, ip from judger_info;
  35. SQL