From 6b05fcc6cad342f720c7f368804b1b338e6f5a00 Mon Sep 17 00:00:00 2001 From: octeep Date: Thu, 31 Mar 2022 09:47:47 +0100 Subject: [PATCH] allow importing a wireguard config #27 --- README.md | 18 +++++++++++++++++- config.go | 20 ++++++++++++++++---- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d33d741..4ee59ed 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ go build ./cmd/wireproxy # Sample config file ``` -# The [Interface] and [Peer] configurations follow the same sematics and meaning +# The [Interface] and [Peer] configurations follow the same semantics and meaning # of a wg-quick configuration. To understand what these fields mean, please refer to: # https://wiki.archlinux.org/title/WireGuard#Persistent_configuration # https://www.wireguard.com/#simple-network-interface @@ -92,6 +92,22 @@ BindAddress = 127.0.0.1:25344 #Password = ... ``` +Alternatively, if you already have a wireguard config, you can import it in the +wireproxy config file like this: +``` +WGConfig = + +# Same semantics as above +[TCPClientTunnel] +... + +[TCPServerTunnel] +... + +[Socks5] +... +``` + ## Stargazers over time diff --git a/config.go b/config.go index b18600e..a76f2c8 100644 --- a/config.go +++ b/config.go @@ -311,10 +311,12 @@ func parseRoutinesConfig(routines *[]RoutineSpawner, cfg *ini.File, sectionName } func ParseConfig(path string) (*Configuration, error) { - cfg, err := ini.LoadSources(ini.LoadOptions{ + iniOpt := ini.LoadOptions{ Insensitive: true, AllowShadows: true, - }, path) + } + + cfg, err := ini.LoadSources(iniOpt, path) if err != nil { return nil, err } @@ -325,12 +327,22 @@ func ParseConfig(path string) (*Configuration, error) { MTU: 1420, } - err = ParseInterface(cfg, device) + root := cfg.Section("") + wgConf, err := root.GetKey("WGConfig") + wgCfg := cfg + if err == nil { + wgCfg, err = ini.LoadSources(iniOpt, wgConf.String()) + if err != nil { + return nil, err + } + } + + err = ParseInterface(wgCfg, device) if err != nil { return nil, err } - err = ParsePeer(cfg, device) + err = ParsePeer(wgCfg, device) if err != nil { return nil, err }