2021-04-19 19:42:19 +02:00
|
|
|
package config
|
|
|
|
|
2021-07-23 10:36:28 +02:00
|
|
|
import "github.com/coreos/go-oidc/v3/oidc"
|
|
|
|
|
2021-04-19 19:42:19 +02:00
|
|
|
// TestDefault returns a default config for testing
|
|
|
|
func TestDefault() *Config {
|
|
|
|
defaults := GetTestDefaults()
|
|
|
|
return &Config{
|
|
|
|
LogLevel: defaults.LogLevel,
|
|
|
|
ApplicationName: defaults.ApplicationName,
|
|
|
|
Host: defaults.Host,
|
|
|
|
Protocol: defaults.Protocol,
|
2021-07-24 19:02:41 +02:00
|
|
|
Port: defaults.Port,
|
2021-07-26 16:15:36 +02:00
|
|
|
TrustedProxies: defaults.TrustedProxies,
|
2021-06-24 14:26:08 +02:00
|
|
|
SoftwareVersion: defaults.SoftwareVersion,
|
2021-04-19 19:42:19 +02:00
|
|
|
DBConfig: &DBConfig{
|
|
|
|
Type: defaults.DbType,
|
|
|
|
Address: defaults.DbAddress,
|
|
|
|
Port: defaults.DbPort,
|
|
|
|
User: defaults.DbUser,
|
|
|
|
Password: defaults.DbPassword,
|
|
|
|
Database: defaults.DbDatabase,
|
|
|
|
ApplicationName: defaults.ApplicationName,
|
|
|
|
},
|
|
|
|
TemplateConfig: &TemplateConfig{
|
2021-06-21 19:46:10 +02:00
|
|
|
BaseDir: defaults.TemplateBaseDir,
|
|
|
|
AssetBaseDir: defaults.AssetBaseDir,
|
2021-04-19 19:42:19 +02:00
|
|
|
},
|
|
|
|
AccountsConfig: &AccountsConfig{
|
|
|
|
OpenRegistration: defaults.AccountsOpenRegistration,
|
|
|
|
RequireApproval: defaults.AccountsRequireApproval,
|
|
|
|
ReasonRequired: defaults.AccountsReasonRequired,
|
|
|
|
},
|
|
|
|
MediaConfig: &MediaConfig{
|
|
|
|
MaxImageSize: defaults.MediaMaxImageSize,
|
|
|
|
MaxVideoSize: defaults.MediaMaxVideoSize,
|
|
|
|
MinDescriptionChars: defaults.MediaMinDescriptionChars,
|
|
|
|
MaxDescriptionChars: defaults.MediaMaxDescriptionChars,
|
|
|
|
},
|
|
|
|
StorageConfig: &StorageConfig{
|
|
|
|
Backend: defaults.StorageBackend,
|
|
|
|
BasePath: defaults.StorageBasePath,
|
|
|
|
ServeProtocol: defaults.StorageServeProtocol,
|
|
|
|
ServeHost: defaults.StorageServeHost,
|
|
|
|
ServeBasePath: defaults.StorageServeBasePath,
|
|
|
|
},
|
|
|
|
StatusesConfig: &StatusesConfig{
|
|
|
|
MaxChars: defaults.StatusesMaxChars,
|
|
|
|
CWMaxChars: defaults.StatusesCWMaxChars,
|
|
|
|
PollMaxOptions: defaults.StatusesPollMaxOptions,
|
|
|
|
PollOptionMaxChars: defaults.StatusesPollOptionMaxChars,
|
|
|
|
MaxMediaFiles: defaults.StatusesMaxMediaFiles,
|
|
|
|
},
|
2021-05-09 11:25:13 +02:00
|
|
|
LetsEncryptConfig: &LetsEncryptConfig{
|
|
|
|
Enabled: defaults.LetsEncryptEnabled,
|
2021-07-24 19:02:41 +02:00
|
|
|
Port: defaults.LetsEncryptPort,
|
2021-05-09 11:25:13 +02:00
|
|
|
CertDir: defaults.LetsEncryptCertDir,
|
|
|
|
EmailAddress: defaults.LetsEncryptEmailAddress,
|
|
|
|
},
|
2021-07-23 10:36:28 +02:00
|
|
|
OIDCConfig: &OIDCConfig{
|
|
|
|
Enabled: defaults.OIDCEnabled,
|
|
|
|
IDPName: defaults.OIDCIdpName,
|
|
|
|
SkipVerification: defaults.OIDCSkipVerification,
|
|
|
|
Issuer: defaults.OIDCIssuer,
|
|
|
|
ClientID: defaults.OIDCClientID,
|
|
|
|
ClientSecret: defaults.OIDCClientSecret,
|
|
|
|
Scopes: defaults.OIDCScopes,
|
|
|
|
},
|
2021-04-19 19:42:19 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Default returns a config with all default values set
|
|
|
|
func Default() *Config {
|
|
|
|
defaults := GetDefaults()
|
|
|
|
return &Config{
|
|
|
|
LogLevel: defaults.LogLevel,
|
|
|
|
ApplicationName: defaults.ApplicationName,
|
|
|
|
Host: defaults.Host,
|
|
|
|
Protocol: defaults.Protocol,
|
2021-07-24 19:31:38 +02:00
|
|
|
Port: defaults.Port,
|
2021-07-26 16:15:36 +02:00
|
|
|
TrustedProxies: defaults.TrustedProxies,
|
2021-06-24 14:26:08 +02:00
|
|
|
SoftwareVersion: defaults.SoftwareVersion,
|
2021-04-19 19:42:19 +02:00
|
|
|
DBConfig: &DBConfig{
|
|
|
|
Type: defaults.DbType,
|
|
|
|
Address: defaults.DbAddress,
|
|
|
|
Port: defaults.DbPort,
|
|
|
|
User: defaults.DbUser,
|
|
|
|
Password: defaults.DbPassword,
|
|
|
|
Database: defaults.DbDatabase,
|
|
|
|
ApplicationName: defaults.ApplicationName,
|
|
|
|
},
|
|
|
|
TemplateConfig: &TemplateConfig{
|
2021-06-21 19:46:10 +02:00
|
|
|
BaseDir: defaults.TemplateBaseDir,
|
|
|
|
AssetBaseDir: defaults.AssetBaseDir,
|
2021-04-19 19:42:19 +02:00
|
|
|
},
|
|
|
|
AccountsConfig: &AccountsConfig{
|
|
|
|
OpenRegistration: defaults.AccountsOpenRegistration,
|
|
|
|
RequireApproval: defaults.AccountsRequireApproval,
|
|
|
|
ReasonRequired: defaults.AccountsReasonRequired,
|
|
|
|
},
|
|
|
|
MediaConfig: &MediaConfig{
|
|
|
|
MaxImageSize: defaults.MediaMaxImageSize,
|
|
|
|
MaxVideoSize: defaults.MediaMaxVideoSize,
|
|
|
|
MinDescriptionChars: defaults.MediaMinDescriptionChars,
|
|
|
|
MaxDescriptionChars: defaults.MediaMaxDescriptionChars,
|
|
|
|
},
|
|
|
|
StorageConfig: &StorageConfig{
|
|
|
|
Backend: defaults.StorageBackend,
|
|
|
|
BasePath: defaults.StorageBasePath,
|
|
|
|
ServeProtocol: defaults.StorageServeProtocol,
|
|
|
|
ServeHost: defaults.StorageServeHost,
|
|
|
|
ServeBasePath: defaults.StorageServeBasePath,
|
|
|
|
},
|
|
|
|
StatusesConfig: &StatusesConfig{
|
|
|
|
MaxChars: defaults.StatusesMaxChars,
|
|
|
|
CWMaxChars: defaults.StatusesCWMaxChars,
|
|
|
|
PollMaxOptions: defaults.StatusesPollMaxOptions,
|
|
|
|
PollOptionMaxChars: defaults.StatusesPollOptionMaxChars,
|
|
|
|
MaxMediaFiles: defaults.StatusesMaxMediaFiles,
|
|
|
|
},
|
2021-05-09 11:25:13 +02:00
|
|
|
LetsEncryptConfig: &LetsEncryptConfig{
|
|
|
|
Enabled: defaults.LetsEncryptEnabled,
|
2021-07-24 19:02:41 +02:00
|
|
|
Port: defaults.LetsEncryptPort,
|
2021-05-09 11:25:13 +02:00
|
|
|
CertDir: defaults.LetsEncryptCertDir,
|
|
|
|
EmailAddress: defaults.LetsEncryptEmailAddress,
|
|
|
|
},
|
2021-07-23 10:36:28 +02:00
|
|
|
OIDCConfig: &OIDCConfig{
|
|
|
|
Enabled: defaults.OIDCEnabled,
|
|
|
|
IDPName: defaults.OIDCIdpName,
|
|
|
|
SkipVerification: defaults.OIDCSkipVerification,
|
|
|
|
Issuer: defaults.OIDCIssuer,
|
|
|
|
ClientID: defaults.OIDCClientID,
|
|
|
|
ClientSecret: defaults.OIDCClientSecret,
|
|
|
|
Scopes: defaults.OIDCScopes,
|
|
|
|
},
|
2021-04-19 19:42:19 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-20 18:14:23 +02:00
|
|
|
// GetDefaults returns a populated Defaults struct with most of the values set to reasonable defaults.
|
|
|
|
// Note that if you use this function, you still need to set Host and, if desired, ConfigPath.
|
2021-04-19 19:42:19 +02:00
|
|
|
func GetDefaults() Defaults {
|
|
|
|
return Defaults{
|
|
|
|
LogLevel: "info",
|
|
|
|
ApplicationName: "gotosocial",
|
|
|
|
ConfigPath: "",
|
|
|
|
Host: "",
|
2021-07-19 18:42:08 +02:00
|
|
|
AccountDomain: "",
|
2021-04-19 19:42:19 +02:00
|
|
|
Protocol: "https",
|
2021-07-24 19:02:41 +02:00
|
|
|
Port: 8080,
|
2021-07-26 16:15:36 +02:00
|
|
|
TrustedProxies: []string{"127.0.0.1/32"}, // localhost
|
2021-04-19 19:42:19 +02:00
|
|
|
|
2021-07-19 18:03:07 +02:00
|
|
|
DbType: "postgres",
|
|
|
|
DbAddress: "localhost",
|
|
|
|
DbPort: 5432,
|
|
|
|
DbUser: "postgres",
|
|
|
|
DbPassword: "postgres",
|
|
|
|
DbDatabase: "postgres",
|
|
|
|
DBTlsMode: "disable",
|
|
|
|
DBTlsCACert: "",
|
2021-04-19 19:42:19 +02:00
|
|
|
|
|
|
|
TemplateBaseDir: "./web/template/",
|
2021-06-21 19:46:10 +02:00
|
|
|
AssetBaseDir: "./web/assets/",
|
2021-04-19 19:42:19 +02:00
|
|
|
|
|
|
|
AccountsOpenRegistration: true,
|
|
|
|
AccountsRequireApproval: true,
|
|
|
|
AccountsReasonRequired: true,
|
|
|
|
|
|
|
|
MediaMaxImageSize: 2097152, //2mb
|
|
|
|
MediaMaxVideoSize: 10485760, //10mb
|
|
|
|
MediaMinDescriptionChars: 0,
|
|
|
|
MediaMaxDescriptionChars: 500,
|
|
|
|
|
|
|
|
StorageBackend: "local",
|
|
|
|
StorageBasePath: "/gotosocial/storage",
|
|
|
|
StorageServeProtocol: "https",
|
|
|
|
StorageServeHost: "localhost",
|
|
|
|
StorageServeBasePath: "/fileserver",
|
|
|
|
|
|
|
|
StatusesMaxChars: 5000,
|
|
|
|
StatusesCWMaxChars: 100,
|
|
|
|
StatusesPollMaxOptions: 6,
|
|
|
|
StatusesPollOptionMaxChars: 50,
|
|
|
|
StatusesMaxMediaFiles: 6,
|
2021-05-09 11:25:13 +02:00
|
|
|
|
|
|
|
LetsEncryptEnabled: true,
|
2021-07-24 19:02:41 +02:00
|
|
|
LetsEncryptPort: 80,
|
2021-05-09 11:25:13 +02:00
|
|
|
LetsEncryptCertDir: "/gotosocial/storage/certs",
|
|
|
|
LetsEncryptEmailAddress: "",
|
2021-07-23 10:36:28 +02:00
|
|
|
|
|
|
|
OIDCEnabled: false,
|
|
|
|
OIDCIdpName: "",
|
|
|
|
OIDCSkipVerification: false,
|
|
|
|
OIDCIssuer: "",
|
|
|
|
OIDCClientID: "",
|
|
|
|
OIDCClientSecret: "",
|
|
|
|
OIDCScopes: []string{oidc.ScopeOpenID, "profile", "email", "groups"},
|
2021-04-19 19:42:19 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-20 18:14:23 +02:00
|
|
|
// GetTestDefaults returns a Defaults struct with values set that are suitable for local testing.
|
2021-04-19 19:42:19 +02:00
|
|
|
func GetTestDefaults() Defaults {
|
|
|
|
return Defaults{
|
|
|
|
LogLevel: "trace",
|
|
|
|
ApplicationName: "gotosocial",
|
|
|
|
ConfigPath: "",
|
|
|
|
Host: "localhost:8080",
|
2021-07-19 18:42:08 +02:00
|
|
|
AccountDomain: "",
|
2021-04-19 19:42:19 +02:00
|
|
|
Protocol: "http",
|
2021-07-24 19:02:41 +02:00
|
|
|
Port: 8080,
|
2021-07-26 16:15:36 +02:00
|
|
|
TrustedProxies: []string{"127.0.0.1/32"},
|
2021-04-19 19:42:19 +02:00
|
|
|
|
2021-09-08 22:12:23 +02:00
|
|
|
DbType: "sqlite",
|
|
|
|
DbAddress: ":memory:",
|
2021-04-19 19:42:19 +02:00
|
|
|
DbPort: 5432,
|
|
|
|
DbUser: "postgres",
|
|
|
|
DbPassword: "postgres",
|
|
|
|
DbDatabase: "postgres",
|
|
|
|
|
|
|
|
TemplateBaseDir: "./web/template/",
|
2021-06-21 20:40:56 +02:00
|
|
|
AssetBaseDir: "./web/assets/",
|
2021-04-19 19:42:19 +02:00
|
|
|
|
|
|
|
AccountsOpenRegistration: true,
|
|
|
|
AccountsRequireApproval: true,
|
|
|
|
AccountsReasonRequired: true,
|
|
|
|
|
|
|
|
MediaMaxImageSize: 1048576, //1mb
|
|
|
|
MediaMaxVideoSize: 5242880, //5mb
|
|
|
|
MediaMinDescriptionChars: 0,
|
|
|
|
MediaMaxDescriptionChars: 500,
|
|
|
|
|
|
|
|
StorageBackend: "local",
|
|
|
|
StorageBasePath: "/gotosocial/storage",
|
|
|
|
StorageServeProtocol: "http",
|
|
|
|
StorageServeHost: "localhost:8080",
|
|
|
|
StorageServeBasePath: "/fileserver",
|
|
|
|
|
|
|
|
StatusesMaxChars: 5000,
|
|
|
|
StatusesCWMaxChars: 100,
|
|
|
|
StatusesPollMaxOptions: 6,
|
|
|
|
StatusesPollOptionMaxChars: 50,
|
|
|
|
StatusesMaxMediaFiles: 6,
|
2021-05-09 11:25:13 +02:00
|
|
|
|
|
|
|
LetsEncryptEnabled: false,
|
2021-07-24 19:02:41 +02:00
|
|
|
LetsEncryptPort: 0,
|
2021-05-09 11:25:13 +02:00
|
|
|
LetsEncryptCertDir: "",
|
|
|
|
LetsEncryptEmailAddress: "",
|
2021-07-23 10:36:28 +02:00
|
|
|
|
|
|
|
OIDCEnabled: false,
|
|
|
|
OIDCIdpName: "",
|
|
|
|
OIDCSkipVerification: false,
|
|
|
|
OIDCIssuer: "",
|
|
|
|
OIDCClientID: "",
|
|
|
|
OIDCClientSecret: "",
|
|
|
|
OIDCScopes: []string{oidc.ScopeOpenID, "profile", "email", "groups"},
|
2021-04-19 19:42:19 +02:00
|
|
|
}
|
|
|
|
}
|