refactor(config): reduce references to config.GetInstance()

This commit is contained in:
yusing
2025-10-07 21:49:00 +08:00
parent 584db2efce
commit a150f1a628
8 changed files with 36 additions and 11 deletions

View File

@@ -2,6 +2,7 @@ package acl
import (
"net"
"sync/atomic"
"time"
"github.com/puzpuzpuz/xsync/v4"
@@ -39,6 +40,9 @@ type checkCache struct {
created time.Time
}
// could be nil
var ActiveConfig atomic.Pointer[Config]
const cacheTTL = 1 * time.Minute
func (c *checkCache) Expired() bool {

View File

@@ -5,7 +5,7 @@ import (
"github.com/gin-gonic/gin"
apitypes "github.com/yusing/godoxy/internal/api/types"
config "github.com/yusing/godoxy/internal/config/types"
"github.com/yusing/godoxy/internal/autocert"
)
type CertInfo struct {
@@ -29,7 +29,7 @@ type CertInfo struct {
// @Failure 500 {object} apitypes.ErrorResponse
// @Router /cert/info [get]
func Info(c *gin.Context) {
autocert := config.GetInstance().AutoCertProvider()
autocert := autocert.ActiveProvider.Load()
if autocert == nil {
c.JSON(http.StatusNotFound, apitypes.Error("autocert is not enabled"))
return

View File

@@ -7,7 +7,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/rs/zerolog/log"
apitypes "github.com/yusing/godoxy/internal/api/types"
config "github.com/yusing/godoxy/internal/config/types"
"github.com/yusing/godoxy/internal/autocert"
"github.com/yusing/godoxy/internal/logging/memlogger"
gperr "github.com/yusing/goutils/errs"
"github.com/yusing/goutils/http/websocket"
@@ -24,7 +24,7 @@ import (
// @Failure 500 {object} apitypes.ErrorResponse
// @Router /cert/renew [get]
func Renew(c *gin.Context) {
autocert := config.GetInstance().AutoCertProvider()
autocert := autocert.ActiveProvider.Load()
if autocert == nil {
c.JSON(http.StatusNotFound, apitypes.Error("autocert is not enabled"))
return

View File

@@ -10,6 +10,7 @@ import (
"path"
"slices"
"strings"
"sync/atomic"
"time"
"github.com/go-acme/lego/v4/certificate"
@@ -49,6 +50,9 @@ const (
requestCooldownDuration = 15 * time.Second
)
// could be nil
var ActiveProvider atomic.Pointer[Provider]
func NewProvider(cfg *Config, user *User, legoCfg *lego.Config) *Provider {
return &Provider{
cfg: cfg,

View File

@@ -0,0 +1,16 @@
package homepage
import "sync/atomic"
type Config struct {
UseDefaultCategories bool `json:"use_default_categories"`
}
// nil-safe
var ActiveConfig atomic.Pointer[Config]
func init() {
ActiveConfig.Store(&Config{
UseDefaultCategories: true,
})
}

View File

@@ -13,6 +13,7 @@ import (
"github.com/yusing/godoxy/agent/pkg/agent"
"github.com/yusing/godoxy/internal/docker"
"github.com/yusing/godoxy/internal/homepage"
homepagecfg "github.com/yusing/godoxy/internal/homepage/types"
netutils "github.com/yusing/godoxy/internal/net"
nettypes "github.com/yusing/godoxy/internal/net/types"
"github.com/yusing/godoxy/internal/proxmox"
@@ -22,7 +23,6 @@ import (
"github.com/yusing/goutils/task"
"github.com/yusing/godoxy/internal/common"
config "github.com/yusing/godoxy/internal/config/types"
"github.com/yusing/godoxy/internal/logging/accesslog"
"github.com/yusing/godoxy/internal/route/rules"
route "github.com/yusing/godoxy/internal/route/types"
@@ -676,7 +676,7 @@ func (r *Route) FinalizeHomepageConfig() {
}
if hp.Category == "" {
if config.GetInstance().Value().Homepage.UseDefaultCategories {
if homepagecfg.ActiveConfig.Load().UseDefaultCategories {
for _, ref := range refs {
if category, ok := homepage.PredefinedCategories[ref]; ok {
hp.Category = category

View File

@@ -6,7 +6,8 @@ import (
"github.com/pires/go-proxyproto"
"github.com/rs/zerolog"
config "github.com/yusing/godoxy/internal/config/types"
"github.com/yusing/godoxy/internal/acl"
"github.com/yusing/godoxy/internal/entrypoint"
nettypes "github.com/yusing/godoxy/internal/net/types"
ioutils "github.com/yusing/goutils/io"
"go.uber.org/atomic"
@@ -43,10 +44,10 @@ func (s *TCPTCPStream) ListenAndServe(ctx context.Context, preDial, onRead netty
return
}
if proxyProto := config.GetInstance().Value().Entrypoint.SupportProxyProtocol; proxyProto {
if proxyProto := entrypoint.ActiveConfig.Load().SupportProxyProtocol; proxyProto {
s.listener = &proxyproto.Listener{Listener: s.listener}
}
if acl := config.GetInstance().Value().ACL; acl != nil {
if acl := acl.ActiveConfig.Load(); acl != nil {
s.listener = acl.WrapTCP(s.listener)
}

View File

@@ -10,7 +10,7 @@ import (
"time"
"github.com/rs/zerolog"
config "github.com/yusing/godoxy/internal/config/types"
"github.com/yusing/godoxy/internal/acl"
nettypes "github.com/yusing/godoxy/internal/net/types"
"github.com/yusing/goutils/synk"
"go.uber.org/atomic"
@@ -74,7 +74,7 @@ func (s *UDPUDPStream) ListenAndServe(ctx context.Context, preDial, onRead netty
logErr(s, err, "failed to listen")
return
}
if acl := config.GetInstance().Value().ACL; acl != nil {
if acl := acl.ActiveConfig.Load(); acl != nil {
s.listener = acl.WrapUDP(s.listener)
}
s.preDial = preDial