forked from mirrors/gotosocial
move caches to sub-cache "gts" namespace, update envparsing, add cache config docs to example config
Signed-off-by: kim <grufwub@gmail.com>
This commit is contained in:
parent
d49e0a2ca6
commit
2a2c7e3978
9 changed files with 641 additions and 472 deletions
|
@ -164,6 +164,61 @@ db-tls-mode: "disable"
|
|||
# Default: ""
|
||||
db-tls-ca-cert: ""
|
||||
|
||||
cache:
|
||||
gts:
|
||||
###########################
|
||||
#### DATABASE CACHES ######
|
||||
###########################
|
||||
#
|
||||
# Database cache configuration:
|
||||
#
|
||||
# Allows configuration of caches used
|
||||
# when loading GTS models from the database.
|
||||
#
|
||||
# max-size = maximum cached objects count
|
||||
# ttl = cached object lifetime
|
||||
# sweep-freq = frequency to look for stale cache objects
|
||||
|
||||
account-max-size: 100
|
||||
account-ttl: "5m"
|
||||
account-sweep-freq: "10s"
|
||||
|
||||
block-max-size: 100
|
||||
block-ttl: "5m"
|
||||
block-sweep-freq: "10s"
|
||||
|
||||
domain-block-max-size: 1000
|
||||
domain-block-ttl: "24h"
|
||||
domain-block-sweep-freq: "1m"
|
||||
|
||||
emoji-max-size: 500
|
||||
emoji-ttl: "5m"
|
||||
emoji-sweep-freq: "10s"
|
||||
|
||||
emoji-category-max-size: 100
|
||||
emoji-category-ttl: "5m"
|
||||
emoji-category-sweep-freq: "10s"
|
||||
|
||||
mention-max-size: 500
|
||||
mention-ttl: "5m"
|
||||
mention-sweep-freq: "10s"
|
||||
|
||||
notification-max-size: 500
|
||||
notification-ttl: "5m"
|
||||
notification-sweep-freq: "10s"
|
||||
|
||||
status-max-size: 500
|
||||
status-ttl: "5m"
|
||||
status-sweep-freq: "10s"
|
||||
|
||||
tombstone-max-size: 100
|
||||
tombstone-ttl: "5m"
|
||||
tombstone-sweep-freq: "10s"
|
||||
|
||||
user-max-size: 100
|
||||
user-ttl: "5m"
|
||||
user-sweep-freq: "10s"
|
||||
|
||||
######################
|
||||
##### WEB CONFIG #####
|
||||
######################
|
||||
|
|
60
internal/cache/gts.go
vendored
60
internal/cache/gts.go
vendored
|
@ -99,34 +99,34 @@ func (c *gtsCaches) Init() {
|
|||
|
||||
func (c *gtsCaches) Start() {
|
||||
tryUntil("starting gtsmodel.Account cache", 5, func() bool {
|
||||
return c.account.Start(config.GetCacheAccountSweepFreq())
|
||||
return c.account.Start(config.GetCacheGTSAccountSweepFreq())
|
||||
})
|
||||
tryUntil("starting gtsmodel.Block cache", 5, func() bool {
|
||||
return c.block.Start(config.GetCacheBlockSweepFreq())
|
||||
return c.block.Start(config.GetCacheGTSBlockSweepFreq())
|
||||
})
|
||||
tryUntil("starting gtsmodel.DomainBlock cache", 5, func() bool {
|
||||
return c.domainBlock.Start(config.GetCacheDomainBlockSweepFreq())
|
||||
return c.domainBlock.Start(config.GetCacheGTSDomainBlockSweepFreq())
|
||||
})
|
||||
tryUntil("starting gtsmodel.Emoji cache", 5, func() bool {
|
||||
return c.emoji.Start(config.GetCacheEmojiSweepFreq())
|
||||
return c.emoji.Start(config.GetCacheGTSEmojiSweepFreq())
|
||||
})
|
||||
tryUntil("starting gtsmodel.EmojiCategory cache", 5, func() bool {
|
||||
return c.emojiCategory.Start(config.GetCacheEmojiCategorySweepFreq())
|
||||
return c.emojiCategory.Start(config.GetCacheGTSEmojiCategorySweepFreq())
|
||||
})
|
||||
tryUntil("starting gtsmodel.Mention cache", 5, func() bool {
|
||||
return c.mention.Start(config.GetCacheMentionSweepFreq())
|
||||
return c.mention.Start(config.GetCacheGTSMentionSweepFreq())
|
||||
})
|
||||
tryUntil("starting gtsmodel.Notification cache", 5, func() bool {
|
||||
return c.notification.Start(config.GetCacheNotificationSweepFreq())
|
||||
return c.notification.Start(config.GetCacheGTSNotificationSweepFreq())
|
||||
})
|
||||
tryUntil("starting gtsmodel.Status cache", 5, func() bool {
|
||||
return c.status.Start(config.GetCacheStatusSweepFreq())
|
||||
return c.status.Start(config.GetCacheGTSStatusSweepFreq())
|
||||
})
|
||||
tryUntil("starting gtsmodel.Tombstone cache", 5, func() bool {
|
||||
return c.tombstone.Start(config.GetCacheTombstoneSweepFreq())
|
||||
return c.tombstone.Start(config.GetCacheGTSTombstoneSweepFreq())
|
||||
})
|
||||
tryUntil("starting gtsmodel.User cache", 5, func() bool {
|
||||
return c.user.Start(config.GetCacheUserSweepFreq())
|
||||
return c.user.Start(config.GetCacheGTSUserSweepFreq())
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -194,8 +194,8 @@ func (c *gtsCaches) initAccount() {
|
|||
a2 := new(gtsmodel.Account)
|
||||
*a2 = *a1
|
||||
return a2
|
||||
}, config.GetCacheAccountMaxSize())
|
||||
c.account.SetTTL(config.GetCacheAccountTTL(), true)
|
||||
}, config.GetCacheGTSAccountMaxSize())
|
||||
c.account.SetTTL(config.GetCacheGTSAccountTTL(), true)
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initBlock() {
|
||||
|
@ -207,8 +207,8 @@ func (c *gtsCaches) initBlock() {
|
|||
b2 := new(gtsmodel.Block)
|
||||
*b2 = *b1
|
||||
return b2
|
||||
}, config.GetCacheBlockMaxSize())
|
||||
c.block.SetTTL(config.GetCacheBlockTTL(), true)
|
||||
}, config.GetCacheGTSBlockMaxSize())
|
||||
c.block.SetTTL(config.GetCacheGTSBlockTTL(), true)
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initDomainBlock() {
|
||||
|
@ -218,8 +218,8 @@ func (c *gtsCaches) initDomainBlock() {
|
|||
d2 := new(gtsmodel.DomainBlock)
|
||||
*d2 = *d1
|
||||
return d2
|
||||
}, config.GetCacheDomainBlockMaxSize())
|
||||
c.domainBlock.SetTTL(config.GetCacheDomainBlockTTL(), true)
|
||||
}, config.GetCacheGTSDomainBlockMaxSize())
|
||||
c.domainBlock.SetTTL(config.GetCacheGTSDomainBlockTTL(), true)
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initEmoji() {
|
||||
|
@ -232,8 +232,8 @@ func (c *gtsCaches) initEmoji() {
|
|||
e2 := new(gtsmodel.Emoji)
|
||||
*e2 = *e1
|
||||
return e2
|
||||
}, config.GetCacheEmojiMaxSize())
|
||||
c.emoji.SetTTL(config.GetCacheEmojiTTL(), true)
|
||||
}, config.GetCacheGTSEmojiMaxSize())
|
||||
c.emoji.SetTTL(config.GetCacheGTSEmojiTTL(), true)
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initEmojiCategory() {
|
||||
|
@ -244,8 +244,8 @@ func (c *gtsCaches) initEmojiCategory() {
|
|||
c2 := new(gtsmodel.EmojiCategory)
|
||||
*c2 = *c1
|
||||
return c2
|
||||
}, config.GetCacheEmojiCategoryMaxSize())
|
||||
c.emojiCategory.SetTTL(config.GetCacheEmojiCategoryTTL(), true)
|
||||
}, config.GetCacheGTSEmojiCategoryMaxSize())
|
||||
c.emojiCategory.SetTTL(config.GetCacheGTSEmojiCategoryTTL(), true)
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initMention() {
|
||||
|
@ -255,8 +255,8 @@ func (c *gtsCaches) initMention() {
|
|||
m2 := new(gtsmodel.Mention)
|
||||
*m2 = *m1
|
||||
return m2
|
||||
}, config.GetCacheMentionMaxSize())
|
||||
c.mention.SetTTL(config.GetCacheMentionTTL(), true)
|
||||
}, config.GetCacheGTSMentionMaxSize())
|
||||
c.mention.SetTTL(config.GetCacheGTSMentionTTL(), true)
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initNotification() {
|
||||
|
@ -266,8 +266,8 @@ func (c *gtsCaches) initNotification() {
|
|||
n2 := new(gtsmodel.Notification)
|
||||
*n2 = *n1
|
||||
return n2
|
||||
}, config.GetCacheNotificationMaxSize())
|
||||
c.notification.SetTTL(config.GetCacheNotificationTTL(), true)
|
||||
}, config.GetCacheGTSNotificationMaxSize())
|
||||
c.notification.SetTTL(config.GetCacheGTSNotificationTTL(), true)
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initStatus() {
|
||||
|
@ -279,8 +279,8 @@ func (c *gtsCaches) initStatus() {
|
|||
s2 := new(gtsmodel.Status)
|
||||
*s2 = *s1
|
||||
return s2
|
||||
}, config.GetCacheStatusMaxSize())
|
||||
c.status.SetTTL(config.GetCacheStatusTTL(), true)
|
||||
}, config.GetCacheGTSStatusMaxSize())
|
||||
c.status.SetTTL(config.GetCacheGTSStatusTTL(), true)
|
||||
}
|
||||
|
||||
// initTombstone will initialize the gtsmodel.Tombstone cache.
|
||||
|
@ -292,8 +292,8 @@ func (c *gtsCaches) initTombstone() {
|
|||
t2 := new(gtsmodel.Tombstone)
|
||||
*t2 = *t1
|
||||
return t2
|
||||
}, config.GetCacheTombstoneMaxSize())
|
||||
c.tombstone.SetTTL(config.GetCacheTombstoneTTL(), true)
|
||||
}, config.GetCacheGTSTombstoneMaxSize())
|
||||
c.tombstone.SetTTL(config.GetCacheGTSTombstoneTTL(), true)
|
||||
}
|
||||
|
||||
func (c *gtsCaches) initUser() {
|
||||
|
@ -307,6 +307,6 @@ func (c *gtsCaches) initUser() {
|
|||
u2 := new(gtsmodel.User)
|
||||
*u2 = *u1
|
||||
return u2
|
||||
}, config.GetCacheUserMaxSize())
|
||||
c.user.SetTTL(config.GetCacheUserTTL(), true)
|
||||
}, config.GetCacheGTSUserMaxSize())
|
||||
c.user.SetTTL(config.GetCacheGTSUserTTL(), true)
|
||||
}
|
||||
|
|
|
@ -131,7 +131,7 @@ type Configuration struct {
|
|||
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."`
|
||||
|
||||
// Cache configuration vars.
|
||||
Cache CacheConfig `name:"cache"`
|
||||
Cache CacheConfiguration `name:"cache"`
|
||||
|
||||
// TODO: move these elsewhere, these are more ephemeral vs long-running flags like above
|
||||
AdminAccountUsername string `name:"username" usage:"the username to create/delete/etc"`
|
||||
|
@ -141,7 +141,11 @@ type Configuration struct {
|
|||
AdminMediaPruneDryRun bool `name:"dry-run" usage:"perform a dry run and only log number of items eligible for pruning"`
|
||||
}
|
||||
|
||||
type CacheConfig struct {
|
||||
type CacheConfiguration struct {
|
||||
GTS GTSCacheConfiguration `name:"gts"`
|
||||
}
|
||||
|
||||
type GTSCacheConfiguration struct {
|
||||
AccountMaxSize int `name:"account-max-size"`
|
||||
AccountTTL time.Duration `name:"account-ttl"`
|
||||
AccountSweepFreq time.Duration `name:"account-sweep-freq"`
|
||||
|
|
|
@ -107,45 +107,47 @@ var Defaults = Configuration{
|
|||
AdvancedCookiesSamesite: "lax",
|
||||
AdvancedRateLimitRequests: 1000, // per 5 minutes
|
||||
|
||||
Cache: CacheConfig{
|
||||
AccountMaxSize: 100,
|
||||
AccountTTL: time.Minute * 5,
|
||||
AccountSweepFreq: time.Second * 10,
|
||||
Cache: CacheConfiguration{
|
||||
GTS: GTSCacheConfiguration{
|
||||
AccountMaxSize: 100,
|
||||
AccountTTL: time.Minute * 5,
|
||||
AccountSweepFreq: time.Second * 10,
|
||||
|
||||
BlockMaxSize: 100,
|
||||
BlockTTL: time.Minute * 5,
|
||||
BlockSweepFreq: time.Second * 10,
|
||||
BlockMaxSize: 100,
|
||||
BlockTTL: time.Minute * 5,
|
||||
BlockSweepFreq: time.Second * 10,
|
||||
|
||||
DomainBlockMaxSize: 1000,
|
||||
DomainBlockTTL: time.Hour * 24,
|
||||
DomainBlockSweepFreq: time.Minute,
|
||||
DomainBlockMaxSize: 1000,
|
||||
DomainBlockTTL: time.Hour * 24,
|
||||
DomainBlockSweepFreq: time.Minute,
|
||||
|
||||
EmojiMaxSize: 500,
|
||||
EmojiTTL: time.Minute * 5,
|
||||
EmojiSweepFreq: time.Second * 10,
|
||||
EmojiMaxSize: 500,
|
||||
EmojiTTL: time.Minute * 5,
|
||||
EmojiSweepFreq: time.Second * 10,
|
||||
|
||||
EmojiCategoryMaxSize: 100,
|
||||
EmojiCategoryTTL: time.Minute * 5,
|
||||
EmojiCategorySweepFreq: time.Second * 10,
|
||||
EmojiCategoryMaxSize: 100,
|
||||
EmojiCategoryTTL: time.Minute * 5,
|
||||
EmojiCategorySweepFreq: time.Second * 10,
|
||||
|
||||
MentionMaxSize: 500,
|
||||
MentionTTL: time.Minute * 5,
|
||||
MentionSweepFreq: time.Second * 10,
|
||||
MentionMaxSize: 500,
|
||||
MentionTTL: time.Minute * 5,
|
||||
MentionSweepFreq: time.Second * 10,
|
||||
|
||||
NotificationMaxSize: 500,
|
||||
NotificationTTL: time.Minute * 5,
|
||||
NotificationSweepFreq: time.Second * 10,
|
||||
NotificationMaxSize: 500,
|
||||
NotificationTTL: time.Minute * 5,
|
||||
NotificationSweepFreq: time.Second * 10,
|
||||
|
||||
StatusMaxSize: 500,
|
||||
StatusTTL: time.Minute * 5,
|
||||
StatusSweepFreq: time.Second * 10,
|
||||
StatusMaxSize: 500,
|
||||
StatusTTL: time.Minute * 5,
|
||||
StatusSweepFreq: time.Second * 10,
|
||||
|
||||
TombstoneMaxSize: 100,
|
||||
TombstoneTTL: time.Minute * 5,
|
||||
TombstoneSweepFreq: time.Second * 10,
|
||||
TombstoneMaxSize: 100,
|
||||
TombstoneTTL: time.Minute * 5,
|
||||
TombstoneSweepFreq: time.Second * 10,
|
||||
|
||||
UserMaxSize: 100,
|
||||
UserTTL: time.Minute * 5,
|
||||
UserSweepFreq: time.Second * 10,
|
||||
UserMaxSize: 100,
|
||||
UserTTL: time.Minute * 5,
|
||||
UserSweepFreq: time.Second * 10,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -26,8 +26,9 @@ import (
|
|||
"os/exec"
|
||||
"reflect"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||
"codeberg.org/gruf/go-bytesize"
|
||||
)
|
||||
|
||||
const license = `/*
|
||||
|
@ -49,6 +50,149 @@ const license = `/*
|
|||
*/
|
||||
`
|
||||
|
||||
type Configuration struct {
|
||||
LogLevel string `name:"log-level" usage:"Log level to run at: [trace, debug, info, warn, fatal]"`
|
||||
LogDbQueries bool `name:"log-db-queries" usage:"Log database queries verbosely when log-level is trace or debug"`
|
||||
ApplicationName string `name:"application-name" usage:"Name of the application, used in various places internally"`
|
||||
LandingPageUser string `name:"landing-page-user" usage:"the user that should be shown on the instance's landing page"`
|
||||
ConfigPath string `name:"config-path" usage:"Path to a file containing gotosocial configuration. Values set in this file will be overwritten by values set as env vars or arguments"`
|
||||
Host string `name:"host" usage:"Hostname to use for the server (eg., example.org, gotosocial.whatever.com). DO NOT change this on a server that's already run!"`
|
||||
AccountDomain string `name:"account-domain" usage:"Domain to use in account names (eg., example.org, whatever.com). If not set, will default to the setting for host. DO NOT change this on a server that's already run!"`
|
||||
Protocol string `name:"protocol" usage:"Protocol to use for the REST api of the server (only use http if you are debugging or behind a reverse proxy!)"`
|
||||
BindAddress string `name:"bind-address" usage:"Bind address to use for the GoToSocial server (eg., 0.0.0.0, 172.138.0.9, [::], localhost). For ipv6, enclose the address in square brackets, eg [2001:db8::fed1]. Default binds to all interfaces."`
|
||||
Port int `name:"port" usage:"Port to use for GoToSocial. Change this to 443 if you're running the binary directly on the host machine."`
|
||||
TrustedProxies []string `name:"trusted-proxies" usage:"Proxies to trust when parsing x-forwarded headers into real IPs."`
|
||||
SoftwareVersion string `name:"software-version" usage:""`
|
||||
|
||||
DbType string `name:"db-type" usage:"Database type: eg., postgres"`
|
||||
DbAddress string `name:"db-address" usage:"Database ipv4 address, hostname, or filename"`
|
||||
DbPort int `name:"db-port" usage:"Database port"`
|
||||
DbUser string `name:"db-user" usage:"Database username"`
|
||||
DbPassword string `name:"db-password" usage:"Database password"`
|
||||
DbDatabase string `name:"db-database" usage:"Database name"`
|
||||
DbTLSMode string `name:"db-tls-mode" usage:"Database tls mode"`
|
||||
DbTLSCACert string `name:"db-tls-ca-cert" usage:"Path to CA cert for db tls connection"`
|
||||
|
||||
WebTemplateBaseDir string `name:"web-template-base-dir" usage:"Basedir for html templating files for rendering pages and composing emails."`
|
||||
WebAssetBaseDir string `name:"web-asset-base-dir" usage:"Directory to serve static assets from, accessible at example.org/assets/"`
|
||||
|
||||
InstanceExposePeers bool `name:"instance-expose-peers" usage:"Allow unauthenticated users to query /api/v1/instance/peers?filter=open"`
|
||||
InstanceExposeSuspended bool `name:"instance-expose-suspended" usage:"Expose suspended instances via web UI, and allow unauthenticated users to query /api/v1/instance/peers?filter=suspended"`
|
||||
InstanceExposePublicTimeline bool `name:"instance-expose-public-timeline" usage:"Allow unauthenticated users to query /api/v1/timelines/public"`
|
||||
InstanceDeliverToSharedInboxes bool `name:"instance-deliver-to-shared-inboxes" usage:"Deliver federated messages to shared inboxes, if they're available."`
|
||||
|
||||
AccountsRegistrationOpen bool `name:"accounts-registration-open" usage:"Allow anyone to submit an account signup request. If false, server will be invite-only."`
|
||||
AccountsApprovalRequired bool `name:"accounts-approval-required" usage:"Do account signups require approval by an admin or moderator before user can log in? If false, new registrations will be automatically approved."`
|
||||
AccountsReasonRequired bool `name:"accounts-reason-required" usage:"Do new account signups require a reason to be submitted on registration?"`
|
||||
AccountsAllowCustomCSS bool `name:"accounts-allow-custom-css" usage:"Allow accounts to enable custom CSS for their profile pages and statuses."`
|
||||
|
||||
MediaImageMaxSize bytesize.Size `name:"media-image-max-size" usage:"Max size of accepted images in bytes"`
|
||||
MediaVideoMaxSize bytesize.Size `name:"media-video-max-size" usage:"Max size of accepted videos in bytes"`
|
||||
MediaDescriptionMinChars int `name:"media-description-min-chars" usage:"Min required chars for an image description"`
|
||||
MediaDescriptionMaxChars int `name:"media-description-max-chars" usage:"Max permitted chars for an image description"`
|
||||
MediaRemoteCacheDays int `name:"media-remote-cache-days" usage:"Number of days to locally cache media from remote instances. If set to 0, remote media will be kept indefinitely."`
|
||||
MediaEmojiLocalMaxSize bytesize.Size `name:"media-emoji-local-max-size" usage:"Max size in bytes of emojis uploaded to this instance via the admin API."`
|
||||
MediaEmojiRemoteMaxSize bytesize.Size `name:"media-emoji-remote-max-size" usage:"Max size in bytes of emojis to download from other instances."`
|
||||
|
||||
StorageBackend string `name:"storage-backend" usage:"Storage backend to use for media attachments"`
|
||||
StorageLocalBasePath string `name:"storage-local-base-path" usage:"Full path to an already-created directory where gts should store/retrieve media files. Subfolders will be created within this dir."`
|
||||
StorageS3Endpoint string `name:"storage-s3-endpoint" usage:"S3 Endpoint URL (e.g 'minio.example.org:9000')"`
|
||||
StorageS3AccessKey string `name:"storage-s3-access-key" usage:"S3 Access Key"`
|
||||
StorageS3SecretKey string `name:"storage-s3-secret-key" usage:"S3 Secret Key"`
|
||||
StorageS3UseSSL bool `name:"storage-s3-use-ssl" usage:"Use SSL for S3 connections. Only set this to 'false' when testing locally"`
|
||||
StorageS3BucketName string `name:"storage-s3-bucket" usage:"Place blobs in this bucket"`
|
||||
StorageS3Proxy bool `name:"storage-s3-proxy" usage:"Proxy S3 contents through GoToSocial instead of redirecting to a presigned URL"`
|
||||
|
||||
StatusesMaxChars int `name:"statuses-max-chars" usage:"Max permitted characters for posted statuses"`
|
||||
StatusesCWMaxChars int `name:"statuses-cw-max-chars" usage:"Max permitted characters for content/spoiler warnings on statuses"`
|
||||
StatusesPollMaxOptions int `name:"statuses-poll-max-options" usage:"Max amount of options permitted on a poll"`
|
||||
StatusesPollOptionMaxChars int `name:"statuses-poll-option-max-chars" usage:"Max amount of characters for a poll option"`
|
||||
StatusesMediaMaxFiles int `name:"statuses-media-max-files" usage:"Maximum number of media files/attachments per status"`
|
||||
|
||||
LetsEncryptEnabled bool `name:"letsencrypt-enabled" usage:"Enable letsencrypt TLS certs for this server. If set to true, then cert dir also needs to be set (or take the default)."`
|
||||
LetsEncryptPort int `name:"letsencrypt-port" usage:"Port to listen on for letsencrypt certificate challenges. Must not be the same as the GtS webserver/API port."`
|
||||
LetsEncryptCertDir string `name:"letsencrypt-cert-dir" usage:"Directory to store acquired letsencrypt certificates."`
|
||||
LetsEncryptEmailAddress string `name:"letsencrypt-email-address" usage:"Email address to use when requesting letsencrypt certs. Will receive updates on cert expiry etc."`
|
||||
|
||||
OIDCEnabled bool `name:"oidc-enabled" usage:"Enabled OIDC authorization for this instance. If set to true, then the other OIDC flags must also be set."`
|
||||
OIDCIdpName string `name:"oidc-idp-name" usage:"Name of the OIDC identity provider. Will be shown to the user when logging in."`
|
||||
OIDCSkipVerification bool `name:"oidc-skip-verification" usage:"Skip verification of tokens returned by the OIDC provider. Should only be set to 'true' for testing purposes, never in a production environment!"`
|
||||
OIDCIssuer string `name:"oidc-issuer" usage:"Address of the OIDC issuer. Should be the web address, including protocol, at which the issuer can be reached. Eg., 'https://example.org/auth'"`
|
||||
OIDCClientID string `name:"oidc-client-id" usage:"ClientID of GoToSocial, as registered with the OIDC provider."`
|
||||
OIDCClientSecret string `name:"oidc-client-secret" usage:"ClientSecret of GoToSocial, as registered with the OIDC provider."`
|
||||
OIDCScopes []string `name:"oidc-scopes" usage:"OIDC scopes."`
|
||||
OIDCLinkExisting bool `name:"oidc-link-existing" usage:"link existing user accounts to OIDC logins based on the stored email value"`
|
||||
|
||||
SMTPHost string `name:"smtp-host" usage:"Host of the smtp server. Eg., 'smtp.eu.mailgun.org'"`
|
||||
SMTPPort int `name:"smtp-port" usage:"Port of the smtp server. Eg., 587"`
|
||||
SMTPUsername string `name:"smtp-username" usage:"Username to authenticate with the smtp server as. Eg., 'postmaster@mail.example.org'"`
|
||||
SMTPPassword string `name:"smtp-password" usage:"Password to pass to the smtp server."`
|
||||
SMTPFrom string `name:"smtp-from" usage:"Address to use as the 'from' field of the email. Eg., 'gotosocial@example.org'"`
|
||||
|
||||
SyslogEnabled bool `name:"syslog-enabled" usage:"Enable the syslog logging hook. Logs will be mirrored to the configured destination."`
|
||||
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."`
|
||||
|
||||
// Cache configuration vars.
|
||||
Cache CacheConfiguration `name:"cache"`
|
||||
|
||||
// TODO: move these elsewhere, these are more ephemeral vs long-running flags like above
|
||||
AdminAccountUsername string `name:"username" usage:"the username to create/delete/etc"`
|
||||
AdminAccountEmail string `name:"email" usage:"the email address of this account"`
|
||||
AdminAccountPassword string `name:"password" usage:"the password to set for this account"`
|
||||
AdminTransPath string `name:"path" usage:"the path of the file to import from/export to"`
|
||||
AdminMediaPruneDryRun bool `name:"dry-run" usage:"perform a dry run and only log number of items eligible for pruning"`
|
||||
}
|
||||
|
||||
type CacheConfiguration struct {
|
||||
GTS GTSCacheConfiguration `name:"gts"`
|
||||
}
|
||||
|
||||
type GTSCacheConfiguration struct {
|
||||
AccountMaxSize int `name:"account-max-size"`
|
||||
AccountTTL time.Duration `name:"account-ttl"`
|
||||
AccountSweepFreq time.Duration `name:"account-sweep-freq"`
|
||||
|
||||
BlockMaxSize int `name:"block-max-size"`
|
||||
BlockTTL time.Duration `name:"block-ttl"`
|
||||
BlockSweepFreq time.Duration `name:"block-sweep-freq"`
|
||||
|
||||
DomainBlockMaxSize int `name:"domain-block-max-size"`
|
||||
DomainBlockTTL time.Duration `name:"domain-block-ttl"`
|
||||
DomainBlockSweepFreq time.Duration `name:"domain-block-sweep-freq"`
|
||||
|
||||
EmojiMaxSize int `name:"emoji-max-size"`
|
||||
EmojiTTL time.Duration `name:"emoji-ttl"`
|
||||
EmojiSweepFreq time.Duration `name:"emoji-sweep-freq"`
|
||||
|
||||
EmojiCategoryMaxSize int `name:"emoji-category-max-size"`
|
||||
EmojiCategoryTTL time.Duration `name:"emoji-category-ttl"`
|
||||
EmojiCategorySweepFreq time.Duration `name:"emoji-category-sweep-freq"`
|
||||
|
||||
MentionMaxSize int `name:"mention-max-size"`
|
||||
MentionTTL time.Duration `name:"mention-ttl"`
|
||||
MentionSweepFreq time.Duration `name:"mention-sweep-freq"`
|
||||
|
||||
NotificationMaxSize int `name:"notification-max-size"`
|
||||
NotificationTTL time.Duration `name:"notification-ttl"`
|
||||
NotificationSweepFreq time.Duration `name:"notification-sweep-freq"`
|
||||
|
||||
StatusMaxSize int `name:"status-max-size"`
|
||||
StatusTTL time.Duration `name:"status-ttl"`
|
||||
StatusSweepFreq time.Duration `name:"status-sweep-freq"`
|
||||
|
||||
TombstoneMaxSize int `name:"tombstone-max-size"`
|
||||
TombstoneTTL time.Duration `name:"tombstone-ttl"`
|
||||
TombstoneSweepFreq time.Duration `name:"tombstone-sweep-freq"`
|
||||
|
||||
UserMaxSize int `name:"user-max-size"`
|
||||
UserTTL time.Duration `name:"user-ttl"`
|
||||
UserSweepFreq time.Duration `name:"user-sweep-freq"`
|
||||
}
|
||||
|
||||
func main() {
|
||||
var out string
|
||||
|
||||
|
@ -66,7 +210,7 @@ func main() {
|
|||
fmt.Fprint(output, license)
|
||||
fmt.Fprint(output, "package config\n\n")
|
||||
fmt.Fprint(output, "import \"codeberg.org/gruf/go-bytesize\"\n\n")
|
||||
generateFields(output, nil, reflect.TypeOf(config.Configuration{}))
|
||||
generateFields(output, nil, reflect.TypeOf(Configuration{}))
|
||||
_ = output.Close()
|
||||
_ = exec.Command("gofumports", "-w", out).Run()
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
7
internal/config/testdata/test.yaml
vendored
7
internal/config/testdata/test.yaml
vendored
|
@ -412,6 +412,7 @@ syslog-address: "localhost:514"
|
|||
|
||||
# Cache configuration
|
||||
cache:
|
||||
account-max-size: 99
|
||||
account-ttl: "3h"
|
||||
account-sweep-freq: "1s"
|
||||
gts:
|
||||
account-max-size: 99
|
||||
account-ttl: "3h"
|
||||
account-sweep-freq: "1s"
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
set -eu
|
||||
|
||||
EXPECT='{"account-domain":"peepee","accounts-allow-custom-css":true,"accounts-approval-required":false,"accounts-reason-required":false,"accounts-registration-open":true,"advanced-cookies-samesite":"strict","advanced-rate-limit-requests":6969,"application-name":"gts","bind-address":"127.0.0.1","cache":{"account-max-size":100,"account-sweep-freq":10000000000,"account-ttl":300000000000,"block-max-size":100,"block-sweep-freq":10000000000,"block-ttl":300000000000,"domain-block-max-size":1000,"domain-block-sweep-freq":60000000000,"domain-block-ttl":86400000000000,"emoji-category-max-size":100,"emoji-category-sweep-freq":10000000000,"emoji-category-ttl":300000000000,"emoji-max-size":500,"emoji-sweep-freq":10000000000,"emoji-ttl":300000000000,"mention-max-size":500,"mention-sweep-freq":10000000000,"mention-ttl":300000000000,"notification-max-size":500,"notification-sweep-freq":10000000000,"notification-ttl":300000000000,"status-max-size":500,"status-sweep-freq":10000000000,"status-ttl":300000000000,"tombstone-max-size":100,"tombstone-sweep-freq":10000000000,"tombstone-ttl":300000000000,"user-max-size":100,"user-sweep-freq":10000000000,"user-ttl":300000000000},"config-path":"internal/config/testdata/test.yaml","db-address":":memory:","db-database":"gotosocial_prod","db-password":"hunter2","db-port":6969,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"sqlite","db-user":"sex-haver","dry-run":false,"email":"","host":"example.com","instance-deliver-to-shared-inboxes":false,"instance-expose-peers":true,"instance-expose-public-timeline":true,"instance-expose-suspended":true,"landing-page-user":"admin","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":true,"log-level":"info","media-description-max-chars":5000,"media-description-min-chars":69,"media-emoji-local-max-size":420,"media-emoji-remote-max-size":420,"media-image-max-size":420,"media-remote-cache-days":30,"media-video-max-size":420,"oidc-client-id":"1234","oidc-client-secret":"shhhh its a secret","oidc-enabled":true,"oidc-idp-name":"sex-haver","oidc-issuer":"whoknows","oidc-link-existing":true,"oidc-scopes":["read","write"],"oidc-skip-verification":true,"password":"","path":"","port":6969,"protocol":"http","smtp-from":"queen.rip.in.piss@terfisland.org","smtp-host":"example.com","smtp-password":"hunter2","smtp-port":4269,"smtp-username":"sex-haver","software-version":"","statuses-cw-max-chars":420,"statuses-max-chars":69,"statuses-media-max-files":1,"statuses-poll-max-options":1,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/root/store","storage-s3-access-key":"minio","storage-s3-bucket":"gts","storage-s3-endpoint":"localhost:9000","storage-s3-proxy":true,"storage-s3-secret-key":"miniostorage","storage-s3-use-ssl":false,"syslog-address":"127.0.0.1:6969","syslog-enabled":true,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","docker.host.local"],"username":"","web-asset-base-dir":"/root","web-template-base-dir":"/root"}'
|
||||
EXPECT='{"account-domain":"peepee","accounts-allow-custom-css":true,"accounts-approval-required":false,"accounts-reason-required":false,"accounts-registration-open":true,"advanced-cookies-samesite":"strict","advanced-rate-limit-requests":6969,"application-name":"gts","bind-address":"127.0.0.1","cache":{"gts":{"account-max-size":99,"account-sweep-freq":1000000000,"account-ttl":10800000000000,"block-max-size":100,"block-sweep-freq":10000000000,"block-ttl":300000000000,"domain-block-max-size":1000,"domain-block-sweep-freq":60000000000,"domain-block-ttl":86400000000000,"emoji-category-max-size":100,"emoji-category-sweep-freq":10000000000,"emoji-category-ttl":300000000000,"emoji-max-size":500,"emoji-sweep-freq":10000000000,"emoji-ttl":300000000000,"mention-max-size":500,"mention-sweep-freq":10000000000,"mention-ttl":300000000000,"notification-max-size":500,"notification-sweep-freq":10000000000,"notification-ttl":300000000000,"status-max-size":500,"status-sweep-freq":10000000000,"status-ttl":300000000000,"tombstone-max-size":100,"tombstone-sweep-freq":10000000000,"tombstone-ttl":300000000000,"user-max-size":100,"user-sweep-freq":10000000000,"user-ttl":300000000000}},"config-path":"internal/config/testdata/test.yaml","db-address":":memory:","db-database":"gotosocial_prod","db-password":"hunter2","db-port":6969,"db-tls-ca-cert":"","db-tls-mode":"disable","db-type":"sqlite","db-user":"sex-haver","dry-run":false,"email":"","host":"example.com","instance-deliver-to-shared-inboxes":false,"instance-expose-peers":true,"instance-expose-public-timeline":true,"instance-expose-suspended":true,"landing-page-user":"admin","letsencrypt-cert-dir":"/gotosocial/storage/certs","letsencrypt-email-address":"","letsencrypt-enabled":true,"letsencrypt-port":80,"log-db-queries":true,"log-level":"info","media-description-max-chars":5000,"media-description-min-chars":69,"media-emoji-local-max-size":420,"media-emoji-remote-max-size":420,"media-image-max-size":420,"media-remote-cache-days":30,"media-video-max-size":420,"oidc-client-id":"1234","oidc-client-secret":"shhhh its a secret","oidc-enabled":true,"oidc-idp-name":"sex-haver","oidc-issuer":"whoknows","oidc-link-existing":true,"oidc-scopes":["read","write"],"oidc-skip-verification":true,"password":"","path":"","port":6969,"protocol":"http","smtp-from":"queen.rip.in.piss@terfisland.org","smtp-host":"example.com","smtp-password":"hunter2","smtp-port":4269,"smtp-username":"sex-haver","software-version":"","statuses-cw-max-chars":420,"statuses-max-chars":69,"statuses-media-max-files":1,"statuses-poll-max-options":1,"statuses-poll-option-max-chars":50,"storage-backend":"local","storage-local-base-path":"/root/store","storage-s3-access-key":"minio","storage-s3-bucket":"gts","storage-s3-endpoint":"localhost:9000","storage-s3-proxy":true,"storage-s3-secret-key":"miniostorage","storage-s3-use-ssl":false,"syslog-address":"127.0.0.1:6969","syslog-enabled":true,"syslog-protocol":"udp","trusted-proxies":["127.0.0.1/32","docker.host.local"],"username":"","web-asset-base-dir":"/root","web-template-base-dir":"/root"}'
|
||||
|
||||
# Set all the environment variables to
|
||||
# ensure that these are parsed without panic
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
package testrig
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/coreos/go-oidc/v3/oidc"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||
)
|
||||
|
@ -113,45 +111,6 @@ var testDefaults = config.Configuration{
|
|||
|
||||
SoftwareVersion: "0.0.0-testrig",
|
||||
|
||||
Cache: config.CacheConfig{
|
||||
AccountMaxSize: 100,
|
||||
AccountTTL: time.Minute * 5,
|
||||
AccountSweepFreq: time.Second * 10,
|
||||
|
||||
BlockMaxSize: 100,
|
||||
BlockTTL: time.Minute * 5,
|
||||
BlockSweepFreq: time.Second * 10,
|
||||
|
||||
DomainBlockMaxSize: 1000,
|
||||
DomainBlockTTL: time.Hour * 24,
|
||||
DomainBlockSweepFreq: time.Minute,
|
||||
|
||||
EmojiMaxSize: 500,
|
||||
EmojiTTL: time.Minute * 5,
|
||||
EmojiSweepFreq: time.Second * 10,
|
||||
|
||||
EmojiCategoryMaxSize: 100,
|
||||
EmojiCategoryTTL: time.Minute * 5,
|
||||
EmojiCategorySweepFreq: time.Second * 10,
|
||||
|
||||
MentionMaxSize: 500,
|
||||
MentionTTL: time.Minute * 5,
|
||||
MentionSweepFreq: time.Second * 10,
|
||||
|
||||
NotificationMaxSize: 500,
|
||||
NotificationTTL: time.Minute * 5,
|
||||
NotificationSweepFreq: time.Second * 10,
|
||||
|
||||
StatusMaxSize: 500,
|
||||
StatusTTL: time.Minute * 5,
|
||||
StatusSweepFreq: time.Second * 10,
|
||||
|
||||
TombstoneMaxSize: 100,
|
||||
TombstoneTTL: time.Minute * 5,
|
||||
TombstoneSweepFreq: time.Second * 10,
|
||||
|
||||
UserMaxSize: 100,
|
||||
UserTTL: time.Minute * 5,
|
||||
UserSweepFreq: time.Second * 10,
|
||||
},
|
||||
// simply use cache defaults.
|
||||
Cache: config.Defaults.Cache,
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue