diff options
Diffstat (limited to 'internal/config')
| -rw-r--r-- | internal/config/config.go | 18 | ||||
| -rw-r--r-- | internal/config/gen/gen.go | 1 | ||||
| -rw-r--r-- | internal/config/helpers.gen.go | 30 | ||||
| -rw-r--r-- | internal/config/validate.go | 18 |
4 files changed, 59 insertions, 8 deletions
diff --git a/internal/config/config.go b/internal/config/config.go index f77c86c50..33b4553a8 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -18,6 +18,7 @@ package config import ( + "net/netip" "reflect" "time" @@ -163,14 +164,15 @@ type Configuration struct { SyslogProtocol string `name:"syslog-protocol" usage:"Protocol to use when directing logs to syslog. Leave empty to connect to local syslog."` SyslogAddress string `name:"syslog-address" usage:"Address:port to send syslog logs to. Leave empty to connect to local syslog."` - AdvancedCookiesSamesite string `name:"advanced-cookies-samesite" usage:"'strict' or 'lax', see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite"` - AdvancedRateLimitRequests int `name:"advanced-rate-limit-requests" usage:"Amount of HTTP requests to permit within a 5 minute window. 0 or less turns rate limiting off."` - AdvancedRateLimitExceptions []string `name:"advanced-rate-limit-exceptions" usage:"Slice of CIDRs to exclude from rate limit restrictions."` - AdvancedThrottlingMultiplier int `name:"advanced-throttling-multiplier" usage:"Multiplier to use per cpu for http request throttling. 0 or less turns throttling off."` - AdvancedThrottlingRetryAfter time.Duration `name:"advanced-throttling-retry-after" usage:"Retry-After duration response to send for throttled requests."` - AdvancedSenderMultiplier int `name:"advanced-sender-multiplier" usage:"Multiplier to use per cpu for batching outgoing fedi messages. 0 or less turns batching off (not recommended)."` - AdvancedCSPExtraURIs []string `name:"advanced-csp-extra-uris" usage:"Additional URIs to allow when building content-security-policy for media + images."` - AdvancedHeaderFilterMode string `name:"advanced-header-filter-mode" usage:"Set incoming request header filtering mode."` + AdvancedCookiesSamesite string `name:"advanced-cookies-samesite" usage:"'strict' or 'lax', see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite"` + AdvancedRateLimitRequests int `name:"advanced-rate-limit-requests" usage:"Amount of HTTP requests to permit within a 5 minute window. 0 or less turns rate limiting off."` + AdvancedRateLimitExceptions []string `name:"advanced-rate-limit-exceptions" usage:"Slice of CIDRs to exclude from rate limit restrictions."` + AdvancedRateLimitExceptionsParsed []netip.Prefix `name:"advanced-rate-limit-exceptions-parsed"` + AdvancedThrottlingMultiplier int `name:"advanced-throttling-multiplier" usage:"Multiplier to use per cpu for http request throttling. 0 or less turns throttling off."` + AdvancedThrottlingRetryAfter time.Duration `name:"advanced-throttling-retry-after" usage:"Retry-After duration response to send for throttled requests."` + AdvancedSenderMultiplier int `name:"advanced-sender-multiplier" usage:"Multiplier to use per cpu for batching outgoing fedi messages. 0 or less turns batching off (not recommended)."` + AdvancedCSPExtraURIs []string `name:"advanced-csp-extra-uris" usage:"Additional URIs to allow when building content-security-policy for media + images."` + AdvancedHeaderFilterMode string `name:"advanced-header-filter-mode" usage:"Set incoming request header filtering mode."` // HTTPClient configuration vars. HTTPClient HTTPClientConfiguration `name:"http-client"` diff --git a/internal/config/gen/gen.go b/internal/config/gen/gen.go index 9130f8606..a3742ee15 100644 --- a/internal/config/gen/gen.go +++ b/internal/config/gen/gen.go @@ -65,6 +65,7 @@ func main() { fmt.Fprint(output, license) fmt.Fprint(output, "package config\n\n") fmt.Fprint(output, "import (\n") + fmt.Fprint(output, "\t\"net/netip\"\n") fmt.Fprint(output, "\t\"time\"\n\n") fmt.Fprint(output, "\t\"codeberg.org/gruf/go-bytesize\"\n") fmt.Fprint(output, "\t\"github.com/superseriousbusiness/gotosocial/internal/language\"\n") diff --git a/internal/config/helpers.gen.go b/internal/config/helpers.gen.go index fd1b86898..0f8ec02ce 100644 --- a/internal/config/helpers.gen.go +++ b/internal/config/helpers.gen.go @@ -19,6 +19,7 @@ package config import ( + "net/netip" "time" "codeberg.org/gruf/go-bytesize" @@ -2681,6 +2682,35 @@ func GetAdvancedRateLimitExceptions() []string { return global.GetAdvancedRateLi // SetAdvancedRateLimitExceptions safely sets the value for global configuration 'AdvancedRateLimitExceptions' field func SetAdvancedRateLimitExceptions(v []string) { global.SetAdvancedRateLimitExceptions(v) } +// GetAdvancedRateLimitExceptionsParsed safely fetches the Configuration value for state's 'AdvancedRateLimitExceptionsParsed' field +func (st *ConfigState) GetAdvancedRateLimitExceptionsParsed() (v []netip.Prefix) { + st.mutex.RLock() + v = st.config.AdvancedRateLimitExceptionsParsed + st.mutex.RUnlock() + return +} + +// SetAdvancedRateLimitExceptionsParsed safely sets the Configuration value for state's 'AdvancedRateLimitExceptionsParsed' field +func (st *ConfigState) SetAdvancedRateLimitExceptionsParsed(v []netip.Prefix) { + st.mutex.Lock() + defer st.mutex.Unlock() + st.config.AdvancedRateLimitExceptionsParsed = v + st.reloadToViper() +} + +// AdvancedRateLimitExceptionsParsedFlag returns the flag name for the 'AdvancedRateLimitExceptionsParsed' field +func AdvancedRateLimitExceptionsParsedFlag() string { return "" } + +// GetAdvancedRateLimitExceptionsParsed safely fetches the value for global configuration 'AdvancedRateLimitExceptionsParsed' field +func GetAdvancedRateLimitExceptionsParsed() []netip.Prefix { + return global.GetAdvancedRateLimitExceptionsParsed() +} + +// SetAdvancedRateLimitExceptionsParsed safely sets the value for global configuration 'AdvancedRateLimitExceptionsParsed' field +func SetAdvancedRateLimitExceptionsParsed(v []netip.Prefix) { + global.SetAdvancedRateLimitExceptionsParsed(v) +} + // GetAdvancedThrottlingMultiplier safely fetches the Configuration value for state's 'AdvancedThrottlingMultiplier' field func (st *ConfigState) GetAdvancedThrottlingMultiplier() (v int) { st.mutex.RLock() diff --git a/internal/config/validate.go b/internal/config/validate.go index 723d5c931..c8ebd4f2d 100644 --- a/internal/config/validate.go +++ b/internal/config/validate.go @@ -19,6 +19,7 @@ package config import ( "fmt" + "net/netip" "net/url" "strings" @@ -168,5 +169,22 @@ func Validate() error { ) } + // Parse `advanced-rate-limit-exceptions` and set + // parsed versions on config to avoid reparsing calls. + rles := GetAdvancedRateLimitExceptions() + rlesParsed := make([]netip.Prefix, 0, len(rles)) + for _, rle := range rles { + parsed, err := netip.ParsePrefix(rle) + if err != nil { + errf( + "invalid entry %s in %s: %w", + rle, AdvancedRateLimitExceptionsFlag(), err, + ) + continue + } + rlesParsed = append(rlesParsed, parsed) + } + SetAdvancedRateLimitExceptionsParsed(rlesParsed) + return errs.Combine() } |
