package cli import ( "fmt" "net" "net/url" "os" "github.com/9seconds/mtg/v2/internal/config2" "github.com/9seconds/mtg/v2/mtglib" "github.com/9seconds/mtg/v2/network" ) func readTOMLConfig(path string) (*config2.Config, error) { content, err := os.ReadFile(path) if err != nil { return nil, fmt.Errorf("cannot read config file: %w", err) } conf, err := config2.Parse(content) if err != nil { return nil, fmt.Errorf("cannot parse config: %w", err) } return conf, nil } func makeNetwork(conf *config2.Config, version string) (mtglib.Network, error) { tcpTimeout := conf.Network.Timeout.TCP.Get(network.DefaultTimeout) httpTimeout := conf.Network.Timeout.HTTP.Get(network.DefaultHTTPTimeout) dohIP := conf.Network.DOHIP.Get(net.ParseIP(network.DefaultDOHHostname)).String() bufferSize := conf.TCPBuffer.Get(network.DefaultBufferSize) userAgent := "mtg/" + version baseDialer, err := network.NewDefaultDialer(tcpTimeout, int(bufferSize)) if err != nil { return nil, fmt.Errorf("cannot build a default dialer: %w", err) } if len(conf.Network.Proxies) == 0 { return network.NewNetwork(baseDialer, userAgent, dohIP, httpTimeout) // nolint: wrapcheck } proxyURLs := make([]*url.URL, 0, len(conf.Network.Proxies)) for _, v := range conf.Network.Proxies { if value := v.Get(nil); value != nil { proxyURLs = append(proxyURLs, value) } } if len(proxyURLs) == 1 { socksDialer, err := network.NewSocks5Dialer(baseDialer, proxyURLs[0]) if err != nil { return nil, fmt.Errorf("cannot build socks5 dialer: %w", err) } return network.NewNetwork(socksDialer, userAgent, dohIP, httpTimeout) // nolint: wrapcheck } socksDialer, err := network.NewLoadBalancedSocks5Dialer(baseDialer, proxyURLs) if err != nil { return nil, fmt.Errorf("cannot build socks5 dialer: %w", err) } return network.NewNetwork(socksDialer, userAgent, dohIP, httpTimeout) // nolint: wrapcheck }