feat: add mirror settings #29

This commit is contained in:
engigu
2026-03-18 10:53:41 +08:00
parent 7190cca30b
commit a03800f196
5 changed files with 359 additions and 100 deletions
+45
View File
@@ -117,3 +117,48 @@ func (c *MiseController) UnsetGlobal(ctx *gin.Context) {
}
utils.Success(ctx, nil)
}
// Envs 获取全局环境变量
func (c *MiseController) Envs(ctx *gin.Context) {
envs, err := c.service.Envs()
if err != nil {
utils.ServerError(ctx, "获取全局环境变量失败: "+err.Error())
return
}
utils.Success(ctx, envs)
}
// SetEnv 设置全局环境变量
func (c *MiseController) SetEnv(ctx *gin.Context) {
var req struct {
Key string `json:"key"`
Value string `json:"value"`
}
if err := ctx.ShouldBindJSON(&req); err != nil {
utils.BadRequest(ctx, "参数错误: "+err.Error())
return
}
if req.Key == "" {
utils.BadRequest(ctx, "参数 key 不能为空")
return
}
if err := c.service.SetEnv(req.Key, req.Value); err != nil {
utils.ServerError(ctx, "设置环境变量失败: "+err.Error())
return
}
utils.Success(ctx, nil)
}
// UnsetEnv 取消全局环境变量
func (c *MiseController) UnsetEnv(ctx *gin.Context) {
key := ctx.Query("key")
if key == "" {
utils.BadRequest(ctx, "参数 key 不能为空")
return
}
if err := c.service.UnsetEnv(key); err != nil {
utils.ServerError(ctx, "取消环境变量失败: "+err.Error())
return
}
utils.Success(ctx, nil)
}
+3
View File
@@ -212,6 +212,9 @@ func registerMiseRoutes(g *gin.RouterGroup, c *Controllers) {
mise.GET("/verify-cmd", c.Mise.VerifyCommand)
mise.POST("/use-global", c.Mise.UseGlobal)
mise.POST("/unset-global", c.Mise.UnsetGlobal)
mise.GET("/envs", c.Mise.Envs)
mise.POST("/envs", c.Mise.SetEnv)
mise.DELETE("/envs", c.Mise.UnsetEnv)
}
}
+47
View File
@@ -359,3 +359,50 @@ func (s *MiseService) UnsetGlobal(plugin, version string) error {
}
return nil
}
// Envs 获取全局环境变量
func (s *MiseService) Envs() (map[string]string, error) {
cmd := exec.Command("mise", "set")
cmd.Env = os.Environ()
output, err := cmd.CombinedOutput()
if err != nil {
return nil, fmt.Errorf("mise set failed: %v, output: %s", err, string(output))
}
envs := make(map[string]string)
lines := strings.Split(string(output), "\n")
for _, line := range lines {
fields := strings.Fields(line)
// 期望格式: KEY VALUE SOURCE
// 跳过标题行或不合规行
if len(fields) < 3 || strings.ToLower(fields[0]) == "key" {
continue
}
// 仅显示来自全局配置文件的环境变量
if strings.Contains(strings.ToLower(fields[len(fields)-1]), "config.toml") {
envs[fields[0]] = fields[1]
}
}
return envs, nil
}
// SetEnv 设置全局环境变量
func (s *MiseService) SetEnv(key, value string) error {
cmd := exec.Command("mise", "set", "-g", fmt.Sprintf("%s=%s", key, value))
cmd.Env = os.Environ()
output, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("mise set -g failed: %v, output: %s", err, string(output))
}
return nil
}
// UnsetEnv 取消全局环境变量
func (s *MiseService) UnsetEnv(key string) error {
cmd := exec.Command("mise", "unset", "-g", key)
cmd.Env = os.Environ()
output, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("mise unset -g failed: %v, output: %s", err, string(output))
}
return nil
}