From 2f09afec695b2a7e399d7c336136b9ea85a7e869 Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Mon, 24 Nov 2025 14:22:53 +0800 Subject: [PATCH 1/9] feat: Add Swagger UI support and update Go module dependencies --- core/go.mod | 3 +-- core/go.sum | 6 ++---- core/init/router/router.go | 30 +++++++++++++++++++++++++----- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/core/go.mod b/core/go.mod index 3202339b43f7..c219cc2d2334 100644 --- a/core/go.mod +++ b/core/go.mod @@ -36,8 +36,7 @@ require ( github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.19.0 - github.com/swaggo/files v1.0.1 - github.com/swaggo/gin-swagger v1.6.0 + github.com/swaggo/files/v2 v2.0.2 github.com/swaggo/swag v1.16.3 github.com/tencentyun/cos-go-sdk-v5 v0.7.54 github.com/upyun/go-sdk v2.1.0+incompatible diff --git a/core/go.sum b/core/go.sum index ac01ccc73bd0..4b3df94577bb 100644 --- a/core/go.sum +++ b/core/go.sum @@ -468,10 +468,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= -github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= -github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= -github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= +github.com/swaggo/files/v2 v2.0.2 h1:Bq4tgS/yxLB/3nwOMcul5oLEUKa877Ykgz3CJMVbQKU= +github.com/swaggo/files/v2 v2.0.2/go.mod h1:TVqetIzZsO9OhHX1Am9sRf9LdrFZqoK49N37KON/jr0= github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg= github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.563/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= diff --git a/core/init/router/router.go b/core/init/router/router.go index 8575eba00929..c079d9e17c51 100644 --- a/core/init/router/router.go +++ b/core/init/router/router.go @@ -3,6 +3,7 @@ package router import ( "encoding/base64" "io" + "io/fs" "net/http" "os" "path/filepath" @@ -18,14 +19,31 @@ import ( "github.com/1Panel-dev/1Panel/core/utils/security" "github.com/gin-contrib/gzip" "github.com/gin-gonic/gin" - swaggerfiles "github.com/swaggo/files" - ginSwagger "github.com/swaggo/gin-swagger" + swaggerfiles "github.com/swaggo/files/v2" ) var ( Router *gin.Engine ) +func swaggerHandler() gin.HandlerFunc { + subFS, _ := fs.Sub(swaggerfiles.FS, "dist") + fileServer := http.StripPrefix("/1panel/swagger/", http.FileServer(http.FS(subFS))) + + return func(c *gin.Context) { + path := c.Param("any") + switch path { + case "/", "/index.html", "": + c.Redirect(http.StatusMovedPermanently, "/1panel/swagger/index.html") + case "/doc.json": + c.Header("Content-Type", "application/json; charset=utf-8") + c.String(http.StatusOK, docs.SwaggerInfo.ReadDoc()) + default: + fileServer.ServeHTTP(c.Writer, c.Request) + } + } +} + func setWebStatic(rootRouter *gin.RouterGroup) { rootRouter.StaticFS("/public", http.FS(web.Favicon)) rootRouter.StaticFS("/favicon.ico", http.FS(web.Favicon)) @@ -72,9 +90,11 @@ func Routers() *gin.Engine { Router.Use(middleware.WhiteAllow()) Router.Use(middleware.BindDomain()) - swaggerRouter := Router.Group("1panel") - docs.SwaggerInfo.BasePath = "/api/v2" - swaggerRouter.Use(middleware.SessionAuth()).GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler)) + if false { // test + swaggerRouter := Router.Group("1panel") + docs.SwaggerInfo.BasePath = "/api/v2" + swaggerRouter.Use(middleware.SessionAuth()).GET("/swagger/*any", swaggerHandler()) + } PublicGroup := Router.Group("") { PublicGroup.Use(gzip.Gzip(gzip.DefaultCompression)) From f4f79dc29f4c7aa01369854798d609ddfc416650 Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Mon, 24 Nov 2025 14:23:58 +0800 Subject: [PATCH 2/9] f --- core/init/router/router.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/core/init/router/router.go b/core/init/router/router.go index c079d9e17c51..01fe4f1e9c0a 100644 --- a/core/init/router/router.go +++ b/core/init/router/router.go @@ -90,11 +90,10 @@ func Routers() *gin.Engine { Router.Use(middleware.WhiteAllow()) Router.Use(middleware.BindDomain()) - if false { // test - swaggerRouter := Router.Group("1panel") - docs.SwaggerInfo.BasePath = "/api/v2" - swaggerRouter.Use(middleware.SessionAuth()).GET("/swagger/*any", swaggerHandler()) - } + swaggerRouter := Router.Group("1panel") + docs.SwaggerInfo.BasePath = "/api/v2" + swaggerRouter.Use(middleware.SessionAuth()).GET("/swagger/*any", swaggerHandler()) + PublicGroup := Router.Group("") { PublicGroup.Use(gzip.Gzip(gzip.DefaultCompression)) From fb99d9c409058a4ffcdc0de16cf6c1a515dd1482 Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Mon, 24 Nov 2025 14:35:13 +0800 Subject: [PATCH 3/9] f --- core/init/router/router.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/init/router/router.go b/core/init/router/router.go index 01fe4f1e9c0a..5216e043dfc0 100644 --- a/core/init/router/router.go +++ b/core/init/router/router.go @@ -31,10 +31,9 @@ func swaggerHandler() gin.HandlerFunc { fileServer := http.StripPrefix("/1panel/swagger/", http.FileServer(http.FS(subFS))) return func(c *gin.Context) { - path := c.Param("any") + path := c.Request.URL.Path + path = strings.TrimPrefix(path, "/1panel/swagger") switch path { - case "/", "/index.html", "": - c.Redirect(http.StatusMovedPermanently, "/1panel/swagger/index.html") case "/doc.json": c.Header("Content-Type", "application/json; charset=utf-8") c.String(http.StatusOK, docs.SwaggerInfo.ReadDoc()) From e360de89f2c0a631787c6444bdd8a83315f7e776 Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Mon, 24 Nov 2025 14:43:36 +0800 Subject: [PATCH 4/9] ff --- core/init/router/router.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/init/router/router.go b/core/init/router/router.go index 5216e043dfc0..2e407effd6e8 100644 --- a/core/init/router/router.go +++ b/core/init/router/router.go @@ -3,7 +3,6 @@ package router import ( "encoding/base64" "io" - "io/fs" "net/http" "os" "path/filepath" @@ -27,8 +26,7 @@ var ( ) func swaggerHandler() gin.HandlerFunc { - subFS, _ := fs.Sub(swaggerfiles.FS, "dist") - fileServer := http.StripPrefix("/1panel/swagger/", http.FileServer(http.FS(subFS))) + fileServer := http.StripPrefix("/1panel/swagger/", http.FileServer(http.FS(swaggerfiles.FS))) return func(c *gin.Context) { path := c.Request.URL.Path @@ -36,8 +34,10 @@ func swaggerHandler() gin.HandlerFunc { switch path { case "/doc.json": c.Header("Content-Type", "application/json; charset=utf-8") + c.Header("Cache-Control", "private, max-age=600") c.String(http.StatusOK, docs.SwaggerInfo.ReadDoc()) default: + c.Header("Cache-Control", "private, max-age=600") fileServer.ServeHTTP(c.Writer, c.Request) } } From 648511fc11837adab3c8e0627d25db834c42ed37 Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:21:23 +0800 Subject: [PATCH 5/9] swag --- core/init/router/router.go | 22 ++----------- core/init/swagger/swag.go | 63 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 20 deletions(-) create mode 100644 core/init/swagger/swag.go diff --git a/core/init/router/router.go b/core/init/router/router.go index 2e407effd6e8..c437008789f7 100644 --- a/core/init/router/router.go +++ b/core/init/router/router.go @@ -13,36 +13,18 @@ import ( "github.com/1Panel-dev/1Panel/core/cmd/server/web" "github.com/1Panel-dev/1Panel/core/global" "github.com/1Panel-dev/1Panel/core/i18n" + "github.com/1Panel-dev/1Panel/core/init/swagger" "github.com/1Panel-dev/1Panel/core/middleware" rou "github.com/1Panel-dev/1Panel/core/router" "github.com/1Panel-dev/1Panel/core/utils/security" "github.com/gin-contrib/gzip" "github.com/gin-gonic/gin" - swaggerfiles "github.com/swaggo/files/v2" ) var ( Router *gin.Engine ) -func swaggerHandler() gin.HandlerFunc { - fileServer := http.StripPrefix("/1panel/swagger/", http.FileServer(http.FS(swaggerfiles.FS))) - - return func(c *gin.Context) { - path := c.Request.URL.Path - path = strings.TrimPrefix(path, "/1panel/swagger") - switch path { - case "/doc.json": - c.Header("Content-Type", "application/json; charset=utf-8") - c.Header("Cache-Control", "private, max-age=600") - c.String(http.StatusOK, docs.SwaggerInfo.ReadDoc()) - default: - c.Header("Cache-Control", "private, max-age=600") - fileServer.ServeHTTP(c.Writer, c.Request) - } - } -} - func setWebStatic(rootRouter *gin.RouterGroup) { rootRouter.StaticFS("/public", http.FS(web.Favicon)) rootRouter.StaticFS("/favicon.ico", http.FS(web.Favicon)) @@ -91,7 +73,7 @@ func Routers() *gin.Engine { swaggerRouter := Router.Group("1panel") docs.SwaggerInfo.BasePath = "/api/v2" - swaggerRouter.Use(middleware.SessionAuth()).GET("/swagger/*any", swaggerHandler()) + swaggerRouter.Use(middleware.SessionAuth()).GET("/swagger/*any", swagger.SwaggerHandler()) PublicGroup := Router.Group("") { diff --git a/core/init/swagger/swag.go b/core/init/swagger/swag.go new file mode 100644 index 000000000000..20bf1aac46e6 --- /dev/null +++ b/core/init/swagger/swag.go @@ -0,0 +1,63 @@ +package swagger + +import ( + "net/http" + "regexp" + "strings" + + "github.com/1Panel-dev/1Panel/core/cmd/server/docs" + "github.com/gin-gonic/gin" + swaggerfiles "github.com/swaggo/files/v2" +) + +var matcher = regexp.MustCompile(`(.*)(index\.html|index\.css|swagger-initializer\.js|doc\.json|favicon-16x16\.png|...`) + +const SwaggerDocFile = "doc.json" + +const CustomSwaggerInitializerJS = `window.onload = function() { + // + window.ui = SwaggerUIBundle({ + url: "{{.URL}}", + dom_id: '#swagger-ui', + deepLinking: true, + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], + layout: "StandaloneLayout" + }); + + // +}; +` + +func SwaggerHandler() gin.HandlerFunc { + fileServer := http.StripPrefix("/1panel/swagger/", http.FileServer(http.FS(swaggerfiles.FS))) + + return func(c *gin.Context) { + path := c.Request.URL.Path + path = strings.TrimPrefix(path, "/1panel/swagger") + if !matcher.MatchString(path) { + // 404 + c.AbortWithStatus(http.StatusNotFound) + return + } + switch path { + case "/doc.json": + c.Header("Content-Type", "application/json; charset=utf-8") + c.Header("Cache-Control", "private, max-age=600") + c.String(http.StatusOK, docs.SwaggerInfo.ReadDoc()) + case "/swagger-initializer.js": + c.Header("Content-Type", "application/javascript; charset=utf-8") + c.Header("Cache-Control", "private, max-age=600") + c.String(http.StatusOK, strings.ReplaceAll(CustomSwaggerInitializerJS, "{{.URL}}", "/api/v2/"+SwaggerDocFile)) + default: + + c.Header("Cache-Control", "private, max-age=600") + fileServer.ServeHTTP(c.Writer, c.Request) + } + } +} From 73ffc68374576fa76f137c31e014bf4861a0af98 Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:23:50 +0800 Subject: [PATCH 6/9] f --- core/init/swagger/swag.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/init/swagger/swag.go b/core/init/swagger/swag.go index 20bf1aac46e6..6dce6ac86cf0 100644 --- a/core/init/swagger/swag.go +++ b/core/init/swagger/swag.go @@ -10,10 +10,10 @@ import ( swaggerfiles "github.com/swaggo/files/v2" ) -var matcher = regexp.MustCompile(`(.*)(index\.html|index\.css|swagger-initializer\.js|doc\.json|favicon-16x16\.png|...`) +var matcher = regexp.MustCompile(fileMatchPattern) +const fileMatchPattern = `(.*)(index\.html|index\.css|swagger-initializer\.js|doc\.json|favicon-16x16\.png|favicon-32x32\.png|/oauth2-redirect\.html|swagger-ui\.css|swagger-ui\.css\.map|swagger-ui\.js|swagger-ui\.js\.map|swagger-ui-bundle\.js|swagger-ui-bundle\.js\.map|swagger-ui-standalone-preset\.js|swagger-ui-standalone-preset\.js\.map)[?|.]*` const SwaggerDocFile = "doc.json" - const CustomSwaggerInitializerJS = `window.onload = function() { // window.ui = SwaggerUIBundle({ From efde0ff5076caa5897b4c34c61ba7ff4837ef994 Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:27:34 +0800 Subject: [PATCH 7/9] w --- core/init/swagger/swag.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/init/swagger/swag.go b/core/init/swagger/swag.go index 6dce6ac86cf0..3035ff5d19e6 100644 --- a/core/init/swagger/swag.go +++ b/core/init/swagger/swag.go @@ -40,7 +40,7 @@ func SwaggerHandler() gin.HandlerFunc { return func(c *gin.Context) { path := c.Request.URL.Path path = strings.TrimPrefix(path, "/1panel/swagger") - if !matcher.MatchString(path) { + if !matcher.MatchString(path) && path != "/" { // 404 c.AbortWithStatus(http.StatusNotFound) return From fba9ca93944fc918a0e3752f1dc9b7ba170473fb Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:30:17 +0800 Subject: [PATCH 8/9] f --- core/init/swagger/swag.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/init/swagger/swag.go b/core/init/swagger/swag.go index 3035ff5d19e6..83443e234dbc 100644 --- a/core/init/swagger/swag.go +++ b/core/init/swagger/swag.go @@ -12,8 +12,9 @@ import ( var matcher = regexp.MustCompile(fileMatchPattern) +const swaggerDocFile = "doc.json" + const fileMatchPattern = `(.*)(index\.html|index\.css|swagger-initializer\.js|doc\.json|favicon-16x16\.png|favicon-32x32\.png|/oauth2-redirect\.html|swagger-ui\.css|swagger-ui\.css\.map|swagger-ui\.js|swagger-ui\.js\.map|swagger-ui-bundle\.js|swagger-ui-bundle\.js\.map|swagger-ui-standalone-preset\.js|swagger-ui-standalone-preset\.js\.map)[?|.]*` -const SwaggerDocFile = "doc.json" const CustomSwaggerInitializerJS = `window.onload = function() { // window.ui = SwaggerUIBundle({ @@ -53,7 +54,7 @@ func SwaggerHandler() gin.HandlerFunc { case "/swagger-initializer.js": c.Header("Content-Type", "application/javascript; charset=utf-8") c.Header("Cache-Control", "private, max-age=600") - c.String(http.StatusOK, strings.ReplaceAll(CustomSwaggerInitializerJS, "{{.URL}}", "/api/v2/"+SwaggerDocFile)) + c.String(http.StatusOK, strings.ReplaceAll(CustomSwaggerInitializerJS, "{{.URL}}", swaggerDocFile)) default: c.Header("Cache-Control", "private, max-age=600") From c05b3e786fff38e68846f00f0543072bd29f37ed Mon Sep 17 00:00:00 2001 From: HynoR <20227709+HynoR@users.noreply.github.com> Date: Mon, 24 Nov 2025 15:37:03 +0800 Subject: [PATCH 9/9] chore: Remove unused dependency on github.com/patrickmn/go-cache and update go.mod and go.sum files --- core/go.mod | 1 - core/go.sum | 23 ++--------------------- 2 files changed, 2 insertions(+), 22 deletions(-) diff --git a/core/go.mod b/core/go.mod index c219cc2d2334..bbed050c70fe 100644 --- a/core/go.mod +++ b/core/go.mod @@ -27,7 +27,6 @@ require ( github.com/minio/minio-go/v7 v7.0.74 github.com/nicksnyder/go-i18n/v2 v2.4.0 github.com/oschwald/maxminddb-golang v1.13.1 - github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 github.com/pkg/sftp v1.13.6 github.com/qiniu/go-sdk/v7 v7.21.1 diff --git a/core/go.sum b/core/go.sum index 4b3df94577bb..62d4a88efa0d 100644 --- a/core/go.sum +++ b/core/go.sum @@ -390,8 +390,6 @@ github.com/nicksnyder/go-i18n/v2 v2.4.0/go.mod h1:nxYSZE9M0bf3Y70gPQjN9ha7XNHX7g github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oschwald/maxminddb-golang v1.13.1 h1:G3wwjdN9JmIK2o/ermkHM+98oX5fS+k5MbwsmL4MRQE= github.com/oschwald/maxminddb-golang v1.13.1/go.mod h1:K4pgV9N/GcK694KSTmVSDTODk4IsCNThNdTmnaBZ/F8= -github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= -github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -527,8 +525,6 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= -golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -566,8 +562,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= -golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -600,9 +596,6 @@ golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw= -golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA= golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -622,8 +615,6 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= -golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -670,17 +661,12 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= -golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -692,9 +678,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -748,8 +731,6 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo= -golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg= golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=