From 83085dc2d0ae7b7983d23b4430df248f30197272 Mon Sep 17 00:00:00 2001 From: init Date: Thu, 18 Sep 2025 18:37:42 +0800 Subject: [PATCH] fix bug --- routers/web/devcontainer/devcontainer.go | 7 +++++- services/devcontainer/devcontainer_utils.go | 24 +++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/routers/web/devcontainer/devcontainer.go b/routers/web/devcontainer/devcontainer.go index 880397b697..89490bf335 100644 --- a/routers/web/devcontainer/devcontainer.go +++ b/routers/web/devcontainer/devcontainer.go @@ -84,6 +84,10 @@ func GetDevContainerDetails(ctx *context.Context) { if webTerminalContainerName == "" { ctx.Flash.Error("webTerminal do not exist.", true) } else { + rootPort, err := devcontainer_service.GetPortFromURL(cfg.Section("server").Key("ROOT_URL").Value()) + if err != nil { + ctx.Flash.Error(err.Error(), true) + } terminalParams := "user=" + ctx.Doer.Name + "&repo=" + @@ -95,7 +99,8 @@ func GetDevContainerDetails(ctx *context.Context) { "&domain=" + cfg.Section("server").Key("DOMAIN").Value() + "&port=" + - cfg.Section("server").Key("HTTP_PORT").Value() + rootPort + port, err := devcontainer_service.GetMappedPort(ctx, webTerminalContainerName, "7681") webTerminalURL, err := devcontainer_service.ReplacePortOfUrl(cfg.Section("server").Key("ROOT_URL").Value(), fmt.Sprintf("%d", port)) if err != nil { diff --git a/services/devcontainer/devcontainer_utils.go b/services/devcontainer/devcontainer_utils.go index 49d1c25062..6ccbca1003 100644 --- a/services/devcontainer/devcontainer_utils.go +++ b/services/devcontainer/devcontainer_utils.go @@ -193,6 +193,30 @@ func ReplacePortOfUrl(originalURL, targetPort string) (string, error) { newURL := parsedURL.String() return newURL, nil } +func GetPortFromURL(urlStr string) (string, error) { + parsedURL, err := url.Parse(urlStr) + if err != nil { + return "", fmt.Errorf("解析URL失败: %v", err) + } + + // 获取主机名和端口号 + _, port, err := net.SplitHostPort(parsedURL.Host) + if err != nil { + // 如果SplitHostPort失败,说明URL中没有明确指定端口 + // 需要根据协议判断默认端口 + switch parsedURL.Scheme { + case "http": + return "80", nil + case "https": + return "443", nil + default: + return "", fmt.Errorf("未知协议: %s", parsedURL.Scheme) + } + } + + // 如果端口存在,直接返回 + return port, nil +} // addFileToTar 将文件添加到 tar 归档 func AddFileToTar(tw *tar.Writer, filename string, content string, mode int64) error {