diff --git a/internal/bootstrap/db.go b/internal/bootstrap/db.go index 11e1e64..5ee01c5 100644 --- a/internal/bootstrap/db.go +++ b/internal/bootstrap/db.go @@ -12,6 +12,7 @@ import ( "github.com/synctv-org/synctv/cmd/flags" "github.com/synctv-org/synctv/internal/conf" "github.com/synctv-org/synctv/internal/db" + "github.com/synctv-org/synctv/internal/version" "github.com/synctv-org/synctv/utils" "gorm.io/driver/mysql" "gorm.io/driver/postgres" @@ -143,7 +144,7 @@ func newDBLogger() logger.Interface { SlowThreshold: time.Second, LogLevel: logLevel, IgnoreRecordNotFoundError: true, - ParameterizedQueries: !flags.Dev, + ParameterizedQueries: !flags.Dev && version.Version != "dev", Colorful: true, }, ) diff --git a/internal/bootstrap/provider.go b/internal/bootstrap/provider.go index d1c88ed..f3d51c7 100644 --- a/internal/bootstrap/provider.go +++ b/internal/bootstrap/provider.go @@ -83,54 +83,54 @@ func InitProvider(ctx context.Context) (err error) { groupSettings := &ProviderGroupSetting{} ProviderGroupSettings[group] = groupSettings - groupSettings.Enabled = settings.NewBoolSetting(fmt.Sprintf("%s_enabled", group), false, group, settings.WithBeforeInitBool(func(bs settings.BoolSetting, b bool) error { + groupSettings.Enabled = settings.NewBoolSetting(fmt.Sprintf("%s_enabled", group), false, group, settings.WithBeforeInitBool(func(bs settings.BoolSetting, b bool) (bool, error) { defer Oauth2EnabledCache.Refresh() if b { - return providers.EnableProvider(op) + return b, providers.EnableProvider(op) } else { providers.DisableProvider(op) - return nil + return b, nil } - }), settings.WithBeforeSetBool(func(bs settings.BoolSetting, b bool) error { + }), settings.WithBeforeSetBool(func(bs settings.BoolSetting, b bool) (bool, error) { defer Oauth2EnabledCache.Refresh() if b { - return providers.EnableProvider(op) + return b, providers.EnableProvider(op) } else { providers.DisableProvider(op) - return nil + return b, nil } })) opt := provider.Oauth2Option{} - groupSettings.ClientID = settings.NewStringSetting(fmt.Sprintf("%s_client_id", group), opt.ClientID, group, settings.WithBeforeInitString(func(ss settings.StringSetting, s string) error { + groupSettings.ClientID = settings.NewStringSetting(fmt.Sprintf("%s_client_id", group), opt.ClientID, group, settings.WithBeforeInitString(func(ss settings.StringSetting, s string) (string, error) { opt.ClientID = s pi.Init(opt) - return nil - }), settings.WithBeforeSetString(func(ss settings.StringSetting, s string) error { + return s, nil + }), settings.WithBeforeSetString(func(ss settings.StringSetting, s string) (string, error) { opt.ClientID = s pi.Init(opt) - return nil + return s, nil })) - groupSettings.ClientSecret = settings.NewStringSetting(fmt.Sprintf("%s_client_secret", group), opt.ClientSecret, group, settings.WithBeforeInitString(func(ss settings.StringSetting, s string) error { + groupSettings.ClientSecret = settings.NewStringSetting(fmt.Sprintf("%s_client_secret", group), opt.ClientSecret, group, settings.WithBeforeInitString(func(ss settings.StringSetting, s string) (string, error) { opt.ClientSecret = s pi.Init(opt) - return nil - }), settings.WithBeforeSetString(func(ss settings.StringSetting, s string) error { + return s, nil + }), settings.WithBeforeSetString(func(ss settings.StringSetting, s string) (string, error) { opt.ClientSecret = s pi.Init(opt) - return nil + return s, nil })) - groupSettings.RedirectURL = settings.NewStringSetting(fmt.Sprintf("%s_redirect_url", group), opt.RedirectURL, group, settings.WithBeforeInitString(func(ss settings.StringSetting, s string) error { + groupSettings.RedirectURL = settings.NewStringSetting(fmt.Sprintf("%s_redirect_url", group), opt.RedirectURL, group, settings.WithBeforeInitString(func(ss settings.StringSetting, s string) (string, error) { opt.RedirectURL = s pi.Init(opt) - return nil - }), settings.WithBeforeSetString(func(ss settings.StringSetting, s string) error { + return s, nil + }), settings.WithBeforeSetString(func(ss settings.StringSetting, s string) (string, error) { opt.RedirectURL = s pi.Init(opt) - return nil + return s, nil })) groupSettings.DisableUserSignup = settings.NewBoolSetting(fmt.Sprintf("%s_disable_user_signup", group), false, group) diff --git a/internal/model/setting.go b/internal/model/setting.go index f8f8c40..34a02a0 100644 --- a/internal/model/setting.go +++ b/internal/model/setting.go @@ -21,6 +21,7 @@ const ( SettingGroupProxy SettingGroup = "proxy" SettingGroupRtmp SettingGroup = "rtmp" SettingGroupDatabase SettingGroup = "database" + SettingGroupServer SettingGroup = "server" SettingGroupOauth2 SettingGroup = "oauth2" ) diff --git a/internal/settings/bool.go b/internal/settings/bool.go index fc669cc..4c04101 100644 --- a/internal/settings/bool.go +++ b/internal/settings/bool.go @@ -24,18 +24,18 @@ type Bool struct { setting defaultValue bool value uint32 - beforeInit, beforeSet func(BoolSetting, bool) error + beforeInit, beforeSet func(BoolSetting, bool) (bool, error) } type BoolSettingOption func(*Bool) -func WithBeforeInitBool(beforeInit func(BoolSetting, bool) error) BoolSettingOption { +func WithBeforeInitBool(beforeInit func(BoolSetting, bool) (bool, error)) BoolSettingOption { return func(s *Bool) { s.beforeInit = beforeInit } } -func WithBeforeSetBool(beforeSet func(BoolSetting, bool) error) BoolSettingOption { +func WithBeforeSetBool(beforeSet func(BoolSetting, bool) (bool, error)) BoolSettingOption { return func(s *Bool) { s.beforeSet = beforeSet } @@ -76,7 +76,7 @@ func (b *Bool) Init(value string) error { } if b.beforeInit != nil { - err = b.beforeInit(b, v) + v, err = b.beforeInit(b, v) if err != nil { return err } @@ -117,7 +117,7 @@ func (b *Bool) SetString(value string) error { } if b.beforeSet != nil { - err = b.beforeSet(b, v) + v, err = b.beforeSet(b, v) if err != nil { return err } @@ -132,20 +132,20 @@ func (b *Bool) SetString(value string) error { return nil } -func (b *Bool) Set(value bool) (err error) { +func (b *Bool) Set(v bool) (err error) { if b.beforeSet != nil { - err = b.beforeSet(b, value) + v, err = b.beforeSet(b, v) if err != nil { return err } } - err = db.UpdateSettingItemValue(b.name, b.Stringify(value)) + err = db.UpdateSettingItemValue(b.name, b.Stringify(v)) if err != nil { return err } - b.set(value) + b.set(v) return } diff --git a/internal/settings/floate64.go b/internal/settings/floate64.go index 10d5709..c70d222 100644 --- a/internal/settings/floate64.go +++ b/internal/settings/floate64.go @@ -26,7 +26,7 @@ type Float64 struct { defaultValue float64 value uint64 validator func(float64) error - beforeInit, beforeSet func(Float64Setting, float64) error + beforeInit, beforeSet func(Float64Setting, float64) (float64, error) } type Float64SettingOption func(*Float64) @@ -37,13 +37,13 @@ func WithValidatorFloat64(validator func(float64) error) Float64SettingOption { } } -func WithBeforeInitFloat64(beforeInit func(Float64Setting, float64) error) Float64SettingOption { +func WithBeforeInitFloat64(beforeInit func(Float64Setting, float64) (float64, error)) Float64SettingOption { return func(s *Float64) { s.beforeInit = beforeInit } } -func WithBeforeSetFloat64(beforeSet func(Float64Setting, float64) error) Float64SettingOption { +func WithBeforeSetFloat64(beforeSet func(Float64Setting, float64) (float64, error)) Float64SettingOption { return func(s *Float64) { s.beforeSet = beforeSet } @@ -87,7 +87,7 @@ func (f *Float64) Init(value string) error { } if f.beforeInit != nil { - err = f.beforeInit(f, v) + v, err = f.beforeInit(f, v) if err != nil { return err } @@ -120,7 +120,7 @@ func (f *Float64) SetString(value string) error { } if f.beforeSet != nil { - err = f.beforeSet(f, v) + v, err = f.beforeSet(f, v) if err != nil { return err } @@ -139,27 +139,27 @@ func (f *Float64) set(value float64) { atomic.StoreUint64(&f.value, math.Float64bits(value)) } -func (f *Float64) Set(value float64) (err error) { +func (f *Float64) Set(v float64) (err error) { if f.validator != nil { - err = f.validator(value) + err = f.validator(v) if err != nil { return err } } if f.beforeSet != nil { - err = f.beforeSet(f, value) + v, err = f.beforeSet(f, v) if err != nil { return err } } - err = db.UpdateSettingItemValue(f.name, f.Stringify(value)) + err = db.UpdateSettingItemValue(f.name, f.Stringify(v)) if err != nil { return err } - f.set(value) + f.set(v) return } diff --git a/internal/settings/int64.go b/internal/settings/int64.go index 0d0f2b0..d00ad7b 100644 --- a/internal/settings/int64.go +++ b/internal/settings/int64.go @@ -25,7 +25,7 @@ type Int64 struct { defaultValue int64 value int64 validator func(int64) error - beforeInit, beforeSet func(Int64Setting, int64) error + beforeInit, beforeSet func(Int64Setting, int64) (int64, error) } type Int64SettingOption func(*Int64) @@ -36,13 +36,13 @@ func WithValidatorInt64(validator func(int64) error) Int64SettingOption { } } -func WithBeforeInitInt64(beforeInit func(Int64Setting, int64) error) Int64SettingOption { +func WithBeforeInitInt64(beforeInit func(Int64Setting, int64) (int64, error)) Int64SettingOption { return func(s *Int64) { s.beforeInit = beforeInit } } -func WithBeforeSetInt64(beforeSet func(Int64Setting, int64) error) Int64SettingOption { +func WithBeforeSetInt64(beforeSet func(Int64Setting, int64) (int64, error)) Int64SettingOption { return func(s *Int64) { s.beforeSet = beforeSet } @@ -86,7 +86,7 @@ func (i *Int64) Init(value string) error { } if i.beforeInit != nil { - err = i.beforeInit(i, v) + v, err = i.beforeInit(i, v) if err != nil { return err } @@ -119,7 +119,7 @@ func (i *Int64) SetString(value string) error { } if i.beforeSet != nil { - err = i.beforeSet(i, v) + v, err = i.beforeSet(i, v) if err != nil { return err } @@ -138,27 +138,27 @@ func (i *Int64) set(value int64) { atomic.StoreInt64(&i.value, value) } -func (i *Int64) Set(value int64) (err error) { +func (i *Int64) Set(v int64) (err error) { if i.validator != nil { - err = i.validator(value) + err = i.validator(v) if err != nil { return err } } if i.beforeSet != nil { - err = i.beforeSet(i, value) + v, err = i.beforeSet(i, v) if err != nil { return err } } - err = db.UpdateSettingItemValue(i.name, i.Stringify(value)) + err = db.UpdateSettingItemValue(i.name, i.Stringify(v)) if err != nil { return err } - i.set(value) + i.set(v) return } diff --git a/internal/settings/string.go b/internal/settings/string.go index fe8b495..0475b88 100644 --- a/internal/settings/string.go +++ b/internal/settings/string.go @@ -25,7 +25,7 @@ type String struct { lock sync.RWMutex value string validator func(string) error - beforeInit, beforeSet func(StringSetting, string) error + beforeInit, beforeSet func(StringSetting, string) (string, error) } type StringSettingOption func(*String) @@ -36,13 +36,13 @@ func WithValidatorString(validator func(string) error) StringSettingOption { } } -func WithBeforeInitString(beforeInit func(StringSetting, string) error) StringSettingOption { +func WithBeforeInitString(beforeInit func(StringSetting, string) (string, error)) StringSettingOption { return func(s *String) { s.beforeInit = beforeInit } } -func WithBeforeSetString(beforeSet func(StringSetting, string) error) StringSettingOption { +func WithBeforeSetString(beforeSet func(StringSetting, string) (string, error)) StringSettingOption { return func(s *String) { s.beforeSet = beforeSet } @@ -82,7 +82,7 @@ func (s *String) Init(value string) error { } if s.beforeInit != nil { - err = s.beforeInit(s, v) + v, err = s.beforeInit(s, v) if err != nil { return err } @@ -115,7 +115,7 @@ func (s *String) SetString(value string) error { } if s.beforeSet != nil { - err = s.beforeSet(s, v) + v, err = s.beforeSet(s, v) if err != nil { return err } @@ -136,27 +136,27 @@ func (s *String) set(value string) { s.value = value } -func (s *String) Set(value string) (err error) { +func (s *String) Set(v string) (err error) { if s.validator != nil { - err = s.validator(value) + err = s.validator(v) if err != nil { return err } } if s.beforeSet != nil { - err = s.beforeSet(s, value) + v, err = s.beforeSet(s, v) if err != nil { return err } } - err = db.UpdateSettingItemValue(s.name, s.Stringify(value)) + err = db.UpdateSettingItemValue(s.name, s.Stringify(v)) if err != nil { return err } - s.set(value) + s.set(v) return } diff --git a/internal/settings/var.go b/internal/settings/var.go index 33ac82e..ea2277f 100644 --- a/internal/settings/var.go +++ b/internal/settings/var.go @@ -36,7 +36,7 @@ var ( ) var ( - DatabaseVersion = NewStringSetting("database_version", "0.0.1", model.SettingGroupDatabase, WithBeforeSetString(func(ss StringSetting, s string) error { - return errors.New("not support change database version") + DatabaseVersion = NewStringSetting("database_version", "0.0.1", model.SettingGroupDatabase, WithBeforeSetString(func(ss StringSetting, s string) (string, error) { + return "", errors.New("not support change database version") })) ) diff --git a/internal/version/version.go b/internal/version/version.go index 0b7a187..8afb45b 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -10,6 +10,8 @@ import ( "github.com/google/go-github/v56/github" log "github.com/sirupsen/logrus" "github.com/synctv-org/synctv/cmd/flags" + "github.com/synctv-org/synctv/internal/model" + "github.com/synctv-org/synctv/internal/settings" "github.com/synctv-org/synctv/utils" ) @@ -22,6 +24,11 @@ var ( Version string = "dev" WebVersion string = "dev" GitCommit string + _ = settings.NewStringSetting("version", "placeholder string", model.SettingGroupServer, settings.WithBeforeInitString(func(ss settings.StringSetting, s string) (string, error) { + return Version, nil + }), settings.WithBeforeSetString(func(ss settings.StringSetting, s string) (string, error) { + return "", errors.New("version can not be set") + })) ) type VersionInfo struct {