ParseConfig takes the path of a configuration file and parses it into Configuration
(path string)
| 517 | |
| 518 | // ParseConfig takes the path of a configuration file and parses it into Configuration |
| 519 | func ParseConfig(path string) (*Configuration, error) { |
| 520 | iniOpt := ini.LoadOptions{ |
| 521 | Insensitive: true, |
| 522 | AllowShadows: true, |
| 523 | AllowNonUniqueSections: true, |
| 524 | } |
| 525 | |
| 526 | cfg, err := ini.LoadSources(iniOpt, path) |
| 527 | if err != nil { |
| 528 | return nil, err |
| 529 | } |
| 530 | |
| 531 | device := &DeviceConfig{ |
| 532 | MTU: 1420, |
| 533 | } |
| 534 | |
| 535 | resolve := &ResolveConfig{ |
| 536 | ResolveStrategy: "auto", |
| 537 | } |
| 538 | |
| 539 | root := cfg.Section("") |
| 540 | wgConf, err := root.GetKey("WGConfig") |
| 541 | wgCfg := cfg |
| 542 | if err == nil { |
| 543 | wgCfg, err = ini.LoadSources(iniOpt, wgConf.String()) |
| 544 | if err != nil { |
| 545 | return nil, err |
| 546 | } |
| 547 | } |
| 548 | |
| 549 | err = ParseInterface(wgCfg, device) |
| 550 | if err != nil { |
| 551 | return nil, err |
| 552 | } |
| 553 | |
| 554 | err = ParsePeers(wgCfg, &device.Peers) |
| 555 | if err != nil { |
| 556 | return nil, err |
| 557 | } |
| 558 | |
| 559 | var routinesSpawners []RoutineSpawner |
| 560 | |
| 561 | err = parseRoutinesConfig(&routinesSpawners, cfg, "TCPClientTunnel", parseTCPClientTunnelConfig) |
| 562 | if err != nil { |
| 563 | return nil, err |
| 564 | } |
| 565 | |
| 566 | err = parseRoutinesConfig(&routinesSpawners, cfg, "STDIOTunnel", parseSTDIOTunnelConfig) |
| 567 | if err != nil { |
| 568 | return nil, err |
| 569 | } |
| 570 | |
| 571 | err = parseRoutinesConfig(&routinesSpawners, cfg, "TCPServerTunnel", parseTCPServerTunnelConfig) |
| 572 | if err != nil { |
| 573 | return nil, err |
| 574 | } |
| 575 | |
| 576 | err = parseRoutinesConfig(&routinesSpawners, cfg, "Socks5", parseSocks5Config) |
no test coverage detected