wisski-cloud-distillery/internal/config/template.go
Tom Wiesing 473040a69f
Remove environment.Environment struct
This commit completely removes the environment struct as it is no longer
used.
2023-03-02 12:52:51 +01:00

122 lines
2.7 KiB
Go

package config
import (
"crypto/rand"
"path/filepath"
"time"
"github.com/FAU-CDI/wisski-distillery/internal/bootstrap"
"github.com/FAU-CDI/wisski-distillery/internal/passwordx"
"github.com/tkw1536/pkglib/hostname"
"github.com/tkw1536/pkglib/password"
)
// Template is used to generate a configuration file.
type Template struct {
RootPath string
DefaultDomain string
TSAdminUser string
TSAdminPassword string
SQLAdminUsername string
SQLAdminPassword string
DockerNetworkName string
SessionSecret string
}
// SetDefaults sets defaults on the template
func (tpl *Template) SetDefaults() (err error) {
if tpl.RootPath == "" {
tpl.RootPath = bootstrap.BaseDirectoryDefault
}
if tpl.DefaultDomain == "" {
tpl.DefaultDomain = hostname.FQDN()
}
if tpl.TSAdminUser == "" {
tpl.TSAdminUser = "admin"
}
if tpl.TSAdminPassword == "" {
tpl.TSAdminPassword, err = password.Generate(rand.Reader, 64, passwordx.Safe)
if err != nil {
return err
}
}
if tpl.SQLAdminUsername == "" {
tpl.SQLAdminUsername = "admin"
}
if tpl.SQLAdminPassword == "" {
tpl.SQLAdminPassword, err = password.Generate(rand.Reader, 64, passwordx.Safe)
if err != nil {
return err
}
}
if tpl.DockerNetworkName == "" {
tpl.DockerNetworkName, err = password.Generate(rand.Reader, 10, passwordx.Identifier)
if err != nil {
return err
}
tpl.DockerNetworkName = `distillery-` + tpl.DockerNetworkName
}
if tpl.SessionSecret == "" {
tpl.SessionSecret, err = password.Generate(rand.Reader, 100, passwordx.Printable)
if err != nil {
return err
}
}
return nil
}
// Generate generates a configuration file for this configuration
func (tpl Template) Generate() Config {
return Config{
Paths: PathsConfig{
Root: tpl.RootPath,
OverridesJSON: filepath.Join(tpl.RootPath, bootstrap.OverridesJSON),
ResolverBlocks: filepath.Join(tpl.RootPath, bootstrap.ResolverBlockedTXT),
},
HTTP: HTTPConfig{
PrimaryDomain: tpl.DefaultDomain,
ExtraDomains: []string{},
},
Docker: DockerConfig{
tpl.DockerNetworkName,
},
SQL: SQLConfig{
DatabaseConfig: DatabaseConfig{
AdminUsername: tpl.SQLAdminUsername,
AdminPassword: tpl.SQLAdminPassword,
UserPrefix: "mysql-factory-",
DataPrefix: "mysql-factory-",
},
Database: "distillery",
},
TS: TSConfig{
DatabaseConfig: DatabaseConfig{
AdminUsername: tpl.TSAdminUser,
AdminPassword: tpl.TSAdminPassword,
UserPrefix: "graphdb-factory-",
DataPrefix: "graphdb-factory-",
},
},
MaxBackupAge: 30 * 24 * time.Hour, // 1 month
PasswordLength: 64,
PublicSSHPort: 2222,
SessionSecret: tpl.SessionSecret,
CronInterval: 10 * time.Minute,
}
}