Minimize code duplication for environment variables; ref pterodactyl/panel#2255

This commit is contained in:
Dane Everitt
2020-08-27 20:28:29 -07:00
parent 60acee2df5
commit 711ee2258c
5 changed files with 10 additions and 43 deletions

View File

@@ -1,17 +1,13 @@
package environment
import (
"fmt"
"strings"
"sync"
"time"
)
type configurationSettings struct {
Mounts []Mount
Allocations Allocations
Limits Limits
Variables Variables
}
// Defines the actual configuration struct for the environment with all of the settings
@@ -19,16 +15,17 @@ type configurationSettings struct {
type Configuration struct {
mu sync.RWMutex
settings configurationSettings
environmentVariables []string
settings configurationSettings
}
func NewConfiguration(m []Mount, a Allocations, l Limits, v Variables) *Configuration {
func NewConfiguration(m []Mount, a Allocations, l Limits, envVars []string) *Configuration {
return &Configuration{
environmentVariables: envVars,
settings: configurationSettings{
Mounts: m,
Allocations: a,
Limits: l,
Variables: v,
},
}
}
@@ -54,31 +51,9 @@ func (c *Configuration) Mounts() []Mount {
return c.settings.Mounts
}
// Returns all of the environment variables that should be assigned to a running
// server instance.
func (c *Configuration) EnvironmentVariables() []string {
c.mu.RLock()
c.mu.RUnlock()
defer c.mu.RUnlock()
zone, _ := time.Now().In(time.Local).Zone()
var out = []string{
fmt.Sprintf("TZ=%s", zone),
fmt.Sprintf("SERVER_MEMORY=%d", c.settings.Limits.MemoryLimit),
fmt.Sprintf("SERVER_IP=%s", c.settings.Allocations.DefaultMapping.Ip),
fmt.Sprintf("SERVER_PORT=%d", c.settings.Allocations.DefaultMapping.Port),
}
eloop:
for k := range c.settings.Variables {
for _, e := range out {
if strings.HasPrefix(e, strings.ToUpper(k)) {
continue eloop
}
}
out = append(out, fmt.Sprintf("%s=%s", strings.ToUpper(k), c.settings.Variables.Get(k)))
}
return out
}
return c.environmentVariables
}