Files
zkcoi e9ca2f7d70 fix: rename manager module to git.zkcoi.com/zkcoi/Meshray-Manager
- go.mod module path matches repo zkcoi/Meshray-Manager (case-distinct from zkcoi/Meshray/core)
- rewrite internal imports meshray/{internal,web,pkg} -> Meshray-Manager/... (core refs kept)
- sync README.md / install.sh repo URLs; add CHANGELOG entry
2026-07-15 16:25:46 +08:00

142 lines
3.3 KiB
Go

package handler
import (
"net/http"
"git.zkcoi.com/zkcoi/Meshray-Manager/internal/service"
"github.com/gin-gonic/gin"
)
// DDNSHandler DDNS 配置处理器
type DDNSHandler struct {
ddnsService *service.DDNSService
}
// NewDDNSHandler 创建 DDNS 处理器
func NewDDNSHandler(ddnsService *service.DDNSService) *DDNSHandler {
return &DDNSHandler{
ddnsService: ddnsService,
}
}
// DDNSConfigRequest DDNS 配置请求
type DDNSConfigRequest struct {
Provider string `json:"provider"`
AccessKeyID string `json:"access_key_id"`
AccessKeySecret string `json:"access_key_secret"`
Domain string `json:"domain"`
TxtRecordName string `json:"txt_record_name"`
SyncMode string `json:"sync_mode"`
RetryInterval int `json:"retry_interval"`
MaxRetries int `json:"max_retries"`
Enabled bool `json:"enabled"`
}
// GetDDNSConfig 获取 DDNS 配置
// GET /api/v1/ddns/config
func (h *DDNSHandler) GetDDNSConfig(c *gin.Context) {
config, err := h.ddnsService.GetConfig(c.Request.Context())
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"data": config,
})
}
// UpdateDDNSConfig 更新 DDNS 配置
// PUT /api/v1/ddns/config
func (h *DDNSHandler) UpdateDDNSConfig(c *gin.Context) {
var req DDNSConfigRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": "参数错误:" + err.Error(),
})
return
}
if req.Provider == "" {
c.JSON(http.StatusBadRequest, gin.H{
"error": "请选择 DNS 提供商",
})
return
}
if req.AccessKeyID == "" || req.AccessKeySecret == "" {
c.JSON(http.StatusBadRequest, gin.H{
"error": "请输入完整的访问密钥",
})
return
}
if req.Domain == "" {
c.JSON(http.StatusBadRequest, gin.H{
"error": "请输入域名",
})
return
}
if req.TxtRecordName == "" {
c.JSON(http.StatusBadRequest, gin.H{
"error": "请输入 TXT 记录名称",
})
return
}
if err := h.ddnsService.UpdateConfig(c.Request.Context(), req); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "配置已保存",
})
}
// TestDDNSRequest 测试请求
type TestDDNSRequest struct {
Provider string `json:"provider"`
AccessKeyID string `json:"access_key_id"`
AccessKeySecret string `json:"access_key_secret"`
Domain string `json:"domain"`
TxtRecordName string `json:"txt_record_name"`
}
// TestDDNSConnectivity 测试 DDNS 连通性
// POST /api/v1/ddns/test
func (h *DDNSHandler) TestDDNSConnectivity(c *gin.Context) {
var req TestDDNSRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": "参数错误:" + err.Error(),
})
return
}
results := h.ddnsService.TestConnectivity(c.Request.Context(), req)
c.JSON(http.StatusOK, gin.H{
"data": gin.H{
"results": results,
},
})
}
// SyncDDNS 手动同步 DDNS
// POST /api/v1/ddns/sync
func (h *DDNSHandler) SyncDDNS(c *gin.Context) {
if err := h.ddnsService.SyncNow(c.Request.Context()); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"error": err.Error(),
})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "同步成功",
})
}