45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"gopkg.in/yaml.v3"
|
|
"os"
|
|
)
|
|
|
|
type HTTP struct {
|
|
Address string `yaml:"Address"`
|
|
InternalToken string `yaml:"InternalToken"`
|
|
}
|
|
type Upstream struct {
|
|
IoTServerURL string `yaml:"IoTServerURL"`
|
|
PlatformAPIURL string `yaml:"PlatformAPIURL"`
|
|
Token string `yaml:"Token"`
|
|
}
|
|
type Config struct {
|
|
Service string `yaml:"Service"`
|
|
HTTP HTTP `yaml:"HTTP"`
|
|
Upstream Upstream `yaml:"Upstream"`
|
|
}
|
|
|
|
func Load(path string) (Config, error) {
|
|
var cfg Config
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return cfg, err
|
|
}
|
|
if err = yaml.Unmarshal(data, &cfg); err != nil {
|
|
return cfg, err
|
|
}
|
|
override(&cfg.HTTP.InternalToken, "HEQI_IOT_INTERNAL_TOKEN")
|
|
override(&cfg.Upstream.Token, "HEQI_IOT_INTERNAL_TOKEN")
|
|
if cfg.HTTP.Address == "" || cfg.HTTP.InternalToken == "" || cfg.Upstream.IoTServerURL == "" || cfg.Upstream.PlatformAPIURL == "" {
|
|
return cfg, fmt.Errorf("HTTP 和 Upstream 配置不完整")
|
|
}
|
|
return cfg, nil
|
|
}
|
|
func override(target *string, name string) {
|
|
if value := os.Getenv(name); value != "" {
|
|
*target = value
|
|
}
|
|
}
|