Files
Prism/internal/api/handlers_outbound.go
T
rose_cat707 c26b06f1cc
CI / test (push) Successful in 1m11s
CI / docker (push) Failing after 17s
feat: Prism HTTP/SOCKS5 代理网关及管理台
Go 控制面(SQLite + REST API)嵌入 Mihomo 数据面,Vue 3 多语言 Web 管理台。
含订阅/节点/规则/出站/监控/日志、OpenAPI、API Key、Gitea Actions CI 与开源文档;
CI 使用 ubuntu-latest runner,Go/Docker 步骤走国内镜像与 shell,避免 GitHub 下载超时。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-23 14:07:40 +08:00

53 lines
1.3 KiB
Go

package api
import (
"net/http"
"github.com/gin-gonic/gin"
)
func (s *Server) outboundOverview(c *gin.Context) {
data, err := s.app.OutboundOverview(c.Request.Context())
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, data)
}
type selectOutboundReq struct {
Proxy string `json:"proxy"`
}
func (s *Server) selectOutboundGroup(c *gin.Context) {
name := c.Param("name")
var req selectOutboundReq
if err := c.ShouldBindJSON(&req); err != nil || req.Proxy == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "proxy required"})
return
}
if err := s.app.SelectOutboundGroup(c.Request.Context(), name, req.Proxy); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusOK, gin.H{"ok": true})
}
type defaultPolicyReq struct {
Policy string `json:"policy"`
}
func (s *Server) setDefaultPolicy(c *gin.Context) {
var req defaultPolicyReq
if err := c.ShouldBindJSON(&req); err != nil || req.Policy == "" {
c.JSON(http.StatusBadRequest, gin.H{"error": "policy required"})
return
}
if err := s.app.SetDefaultPolicy(c.Request.Context(), req.Policy); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
s.syncMihomoClient(c.Request.Context())
c.JSON(http.StatusOK, gin.H{"ok": true})
}