LoadFile loads and validates configuration from provided .yml file
(filename string)
| 1152 | |
| 1153 | // LoadFile loads and validates configuration from provided .yml file |
| 1154 | func LoadFile(filename string) (*Config, error) { |
| 1155 | content, err := os.ReadFile(filename) |
| 1156 | if err != nil { |
| 1157 | return nil, err |
| 1158 | } |
| 1159 | |
| 1160 | content = findAndReplacePlaceholders(content) |
| 1161 | |
| 1162 | cfg := &Config{} |
| 1163 | if err := yaml.Unmarshal(content, cfg); err != nil { |
| 1164 | return nil, err |
| 1165 | } |
| 1166 | cfg.networkReg = make(map[string]Networks, len(cfg.NetworkGroups)) |
| 1167 | for _, ng := range cfg.NetworkGroups { |
| 1168 | if _, ok := cfg.networkReg[ng.Name]; ok { |
| 1169 | return nil, fmt.Errorf("duplicate `network_groups.name` %q", ng.Name) |
| 1170 | } |
| 1171 | cfg.networkReg[ng.Name] = ng.Networks |
| 1172 | } |
| 1173 | if cfg.Server.HTTP.AllowedNetworks, err = cfg.groupToNetwork(cfg.Server.HTTP.NetworksOrGroups); err != nil { |
| 1174 | return nil, err |
| 1175 | } |
| 1176 | if cfg.Server.HTTPS.AllowedNetworks, err = cfg.groupToNetwork(cfg.Server.HTTPS.NetworksOrGroups); err != nil { |
| 1177 | return nil, err |
| 1178 | } |
| 1179 | if cfg.Server.Metrics.AllowedNetworks, err = cfg.groupToNetwork(cfg.Server.Metrics.NetworksOrGroups); err != nil { |
| 1180 | return nil, err |
| 1181 | } |
| 1182 | |
| 1183 | if err := cfg.setDefaults(); err != nil { |
| 1184 | return nil, err |
| 1185 | } |
| 1186 | |
| 1187 | if err := cfg.checkVulnerabilities(); err != nil { |
| 1188 | return nil, fmt.Errorf("security breach: %w\nSet option `hack_me_please=true` to disable security errors", err) |
| 1189 | } |
| 1190 | return cfg, nil |
| 1191 | } |
| 1192 | |
| 1193 | var envVarRegex = regexp.MustCompile(`\${([a-zA-Z_][a-zA-Z0-9_]*)}`) |
| 1194 |