This commit adds a new 'dis' component to the distillery that serves a list of all known instances for the moment.
101 lines
2.3 KiB
Go
101 lines
2.3 KiB
Go
package env
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/FAU-CDI/wisski-distillery/core"
|
|
"github.com/FAU-CDI/wisski-distillery/internal/config"
|
|
"github.com/tkw1536/goprogram/exit"
|
|
)
|
|
|
|
// Distillery represents a running instance for the distillery
|
|
type Distillery struct {
|
|
Config *config.Config
|
|
Upstream Upstream
|
|
}
|
|
|
|
// Upstream are the upstream urls connecting to the various external components.
|
|
type Upstream struct {
|
|
SQL string
|
|
Triplestore string
|
|
}
|
|
|
|
func (dis Distillery) HTTPSEnabled() bool {
|
|
return dis.Config.CertbotEmail != ""
|
|
}
|
|
|
|
// Returns the default virtual host
|
|
func (dis Distillery) DefaultVirtualHost() string {
|
|
VIRTUAL_HOST := dis.Config.DefaultDomain
|
|
if len(dis.Config.SelfExtraDomains) > 0 {
|
|
VIRTUAL_HOST += "," + strings.Join(dis.Config.SelfExtraDomains, ",")
|
|
}
|
|
return VIRTUAL_HOST
|
|
}
|
|
|
|
func (dis Distillery) DefaultLetsencryptHost() string {
|
|
if !dis.HTTPSEnabled() {
|
|
return ""
|
|
}
|
|
return dis.DefaultVirtualHost()
|
|
}
|
|
|
|
// Context returns a new Context belonging to this distillery
|
|
func (dis Distillery) Context() context.Context {
|
|
return context.Background()
|
|
}
|
|
|
|
var errNoConfigFile = exit.Error{
|
|
ExitCode: exit.ExitGeneralArguments,
|
|
Message: "Configuration File does not exist",
|
|
}
|
|
|
|
var errOpenConfig = exit.Error{
|
|
ExitCode: exit.ExitGeneralArguments,
|
|
Message: "error loading configuration file: %s",
|
|
}
|
|
|
|
// NewDistillery creates a new distillery object from a set of parameters and requirements
|
|
func NewDistillery(params core.Params, flags core.Flags, req core.Requirements) (env *Distillery, err error) {
|
|
env = &Distillery{
|
|
Upstream: Upstream{
|
|
SQL: "127.0.0.1:3306",
|
|
Triplestore: "127.0.0.1:7200",
|
|
},
|
|
}
|
|
|
|
if flags.InternalInDocker {
|
|
env.Upstream.SQL = "sql:3306"
|
|
env.Upstream.Triplestore = "triplestore:7200"
|
|
}
|
|
|
|
// if we don't need to load the config, there is nothing to do
|
|
if !req.NeedsDistillery {
|
|
return
|
|
}
|
|
|
|
// try to find the configuration file
|
|
cfg := flags.ConfigPath // command line flags first
|
|
if cfg == "" {
|
|
cfg = params.ConfigPath // then globally provided files
|
|
}
|
|
if cfg == "" {
|
|
return nil, errNoConfigFile
|
|
}
|
|
|
|
// open the config file!
|
|
f, err := os.Open(params.ConfigPath)
|
|
if err != nil {
|
|
return nil, errOpenConfig.WithMessageF(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
// unmarshal the config
|
|
env.Config = &config.Config{
|
|
ConfigPath: cfg,
|
|
}
|
|
err = env.Config.Unmarshal(f)
|
|
return
|
|
}
|