#!/bin/bash
# /usr/local/bin/frp-update-server.sh

CONFIG_FILE="/etc/frp/vastfrpc.ini"
FRPC_SERVICE="vastfrpc"                          # frp systemd 服务名，按实际调整
SERVER_LIST_URL="https://name.bitheart.org/pubip.txt"

# 获取新地址（假设返回纯 IP）
NEW_ADDR=$(curl -s --connect-timeout 5 --max-time 10 "$SERVER_LIST_URL")

# 校验获取结果
if [ -z "$NEW_ADDR" ]; then
    echo "[$(date)] ERROR: 获取 server 地址失败" | tee -a /var/log/frp-update.log
    exit 1
fi

# 简单校验是否为合法 IP 或域名格式
if ! echo "$NEW_ADDR" | grep -qE '^[a-zA-Z0-9][-a-zA-Z0-9.]*[a-zA-Z0-9]$'; then
    echo "[$(date)] ERROR: 获取到的地址格式异常: $NEW_ADDR" | tee -a /var/log/frp-update.log
    exit 1
fi

# 读取当前配置中的 server_addr
CURRENT_ADDR=$(grep -oP '(?<=^server_addr = ).*' "$CONFIG_FILE")

if [ "$NEW_ADDR" != "$CURRENT_ADDR" ]; then
    echo "[$(date)] 地址变更: $CURRENT_ADDR → $NEW_ADDR，开始更新配置..." | tee -a /var/log/frp-update.log

    # 更新配置文件中的 server_addr
    sed -i "s/^server_addr = .*/server_addr = $NEW_ADDR/" "$CONFIG_FILE"

    # 重启 frpc 服务
    systemctl restart "$FRPC_SERVICE"

    if systemctl is-active --quiet "$FRPC_SERVICE"; then
        echo "[$(date)] SUCCESS: 配置已更新，$FRPC_SERVICE 重启成功" | tee -a /var/log/frp-update.log
    else
        echo "[$(date)] ERROR: $FRPC_SERVICE 重启失败！" | tee -a /var/log/frp-update.log
        # 可选：回滚配置
        # sed -i "s/^server_addr = .*/server_addr = $CURRENT_ADDR/" "$CONFIG_FILE"
        # systemctl restart "$FRPC_SERVICE"
    fi
else
    echo "[$(date)] 地址未变化 ($CURRENT_ADDR)，跳过更新" >> /var/log/frp-update.log
fi
