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

View File

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

View File

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

View File

@@ -10,6 +10,7 @@ import (
"path" "path"
"slices" "slices"
"strings" "strings"
"sync/atomic"
"time" "time"
"github.com/go-acme/lego/v4/certificate" "github.com/go-acme/lego/v4/certificate"
@@ -49,6 +50,9 @@ const (
requestCooldownDuration = 15 * time.Second requestCooldownDuration = 15 * time.Second
) )
// could be nil
var ActiveProvider atomic.Pointer[Provider]
func NewProvider(cfg *Config, user *User, legoCfg *lego.Config) *Provider { func NewProvider(cfg *Config, user *User, legoCfg *lego.Config) *Provider {
return &Provider{ return &Provider{
cfg: cfg, 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/agent/pkg/agent"
"github.com/yusing/godoxy/internal/docker" "github.com/yusing/godoxy/internal/docker"
"github.com/yusing/godoxy/internal/homepage" "github.com/yusing/godoxy/internal/homepage"
homepagecfg "github.com/yusing/godoxy/internal/homepage/types"
netutils "github.com/yusing/godoxy/internal/net" netutils "github.com/yusing/godoxy/internal/net"
nettypes "github.com/yusing/godoxy/internal/net/types" nettypes "github.com/yusing/godoxy/internal/net/types"
"github.com/yusing/godoxy/internal/proxmox" "github.com/yusing/godoxy/internal/proxmox"
@@ -22,7 +23,6 @@ import (
"github.com/yusing/goutils/task" "github.com/yusing/goutils/task"
"github.com/yusing/godoxy/internal/common" "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/logging/accesslog"
"github.com/yusing/godoxy/internal/route/rules" "github.com/yusing/godoxy/internal/route/rules"
route "github.com/yusing/godoxy/internal/route/types" route "github.com/yusing/godoxy/internal/route/types"
@@ -676,7 +676,7 @@ func (r *Route) FinalizeHomepageConfig() {
} }
if hp.Category == "" { if hp.Category == "" {
if config.GetInstance().Value().Homepage.UseDefaultCategories { if homepagecfg.ActiveConfig.Load().UseDefaultCategories {
for _, ref := range refs { for _, ref := range refs {
if category, ok := homepage.PredefinedCategories[ref]; ok { if category, ok := homepage.PredefinedCategories[ref]; ok {
hp.Category = category hp.Category = category

View File

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

View File

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