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=