diff --git a/backend/dockerfile b/backend/dockerfile index e123b07..0609f2b 100644 --- a/backend/dockerfile +++ b/backend/dockerfile @@ -10,7 +10,6 @@ RUN apk add tzdata ENV TZ=Asia/Shanghai ENV TERM=xterm-256color WORKDIR /oneterm -COPY --from=0 /oneterm/configs/config.example.yaml ./config.yaml COPY --from=0 /oneterm/internal/i18n/locales ./locales COPY --from=0 /oneterm/build/oneterm . CMD [ "./oneterm","run","-c","./config.yaml"] diff --git a/backend/internal/api/controller/web_proxy.go b/backend/internal/api/controller/web_proxy.go index 06c4e07..23f0fa5 100644 --- a/backend/internal/api/controller/web_proxy.go +++ b/backend/internal/api/controller/web_proxy.go @@ -337,7 +337,7 @@ func (c *WebProxyController) recordWebActivity(session *WebProxySession, req *ht web_proxy.RecordWebActivity(session.SessionId, &gin.Context{Request: req}) } -// extractAssetIDFromHost extracts asset ID from subdomain host +// extractAssetIDFromHost is kept for compatibility but deprecated in fixed subdomain approach func (c *WebProxyController) extractAssetIDFromHost(host string) (int, error) { return web_proxy.ExtractAssetIDFromHost(host) } diff --git a/backend/internal/api/middleware/logger.go b/backend/internal/api/middleware/logger.go index 43e270b..4d8d70b 100644 --- a/backend/internal/api/middleware/logger.go +++ b/backend/internal/api/middleware/logger.go @@ -21,7 +21,7 @@ func LoggerMiddleware() gin.HandlerFunc { // Skip logging for web proxy requests to reduce noise url := ctx.Request.URL.String() host := ctx.Request.Host - if strings.HasPrefix(host, "asset-") { + if strings.HasPrefix(host, "webproxy.") { return } diff --git a/backend/internal/api/router/router.go b/backend/internal/api/router/router.go index 3d33ceb..cf320b9 100644 --- a/backend/internal/api/router/router.go +++ b/backend/internal/api/router/router.go @@ -1,12 +1,12 @@ package router import ( + "strings" + "github.com/gin-gonic/gin" swaggerFiles "github.com/swaggo/files" ginSwagger "github.com/swaggo/gin-swagger" - "strings" - "github.com/veops/oneterm/internal/api/controller" "github.com/veops/oneterm/internal/api/docs" "github.com/veops/oneterm/internal/api/middleware" @@ -21,13 +21,13 @@ func SetupRouter(r *gin.Engine) { // Start web session cleanup routine controller.StartSessionCleanupRoutine() - // Subdomain proxy middleware for asset- subdomains + // Fixed webproxy subdomain middleware webProxy := controller.NewWebProxyController() r.Use(func(c *gin.Context) { host := c.Request.Host - // Check if this is an asset subdomain request - if strings.HasPrefix(host, "asset-") { + // Check if this is the webproxy subdomain request + if strings.HasPrefix(host, "webproxy.") { // Allow API requests to pass through to normal routing if strings.HasPrefix(c.Request.URL.Path, "/api/oneterm/v1/") { c.Next() diff --git a/backend/internal/service/web_proxy/content.go b/backend/internal/service/web_proxy/content.go index 47e8a06..8fb8d12 100644 --- a/backend/internal/service/web_proxy/content.go +++ b/backend/internal/service/web_proxy/content.go @@ -12,86 +12,6 @@ import ( "github.com/samber/lo" ) -// RewriteHTMLContent rewrites HTML content to redirect external links through proxy -func RewriteHTMLContent(resp *http.Response, assetID int, scheme, proxyHost string) { - if resp.Body == nil { - return - } - - // Remove Content-Encoding to avoid decoding issues - resp.Header.Del("Content-Encoding") - resp.Header.Del("Content-Length") - - body, err := io.ReadAll(resp.Body) - if err != nil { - return - } - resp.Body.Close() - - baseDomain := lo.Ternary(strings.HasPrefix(proxyHost, "asset-"), - func() string { - parts := strings.SplitN(proxyHost, ".", 2) - return lo.Ternary(len(parts) > 1, parts[1], proxyHost) - }(), - proxyHost) - - content := string(body) - - // Universal URL rewriting patterns - catch ALL external URLs - patterns := []struct { - pattern string - rewrite func(matches []string) string - }{ - // JavaScript location assignments: window.location = "http://example.com/path" - { - `(window\.location(?:\.href)?\s*=\s*["'])https?://([^/'"]+)(/[^"']*)?["']`, - func(matches []string) string { - path := lo.Ternary(len(matches) > 3 && matches[3] != "", matches[3], "") - return fmt.Sprintf(`%s%s://asset-%d.%s%s"`, matches[1], scheme, assetID, baseDomain, path) - }, - }, - // Form actions: