package api import ( "log" "net/url" "strconv" "strings" "sublink/models" "sublink/node" "time" "github.com/gin-gonic/gin" ) func NodeUpdadte(c *gin.Context) { var node models.Node name := c.PostForm("name") oldname := c.PostForm("oldname") oldlink := c.PostForm("oldlink") link := c.PostForm("link") if name == "" || link == "" { c.JSON(400, gin.H{ "msg": "节点名称 or 备注不能为空", }) return } // 查找旧节点 node.Name = oldname node.Link = oldlink err := node.Find() if err != nil { c.JSON(400, gin.H{ "msg": err.Error(), }) return } node.Name = name node.Link = link err = node.Update() if err != nil { c.JSON(400, gin.H{ "msg": "更新失败", }) return } c.JSON(200, gin.H{ "code": "00000", "msg": "更新成功", }) } // 获取节点列表 func NodeGet(c *gin.Context) { var Node models.Node nodes, err := Node.List() if err != nil { c.JSON(500, gin.H{ "msg": "node list error", }) return } c.JSON(200, gin.H{ "code": "00000", "data": nodes, "msg": "node get", }) } // 添加节点 func NodeAdd(c *gin.Context) { var Node models.Node link := c.PostForm("link") name := c.PostForm("name") if link == "" { c.JSON(400, gin.H{ "msg": "link 不能为空", }) return } if !strings.Contains(link, "://") { c.JSON(400, gin.H{ "msg": "link 必须包含 ://", }) return } Node.Name = name if name == "" { u, err := url.Parse(link) if err != nil { log.Println(err) return } switch { case u.Scheme == "ss": ss, err := node.DecodeSSURL(link) if err != nil { log.Println(err) return } Node.Name = ss.Name case u.Scheme == "ssr": ssr, err := node.DecodeSSRURL(link) if err != nil { log.Println(err) return } Node.Name = ssr.Qurey.Remarks case u.Scheme == "trojan": trojan, err := node.DecodeTrojanURL(link) if err != nil { log.Println(err) return } Node.Name = trojan.Name case u.Scheme == "vmess": vmess, err := node.DecodeVMESSURL(link) if err != nil { log.Println(err) return } Node.Name = vmess.Ps case u.Scheme == "vless": vless, err := node.DecodeVLESSURL(link) if err != nil { log.Println(err) return } Node.Name = vless.Name case u.Scheme == "hy" || u.Scheme == "hysteria": hy, err := node.DecodeHYURL(link) if err != nil { log.Println(err) return } Node.Name = hy.Name case u.Scheme == "hy2" || u.Scheme == "hysteria2": hy2, err := node.DecodeHY2URL(link) if err != nil { log.Println(err) return } Node.Name = hy2.Name case u.Scheme == "tuic": tuic, err := node.DecodeTuicURL(link) if err != nil { log.Println(err) return } Node.Name = tuic.Name } } Node.Link = link Node.CreateDate = time.Now().Format("2006-01-02 15:04:05") err := Node.Find() // 如果找到记录说明重复 if err == nil { Node.Name = name + " " + time.Now().Format("2006-01-02 15:04:05") } err = Node.Add() if err != nil { c.JSON(400, gin.H{ "msg": "添加失败检查一下是否节点重复", }) return } c.JSON(200, gin.H{ "code": "00000", "msg": "添加成功", }) } // 删除节点 func NodeDel(c *gin.Context) { var Node models.Node id := c.Query("id") if id == "" { c.JSON(400, gin.H{ "msg": "id 不能为空", }) return } x, _ := strconv.Atoi(id) Node.ID = x err := Node.Del() if err != nil { c.JSON(400, gin.H{ "msg": "删除失败", }) return } c.JSON(200, gin.H{ "code": "00000", "msg": "删除成功", }) } // 节点统计 func NodesTotal(c *gin.Context) { var Node models.Node nodes, err := Node.List() count := len(nodes) if err != nil { c.JSON(500, gin.H{ "msg": "获取不到节点统计", }) return } c.JSON(200, gin.H{ "code": "00000", "data": count, "msg": "取得节点统计", }) }