#!/bin/bash # Hot-patch wyrs-admin jar: MembershipPrice.packageName + package filter. # Does NOT touch JWT secrets / env files. set -euo pipefail ROOT=/tmp/price-patch JAR=/opt/wyrs-admin/remote-control-1.0.0.jar STAMP=$(date +%Y%m%d%H%M%S) BACKUP="${JAR}.bak.pricepkg.${STAMP}" WORK="$ROOT/work" OUT="$ROOT/classes-out" SRC="$ROOT/compile-src" rm -rf "$WORK" "$OUT" "$SRC" mkdir -p "$WORK" "$OUT" "$SRC/com/wyrs/admin/entity" \ "$SRC/com/wyrs/admin/service/config" \ "$SRC/com/wyrs/admin/util" \ "$SRC/com/wyrs/admin/web" cp "$ROOT/upload/MembershipPrice.java" "$SRC/com/wyrs/admin/entity/" cp "$ROOT/upload/PricesConfigService.java" "$SRC/com/wyrs/admin/service/config/" cp "$ROOT/upload/PackageNameContext.java" "$SRC/com/wyrs/admin/util/" cp "$ROOT/upload/PackageNameRequestFilter.java" "$SRC/com/wyrs/admin/web/" cd "$WORK" jar xf "$JAR" # classpath CP="BOOT-INF/classes" while IFS= read -r j; do CP="$CP:$j"; done < <(find BOOT-INF/lib -name '*.jar' | sort) echo "Compiling..." javac --release 17 -encoding UTF-8 -cp "$CP" -d "$OUT" \ "$SRC/com/wyrs/admin/entity/MembershipPrice.java" \ "$SRC/com/wyrs/admin/util/PackageNameContext.java" \ "$SRC/com/wyrs/admin/web/PackageNameRequestFilter.java" \ "$SRC/com/wyrs/admin/service/config/PricesConfigService.java" echo "Injecting classes into jar..." cp -a "$JAR" "$BACKUP" # remove old builder nested class if present; our builder is inner static rm -f BOOT-INF/classes/com/wyrs/admin/entity/MembershipPrice\$MembershipPriceBuilder.class mkdir -p BOOT-INF/classes/com/wyrs/admin/entity \ BOOT-INF/classes/com/wyrs/admin/service/config \ BOOT-INF/classes/com/wyrs/admin/util \ BOOT-INF/classes/com/wyrs/admin/web cp -a "$OUT/com/wyrs/admin/entity/"*.class BOOT-INF/classes/com/wyrs/admin/entity/ cp -a "$OUT/com/wyrs/admin/service/config/"*.class BOOT-INF/classes/com/wyrs/admin/service/config/ cp -a "$OUT/com/wyrs/admin/util/"*.class BOOT-INF/classes/com/wyrs/admin/util/ cp -a "$OUT/com/wyrs/admin/web/"*.class BOOT-INF/classes/com/wyrs/admin/web/ jar uf "$JAR" \ BOOT-INF/classes/com/wyrs/admin/entity/MembershipPrice.class \ BOOT-INF/classes/com/wyrs/admin/entity/MembershipPrice\$MembershipPriceBuilder.class \ BOOT-INF/classes/com/wyrs/admin/service/config/PricesConfigService.class \ BOOT-INF/classes/com/wyrs/admin/service/config/PricesConfigService\$1.class \ BOOT-INF/classes/com/wyrs/admin/util/PackageNameContext.class \ BOOT-INF/classes/com/wyrs/admin/web/PackageNameRequestFilter.class # PricesConfigService may produce $1 for TypeReference anon if [ -f BOOT-INF/classes/com/wyrs/admin/service/config/PricesConfigService\$1.class ]; then jar uf "$JAR" BOOT-INF/classes/com/wyrs/admin/service/config/PricesConfigService\$1.class fi echo "Restarting wyrs-admin (JWT env untouched)..." systemctl restart wyrs-admin sleep 8 systemctl is-active wyrs-admin journalctl -u wyrs-admin -n 40 --no-pager | tail -40 echo "BACKUP=$BACKUP" echo "DONE"