Files
theta-agent/config.go
T

50 lines
1.1 KiB
Go

package main
import (
"fmt"
"os"
"gopkg.in/yaml.v3"
)
type Capabilities struct {
Telemetry bool `yaml:"telemetry"`
ConfigureLDAP bool `yaml:"configure_ldap"`
Reboot bool `yaml:"reboot"`
ServiceControl []string `yaml:"service_control"`
ArbitraryBash bool `yaml:"arbitrary_bash"`
}
type Config struct {
ServerURL string `yaml:"server_url"`
AuthToken string `yaml:"auth_token"`
Location string `yaml:"location"`
Capabilities Capabilities `yaml:"capabilities"`
}
func LoadConfig(path string) (*Config, error) {
file, err := os.Open(path)
if err != nil {
return nil, fmt.Errorf("failed to open config file: %w", err)
}
defer file.Close()
var cfg Config
decoder := yaml.NewDecoder(file)
if err := decoder.Decode(&cfg); err != nil {
return nil, fmt.Errorf("failed to decode YAML config: %w", err)
}
return &cfg, nil
}
// CanManageService checks if a specific service is permitted to be restarted/stopped
func (c *Capabilities) CanManageService(serviceName string) bool {
for _, allowed := range c.ServiceControl {
if allowed == serviceName {
return true
}
}
return false
}