feat: add resetpwd cmd
This commit is contained in:
@@ -3,6 +3,8 @@ package bootstrap
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
|
||||
"github.com/engigu/baihu-panel/internal/constant"
|
||||
"github.com/engigu/baihu-panel/internal/database"
|
||||
@@ -42,6 +44,23 @@ func (a *App) initConfig() {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
a.setupBaihuBin()
|
||||
}
|
||||
|
||||
func (a *App) setupBaihuBin() {
|
||||
binDir := filepath.Join(constant.DataDir, "bin")
|
||||
_ = os.MkdirAll(binDir, 0755)
|
||||
|
||||
exe, err := os.Executable()
|
||||
if err == nil {
|
||||
linkPath := filepath.Join(binDir, "baihu")
|
||||
if runtime.GOOS == "windows" {
|
||||
linkPath += ".exe"
|
||||
}
|
||||
os.Remove(linkPath)
|
||||
_ = os.Symlink(exe, linkPath)
|
||||
}
|
||||
}
|
||||
|
||||
func (a *App) initDatabase() {
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package constant
|
||||
|
||||
// CommandInfo 定义了终端可用命令的说明信息
|
||||
type CommandInfo struct {
|
||||
Name string
|
||||
Description string
|
||||
}
|
||||
|
||||
// Commands 是系统的可用业务命令说明列表
|
||||
var Commands = []CommandInfo{
|
||||
// {
|
||||
// Name: "server",
|
||||
// Description: "启动后台服务进程",
|
||||
// },
|
||||
{
|
||||
Name: "reposync",
|
||||
Description: "同步远程 Git 仓库或文件到本地",
|
||||
},
|
||||
{
|
||||
Name: "resetpwd",
|
||||
Description: "重置 admin 用户密码(需要二次确认)",
|
||||
},
|
||||
}
|
||||
@@ -112,6 +112,12 @@ func (tc *TerminalController) handlePtyMode(conn *websocket.Conn, userID int) {
|
||||
|
||||
cmd.Env = append(os.Environ(), "TERM=xterm-256color")
|
||||
|
||||
// 注入 baihu 命令环境变量
|
||||
if absBinDir, err := filepath.Abs(filepath.Join(constant.DataDir, "bin")); err == nil {
|
||||
pathStr := absBinDir + string(os.PathListSeparator) + os.Getenv("PATH")
|
||||
cmd.Env = append(cmd.Env, "PATH="+pathStr)
|
||||
}
|
||||
|
||||
// 注入环境变量
|
||||
envVars := tc.envService.GetEnvVarsByUserID(userID)
|
||||
for _, env := range envVars {
|
||||
@@ -180,6 +186,13 @@ func (tc *TerminalController) handlePipeMode(conn *websocket.Conn, userID int) {
|
||||
|
||||
// 注入环境变量
|
||||
cmd.Env = os.Environ()
|
||||
|
||||
// 注入 baihu 命令环境变量
|
||||
if absBinDir, err := filepath.Abs(filepath.Join(constant.DataDir, "bin")); err == nil {
|
||||
pathStr := absBinDir + string(os.PathListSeparator) + os.Getenv("PATH")
|
||||
cmd.Env = append(cmd.Env, "PATH="+pathStr)
|
||||
}
|
||||
|
||||
envVars := tc.envService.GetEnvVarsByUserID(userID)
|
||||
for _, env := range envVars {
|
||||
cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", env.Name, env.Value))
|
||||
@@ -279,3 +292,15 @@ func (tc *TerminalController) ExecuteShellCommand(c *gin.Context) {
|
||||
"output": string(output),
|
||||
})
|
||||
}
|
||||
|
||||
// GetCommands 获取所有可用的 cmd 列表及说明
|
||||
func (tc *TerminalController) GetCommands(c *gin.Context) {
|
||||
var cmds []map[string]string
|
||||
for _, cmdInfo := range constant.Commands {
|
||||
cmds = append(cmds, map[string]string{
|
||||
"name": cmdInfo.Name,
|
||||
"description": cmdInfo.Description,
|
||||
})
|
||||
}
|
||||
utils.Success(c, cmds)
|
||||
}
|
||||
|
||||
@@ -181,6 +181,7 @@ func Setup(c *Controllers) *gin.Engine {
|
||||
// 终端模块
|
||||
authorized.GET("/terminal/ws", c.Terminal.HandleWebSocket)
|
||||
authorized.POST("/terminal/exec", c.Terminal.ExecuteShellCommand)
|
||||
authorized.GET("/terminal/cmds", c.Terminal.GetCommands)
|
||||
|
||||
// 设置中心模块
|
||||
settings := authorized.Group("/settings")
|
||||
|
||||
Reference in New Issue
Block a user