Files
webterm/update.sh
T

129 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
set -e
cd "$(dirname "$0")"
SERVICE_FILE="$HOME/.config/systemd/user/webterm.service"
DEFAULT_USERNAME="izackp"
DEFAULT_TTL_SECONDS="86400"
UPDATE_AUTH_PASSWORD=0
if [ ! -f "$SERVICE_FILE" ]; then
echo "Missing service file: $SERVICE_FILE" >&2
exit 1
fi
while getopts ":p" opt; do
case "$opt" in
p)
UPDATE_AUTH_PASSWORD=1
;;
*)
echo "Usage: $0 [-p]" >&2
exit 1
;;
esac
done
shift $((OPTIND - 1))
if [ "$UPDATE_AUTH_PASSWORD" -eq 1 ]; then
echo "Enter password for webterm login."
read -rsp "Password for $DEFAULT_USERNAME: " WEBTERM_PASSWORD
echo
if [ -z "$WEBTERM_PASSWORD" ]; then
echo "Password cannot be empty." >&2
exit 1
fi
fi
CURRENT_SECRET="$(sed -n 's/^Environment=WEBTERM_AUTH_COOKIE_SECRET=//p' "$SERVICE_FILE" | tail -n 1)"
if [ -z "$CURRENT_SECRET" ]; then
CURRENT_SECRET="$(openssl rand -hex 32)"
fi
if [ "$UPDATE_AUTH_PASSWORD" -eq 1 ]; then
TMP_SERVICE="$(mktemp)"
awk '
BEGIN {
skip["Environment=WEBTERM_AUTH_USERNAME"]=1
skip["Environment=WEBTERM_AUTH_PASSWORD"]=1
skip["Environment=WEBTERM_AUTH_COOKIE_SECRET"]=1
skip["Environment=WEBTERM_AUTH_SESSION_TTL_SECONDS"]=1
}
{
for (prefix in skip) {
if (index($0, prefix) == 1) next
}
print
}
' "$SERVICE_FILE" > "$TMP_SERVICE"
python3 - "$TMP_SERVICE" "$WEBTERM_PASSWORD" "$CURRENT_SECRET" "$DEFAULT_TTL_SECONDS" <<'PYEOF'
import sys
from pathlib import Path
import shlex
path = Path(sys.argv[1])
username = "izackp"
password = sys.argv[2]
secret = sys.argv[3]
ttl = sys.argv[4]
lines = path.read_text().splitlines()
insert = [
f"Environment=WEBTERM_AUTH_USERNAME={shlex.quote(username)}",
f"Environment=WEBTERM_AUTH_PASSWORD={shlex.quote(password)}",
f"Environment=WEBTERM_AUTH_COOKIE_SECRET={shlex.quote(secret)}",
f"Environment=WEBTERM_AUTH_SESSION_TTL_SECONDS={shlex.quote(ttl)}",
]
out = []
inserted = False
for line in lines:
out.append(line)
if line.strip() == "[Service]":
out.extend(insert)
inserted = True
if not inserted:
raise SystemExit("Could not find [Service] section in webterm.service")
path.write_text("\n".join(out) + "\n")
PYEOF
mv "$TMP_SERVICE" "$SERVICE_FILE"
fi
echo "Building frontend..."
make build
echo "Building Go binary..."
make build-go
echo "Installing binary..."
mkdir -p ~/go/bin
tmp_target=~/go/bin/webterm.new
cp bin/webterm "$tmp_target"
chmod +x "$tmp_target"
mv "$tmp_target" ~/go/bin/webterm
echo "Reloading user systemd config..."
systemctl --user daemon-reload
echo "Restarting service..."
systemctl --user restart webterm.service
echo "Done. Status:"
systemctl --user status webterm.service --no-pager
echo
echo "Listening sockets:"
ss -ltnp | grep ':8080' || true
echo
echo "Reachable URLs:"
echo " Local: http://127.0.0.1:8080/"
hostname -I 2>/dev/null | tr ' ' '\n' | sed '/^$/d' | while read -r ip; do
echo " LAN: http://$ip:8080/"
done