From 28c4e799d8a5156724de5b4310e6a209abd2061d Mon Sep 17 00:00:00 2001 From: Aptimex Date: Tue, 6 Aug 2024 13:49:51 -0600 Subject: [PATCH 1/9] initial nickname PoC --- src/cmd/status.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cmd/status.go b/src/cmd/status.go index b173317..f1037bd 100644 --- a/src/cmd/status.go +++ b/src/cmd/status.go @@ -50,6 +50,7 @@ func init() { func (c statusCmdConfig) Run() { // Start building tree. type Node struct { + nickname string peerConfig peer.PeerConfig relayConfig peer.Config e2eeConfig peer.Config @@ -83,6 +84,7 @@ func (c statusCmdConfig) Run() { log.Printf("%s: %v", message, err) } else { nodes[relayConfig.GetPublicKey()] = Node{ + nickname: "12345678901234567890", peerConfig: ep, relayConfig: relayConfig, e2eeConfig: e2eeConfig, @@ -134,11 +136,12 @@ func (c statusCmdConfig) Run() { } } t.AddChild(tree.NodeString(fmt.Sprintf(`server - relay: %v... - e2ee: %v... + nickname: %v + relay: %v... + e2ee: %v... - api: %v - routes: %v `, c.relayConfig.GetPublicKey()[:8], c.e2eeConfig.GetPublicKey()[:8], api, strings.Join(ips, ",")))) + api: %v + routes: %v `, c.nickname, c.relayConfig.GetPublicKey()[:8], c.e2eeConfig.GetPublicKey()[:8], api, strings.Join(ips, ",")))) child, err := t.Child(0) check("could not build tree", err) treeTraversal(node.children[i], child) From fe22fec76b1c123877bb02b34123d4ccab34dc39 Mon Sep 17 00:00:00 2001 From: Aptimex Date: Tue, 6 Aug 2024 16:24:21 -0600 Subject: [PATCH 2/9] working server nicknames --- src/cmd/add_server.go | 6 ++++++ src/cmd/configure.go | 7 +++++++ src/cmd/serve.go | 6 ++++++ src/cmd/status.go | 6 +++--- src/peer/config.go | 39 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 3 deletions(-) diff --git a/src/cmd/add_server.go b/src/cmd/add_server.go index dca24cc..007bd19 100644 --- a/src/cmd/add_server.go +++ b/src/cmd/add_server.go @@ -25,6 +25,7 @@ type addServerCmdConfig struct { configFileServer string writeToClipboard bool port int + nickname string } var addServerCmdArgs = addServerCmdConfig{ @@ -35,6 +36,7 @@ var addServerCmdArgs = addServerCmdConfig{ configFileServer: ConfigServer, writeToClipboard: false, port: USE_ENDPOINT_PORT, + nickname: "", } // addServerCmd represents the server command. @@ -53,6 +55,7 @@ func init() { addServerCmd.Flags().StringSliceVarP(&addServerCmdArgs.allowedIPs, "routes", "r", addServerCmdArgs.allowedIPs, "[REQUIRED] CIDR IP ranges that will be routed through wiretap") addServerCmd.Flags().StringVarP(&addServerCmdArgs.serverAddress, "server-address", "s", addServerCmdArgs.serverAddress, "API address of server that new server will connect to, connects to client by default") addServerCmd.Flags().IntVarP(&addServerCmdArgs.port, "port", "p", addServerCmdArgs.port, "listener port to start on new server for wireguard relay. If --outbound, default is the port specified in --endpoint; otherwise default is 51820") + addServerCmd.Flags().StringVarP(&addServerCmdArgs.nickname, "nickname", "n", addServerCmdArgs.nickname, "Server nickname to display in 'status' command") addServerCmd.Flags().BoolVarP(&addServerCmdArgs.writeToClipboard, "clipboard", "c", addServerCmdArgs.writeToClipboard, "copy configuration args to clipboard") addServerCmd.Flags().StringVarP(&addServerCmdArgs.configFileRelay, "relay-input", "", addServerCmdArgs.configFileRelay, "filename of input relay config file") @@ -344,6 +347,9 @@ func (c addServerCmdConfig) Run() { err = serverConfigRelay.SetPort(c.port) check("failed to set port", err) + + err = serverConfigRelay.SetNickname(c.nickname) + check("failed to set nickname", err) // Overwrite Relay file with new server peer if adding a server directly to the client. var fileStatusRelay string diff --git a/src/cmd/configure.go b/src/cmd/configure.go index 0720a59..e2a785a 100644 --- a/src/cmd/configure.go +++ b/src/cmd/configure.go @@ -18,6 +18,7 @@ type configureCmdConfig struct { endpoint string outbound bool port int + nickname string configFileRelay string configFileE2EE string configFileServer string @@ -43,6 +44,7 @@ var configureCmdArgs = configureCmdConfig{ endpoint: Endpoint, outbound: false, port: USE_ENDPOINT_PORT, + nickname: "", configFileRelay: ConfigRelay, configFileE2EE: ConfigE2EE, configFileServer: ConfigServer, @@ -79,6 +81,8 @@ func init() { configureCmd.Flags().StringVarP(&configureCmdArgs.endpoint, "endpoint", "e", configureCmdArgs.endpoint, "[REQUIRED] IP:PORT (or [IP]:PORT for IPv6) of wireguard listener that server will connect to (example \"1.2.3.4:51820\")") configureCmd.Flags().BoolVar(&configureCmdArgs.outbound, "outbound", configureCmdArgs.outbound, "client will initiate handshake to server; --endpoint now specifies server's listening socket instead of client's") configureCmd.Flags().IntVarP(&configureCmdArgs.port, "port", "p", configureCmdArgs.port, "listener port for local wireguard relay; default is to use the same port specified by --endpoint") + configureCmd.Flags().StringVarP(&configureCmdArgs.nickname, "nickname", "n", configureCmdArgs.nickname, "Server nickname to display in 'status' command") + configureCmd.Flags().StringVarP(&configureCmdArgs.configFileRelay, "relay-output", "", configureCmdArgs.configFileRelay, "wireguard relay config output filename") configureCmd.Flags().StringVarP(&configureCmdArgs.configFileE2EE, "e2ee-output", "", configureCmdArgs.configFileE2EE, "wireguard E2EE config output filename") configureCmd.Flags().StringVarP(&configureCmdArgs.configFileServer, "server-output", "s", configureCmdArgs.configFileServer, "wiretap server config output filename") @@ -181,6 +185,9 @@ func (c configureCmdConfig) Run() { err = serverConfigRelay.SetPort(Port) check("failed to set port", err) + err = serverConfigRelay.SetNickname(c.nickname) + check("failed to set nickname", err) + clientConfigRelayArgs := peer.ConfigArgs{ ListenPort: c.port, diff --git a/src/cmd/serve.go b/src/cmd/serve.go index 6e46af0..8d3443f 100644 --- a/src/cmd/serve.go +++ b/src/cmd/serve.go @@ -47,6 +47,7 @@ type serveCmdConfig struct { keepaliveCount uint keepaliveInterval uint disableV6 bool + nickname string } type wiretapDefaultConfig struct { @@ -82,6 +83,7 @@ var serveCmd = serveCmdConfig{ keepaliveCount: 3, keepaliveInterval: 60, disableV6: false, + nickname: "", } var wiretapDefault = wiretapDefaultConfig{ @@ -127,6 +129,7 @@ func init() { cmd.Flags().StringP("api", "0", wiretapDefault.apiAddr, "address of API service") cmd.Flags().IntP("keepalive", "k", wiretapDefault.keepalive, "tunnel keepalive in seconds") cmd.Flags().IntP("mtu", "m", wiretapDefault.mtu, "tunnel MTU") + cmd.Flags().StringVarP(&serveCmd.nickname, "nickname", "n", serveCmd.nickname, "nickname for server") cmd.Flags().UintVarP(&serveCmd.catchTimeout, "completion-timeout", "", serveCmd.catchTimeout, "time in ms for client to complete TCP connection to server") cmd.Flags().UintVarP(&serveCmd.connTimeout, "conn-timeout", "", serveCmd.connTimeout, "time in ms for server to wait for outgoing TCP handshakes to complete") cmd.Flags().UintVarP(&serveCmd.keepaliveIdle, "keepalive-idle", "", serveCmd.keepaliveIdle, "time in seconds before TCP keepalives are sent to client") @@ -172,6 +175,8 @@ func init() { check("error binding flag to viper", err) err = viper.BindPFlag("Relay.Interface.mtu", cmd.Flags().Lookup("mtu")) check("error binding flag to viper", err) + err = viper.BindPFlag("Relay.Interface.nickname", cmd.Flags().Lookup("nickname")) + check("error binding flag to viper", err) err = viper.BindPFlag("Relay.Peer.publickey", cmd.Flags().Lookup("public-relay")) check("error binding flag to viper", err) @@ -318,6 +323,7 @@ func (c serveCmdConfig) Run() { configRelayArgs := peer.ConfigArgs{ PrivateKey: viper.GetString("Relay.Interface.privatekey"), ListenPort: viper.GetInt("Relay.Interface.port"), + Nickname: viper.GetString("Relay.Interface.nickname"), Peers: []peer.PeerConfigArgs{ { PublicKey: viper.GetString("Relay.Peer.publickey"), diff --git a/src/cmd/status.go b/src/cmd/status.go index f1037bd..38169df 100644 --- a/src/cmd/status.go +++ b/src/cmd/status.go @@ -50,7 +50,7 @@ func init() { func (c statusCmdConfig) Run() { // Start building tree. type Node struct { - nickname string + //nickname string peerConfig peer.PeerConfig relayConfig peer.Config e2eeConfig peer.Config @@ -84,7 +84,7 @@ func (c statusCmdConfig) Run() { log.Printf("%s: %v", message, err) } else { nodes[relayConfig.GetPublicKey()] = Node{ - nickname: "12345678901234567890", + //nickname: "12345678901234567890", peerConfig: ep, relayConfig: relayConfig, e2eeConfig: e2eeConfig, @@ -141,7 +141,7 @@ func (c statusCmdConfig) Run() { e2ee: %v... api: %v - routes: %v `, c.nickname, c.relayConfig.GetPublicKey()[:8], c.e2eeConfig.GetPublicKey()[:8], api, strings.Join(ips, ",")))) + routes: %v `, c.relayConfig.GetNickname(), c.relayConfig.GetPublicKey()[:8], c.e2eeConfig.GetPublicKey()[:8], api, strings.Join(ips, ",")))) child, err := t.Child(0) check("could not build tree", err) treeTraversal(node.children[i], child) diff --git a/src/peer/config.go b/src/peer/config.go index 15fcd57..f98f59a 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -18,6 +18,7 @@ type Config struct { mtu int peers []PeerConfig addresses []net.IPNet + nickname string } type configJSON struct { @@ -25,6 +26,7 @@ type configJSON struct { MTU int Peers []PeerConfig Addresses []net.IPNet + Nickname string } type ConfigArgs struct { @@ -35,6 +37,7 @@ type ConfigArgs struct { ReplacePeers bool Peers []PeerConfigArgs Addresses []string + Nickname string } type Shell uint @@ -77,6 +80,13 @@ func GetConfig(args ConfigArgs) (Config, error) { return Config{}, err } } + + if args.Nickname != "" { + err = c.SetNickname(args.Nickname) + if err != nil { + return Config{}, err + } + } c.SetReplacePeers(args.ReplacePeers) @@ -150,6 +160,8 @@ func ParseConfig(filename string) (c Config, err error) { return c, e } err = c.SetMTU(mtu) + case "nickname": + err = c.SetNickname(value) } if err != nil { return c, err @@ -209,6 +221,7 @@ func (c *Config) MarshalJSON() ([]byte, error) { c.mtu, c.peers, c.addresses, + c.nickname, }) } @@ -223,6 +236,7 @@ func (c *Config) UnmarshalJSON(b []byte) error { c.config = tmp.Config c.peers = tmp.Peers c.addresses = tmp.Addresses + c.nickname = tmp.Nickname return nil } @@ -254,6 +268,22 @@ func (c *Config) ClearPort() { c.config.ListenPort = nil } +func (c *Config) GetNickname() string { + return c.nickname +} + +func (c *Config) SetNickname(nickname string) error { + + if nickname != "" { + c.nickname = nickname + } + return nil +} + +func (c *Config) ClearNickname() { + c.nickname = "" +} + func (c *Config) SetFirewallMark(mark int) error { if mark < 1 { return errors.New("invalid firewall mark") @@ -441,6 +471,11 @@ func CreateServerCommand(relayConfig Config, e2eeConfig Config, shell Shell, sim keys = append(keys, "WIRETAP_RELAY_INTERFACE_PORT") vals = append(vals, fmt.Sprint(*relayConfig.config.ListenPort)) } + + if relayConfig.nickname != "" { + keys = append(keys, "WIRETAP_RELAY_INTERFACE_NICKNAME") + vals = append(vals, fmt.Sprint(relayConfig.nickname)) + } if relayConfig.mtu != 0 { keys = append(keys, "WIRETAP_RELAY_INTERFACE_MTU") @@ -528,6 +563,10 @@ func CreateServerFile(relayConfig Config, e2eeConfig Config) string { if relayConfig.config.ListenPort != nil { s.WriteString(fmt.Sprintf("Port = %d\n", *relayConfig.config.ListenPort)) } + + if relayConfig.nickname != "" { + s.WriteString(fmt.Sprintf("Nickname = %s\n", relayConfig.nickname)) + } if relayConfig.mtu != 0 { s.WriteString(fmt.Sprintf("MTU = %d\n", relayConfig.mtu)) From 44e3a6cb243dbcfe191f21907a78ce1c39f1f19c Mon Sep 17 00:00:00 2001 From: Aptimex Date: Tue, 6 Aug 2024 17:25:39 -0600 Subject: [PATCH 3/9] indentation fix --- src/cmd/configure.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/configure.go b/src/cmd/configure.go index 2e2ed18..b9ff139 100644 --- a/src/cmd/configure.go +++ b/src/cmd/configure.go @@ -81,7 +81,7 @@ func init() { configureCmd.Flags().StringVarP(&configureCmdArgs.endpoint, "endpoint", "e", configureCmdArgs.endpoint, "[REQUIRED] IP:PORT (or [IP]:PORT for IPv6) of wireguard listener that server will connect to (example \"1.2.3.4:51820\")") configureCmd.Flags().BoolVar(&configureCmdArgs.outbound, "outbound", configureCmdArgs.outbound, "client will initiate handshake to server; --endpoint now specifies server's listening socket instead of client's, and --port assigns the server's listening port instead of client's") configureCmd.Flags().IntVarP(&configureCmdArgs.port, "port", "p", configureCmdArgs.port, "listener port for wireguard relay. Default is to copy the --endpoint port. If --outbound, sets port for the server; else for the client.") - configureCmd.Flags().StringVarP(&configureCmdArgs.nickname, "nickname", "n", configureCmdArgs.nickname, "Server nickname to display in 'status' command") + configureCmd.Flags().StringVarP(&configureCmdArgs.nickname, "nickname", "n", configureCmdArgs.nickname, "Server nickname to display in 'status' command") configureCmd.Flags().StringVarP(&configureCmdArgs.configFileRelay, "relay-output", "", configureCmdArgs.configFileRelay, "wireguard relay config output filename") configureCmd.Flags().StringVarP(&configureCmdArgs.configFileE2EE, "e2ee-output", "", configureCmdArgs.configFileE2EE, "wireguard E2EE config output filename") From 8602504e55dcb9d4993b3f078f013ef26abaa475 Mon Sep 17 00:00:00 2001 From: Aptimex Date: Wed, 7 Aug 2024 17:47:10 -0600 Subject: [PATCH 4/9] started moving nickname to client E2EE configs --- src/cmd/add_server.go | 4 +--- src/cmd/configure.go | 5 +---- src/cmd/status.go | 4 +--- src/peer/config.go | 25 ++++++++++++++++++++----- src/peer/peer_config.go | 26 ++++++++++++++++++++++++++ 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/cmd/add_server.go b/src/cmd/add_server.go index 007bd19..599c753 100644 --- a/src/cmd/add_server.go +++ b/src/cmd/add_server.go @@ -170,6 +170,7 @@ func (c addServerCmdConfig) Run() { PublicKey: serverConfigE2EE.GetPublicKey(), AllowedIPs: c.allowedIPs, Endpoint: net.JoinHostPort(newRelayPrefixes[0].Addr().Next().Next().String(), fmt.Sprint(E2EEPort)), + Nickname: c.nickname, }) check("failed to generate new e2ee peer", err) clientConfigE2EE.AddPeer(serverE2EEPeer) @@ -347,9 +348,6 @@ func (c addServerCmdConfig) Run() { err = serverConfigRelay.SetPort(c.port) check("failed to set port", err) - - err = serverConfigRelay.SetNickname(c.nickname) - check("failed to set nickname", err) // Overwrite Relay file with new server peer if adding a server directly to the client. var fileStatusRelay string diff --git a/src/cmd/configure.go b/src/cmd/configure.go index b9ff139..78d6b3d 100644 --- a/src/cmd/configure.go +++ b/src/cmd/configure.go @@ -197,10 +197,6 @@ func (c configureCmdConfig) Run() { err = serverConfigRelay.SetPort(serverPort) check("failed to set port", err) - - err = serverConfigRelay.SetNickname(c.nickname) - check("failed to set nickname", err) - clientConfigRelayArgs := peer.ConfigArgs{ ListenPort: clientPort, @@ -246,6 +242,7 @@ func (c configureCmdConfig) Run() { PublicKey: serverConfigE2EE.GetPublicKey(), AllowedIPs: c.allowedIPs, Endpoint: net.JoinHostPort(relaySubnet4.Addr().Next().Next().String(), fmt.Sprint(E2EEPort)), + Nickname: c.nickname, }, }, Addresses: clientE2EEAddrs, diff --git a/src/cmd/status.go b/src/cmd/status.go index 38169df..592cc5d 100644 --- a/src/cmd/status.go +++ b/src/cmd/status.go @@ -50,7 +50,6 @@ func init() { func (c statusCmdConfig) Run() { // Start building tree. type Node struct { - //nickname string peerConfig peer.PeerConfig relayConfig peer.Config e2eeConfig peer.Config @@ -84,7 +83,6 @@ func (c statusCmdConfig) Run() { log.Printf("%s: %v", message, err) } else { nodes[relayConfig.GetPublicKey()] = Node{ - //nickname: "12345678901234567890", peerConfig: ep, relayConfig: relayConfig, e2eeConfig: e2eeConfig, @@ -141,7 +139,7 @@ func (c statusCmdConfig) Run() { e2ee: %v... api: %v - routes: %v `, c.relayConfig.GetNickname(), c.relayConfig.GetPublicKey()[:8], c.e2eeConfig.GetPublicKey()[:8], api, strings.Join(ips, ",")))) + routes: %v `, c.e2eeConfig.GetNickname(), c.relayConfig.GetPublicKey()[:8], c.e2eeConfig.GetPublicKey()[:8], api, strings.Join(ips, ",")))) child, err := t.Child(0) check("could not build tree", err) treeTraversal(node.children[i], child) diff --git a/src/peer/config.go b/src/peer/config.go index f98f59a..5c35e05 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -170,9 +170,16 @@ func ParseConfig(filename string) (c Config, err error) { case "[peer]": newPeer := PeerConfig{} for _, line := range lines[1:] { - if len(line) == 0 || line[0] == '#' { + if len(line) == 0 { + continue + } + + if line[:2] == "#@" { //special wiretap-specific values + line = line[2:] + } else if line[0] == '#' { continue } + key, value, err := parseConfigLine(line) if err != nil { return c, err @@ -190,6 +197,8 @@ func ParseConfig(filename string) (c Config, err error) { return c, e } err = newPeer.SetPersistentKeepaliveInterval(keepalive) + case "nickname": + err = newPeer.SetNickname(value) } if err != nil { return c, err @@ -207,12 +216,12 @@ func ParseConfig(filename string) (c Config, err error) { } func parseConfigLine(line string) (string, string, error) { - split := strings.Fields(line) - if len(split) != 3 { - return "", "", fmt.Errorf("failed to parse line: incorrect number of fields: [%s]", line) + key, val, found := strings.Cut(line, "=") + if !found { + return "", "", fmt.Errorf("failed to parse line: no = found: [%s]", line) } - return strings.ToLower(strings.TrimSpace(split[0])), strings.TrimSpace(split[2]), nil + return strings.ToLower(strings.TrimSpace(key)), strings.TrimSpace(val), nil } func (c *Config) MarshalJSON() ([]byte, error) { @@ -433,6 +442,12 @@ func (c *Config) AsShareableFile() string { s.WriteString("[Peer]\n") s.WriteString(fmt.Sprintf("PublicKey = %s\n", c.config.PrivateKey.PublicKey().String())) s.WriteString("AllowedIPs = 0.0.0.0/32\n") + /* + if c.nickname != "" { + s.WriteString(fmt.Sprintf("#@Nickname = %s\n", c.nickname)) + } + */ + return s.String() } diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index e8d4010..b523d74 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -15,11 +15,13 @@ import ( type PeerConfig struct { config wgtypes.PeerConfig privateKey *wgtypes.Key + nickname string } type peerConfigJSON struct { Config wgtypes.PeerConfig PrivateKey *wgtypes.Key + Nickname string } type PeerConfigArgs struct { @@ -32,6 +34,7 @@ type PeerConfigArgs struct { ReplaceAllowedIPs bool AllowedIPs []string PrivateKey string + Nickname string } func GetPeerConfig(args PeerConfigArgs) (PeerConfig, error) { @@ -84,6 +87,10 @@ func GetPeerConfig(args PeerConfigArgs) (PeerConfig, error) { return PeerConfig{}, err } } + + if args.Nickname != "" { + c.SetNickname(args.Nickname) + } return c, nil } @@ -99,6 +106,7 @@ func NewPeerConfig() (PeerConfig, error) { PublicKey: privateKey.PublicKey(), }, privateKey: &privateKey, + nickname: "", }, nil } @@ -106,6 +114,7 @@ func (p *PeerConfig) MarshalJSON() ([]byte, error) { return json.Marshal(peerConfigJSON{ p.config, p.privateKey, + p.nickname, }) } @@ -119,6 +128,7 @@ func (p *PeerConfig) UnmarshalJSON(b []byte) error { p.config = tmp.Config p.privateKey = tmp.PrivateKey + p.nickname = tmp.Nickname return nil } @@ -231,6 +241,17 @@ func (p *PeerConfig) SetPrivateKey(privateKey string) error { return nil } +func (p *PeerConfig) GetNickname() string { + return p.nickname +} + +func (p *PeerConfig) SetNickname(nickname string) error { + if nickname != "" { + p.nickname = nickname + } + return nil +} + func (p *PeerConfig) AsFile() string { var s strings.Builder @@ -249,6 +270,11 @@ func (p *PeerConfig) AsFile() string { if p.config.PersistentKeepaliveInterval != nil { s.WriteString(fmt.Sprintf("PersistentKeepalive = %d\n", *p.config.PersistentKeepaliveInterval/time.Second)) } + + //Custom fields + if p.nickname != "" { + s.WriteString(fmt.Sprintf("#@Nickname = %s\n", p.nickname)) + } return s.String() } From 659da33a8c005e19d69801e00918542d05c9c87b Mon Sep 17 00:00:00 2001 From: Aptimex Date: Thu, 15 Aug 2024 17:58:37 -0600 Subject: [PATCH 5/9] working with status --- src/cmd/status.go | 2 +- src/peer/config.go | 4 ++-- src/peer/peer_config.go | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cmd/status.go b/src/cmd/status.go index 592cc5d..ad80a6f 100644 --- a/src/cmd/status.go +++ b/src/cmd/status.go @@ -139,7 +139,7 @@ func (c statusCmdConfig) Run() { e2ee: %v... api: %v - routes: %v `, c.e2eeConfig.GetNickname(), c.relayConfig.GetPublicKey()[:8], c.e2eeConfig.GetPublicKey()[:8], api, strings.Join(ips, ",")))) + routes: %v `, c.peerConfig.GetNickname(), c.relayConfig.GetPublicKey()[:8], c.e2eeConfig.GetPublicKey()[:8], api, strings.Join(ips, ",")))) child, err := t.Child(0) check("could not build tree", err) treeTraversal(node.children[i], child) diff --git a/src/peer/config.go b/src/peer/config.go index 5c35e05..573fb76 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -160,8 +160,8 @@ func ParseConfig(filename string) (c Config, err error) { return c, e } err = c.SetMTU(mtu) - case "nickname": - err = c.SetNickname(value) + //case "nickname": + //err = c.SetNickname(value) } if err != nil { return c, err diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index b523d74..d9f43ef 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -89,7 +89,10 @@ func GetPeerConfig(args PeerConfigArgs) (PeerConfig, error) { } if args.Nickname != "" { - c.SetNickname(args.Nickname) + err = c.SetNickname(args.Nickname) + if err != nil { + return PeerConfig{}, err + } } return c, nil From 4e3bceaffa17700a208bf85658d6797f826fc7cf Mon Sep 17 00:00:00 2001 From: Aptimex Date: Thu, 15 Aug 2024 18:20:27 -0600 Subject: [PATCH 6/9] tentatively working with add server --- src/cmd/add_server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/add_server.go b/src/cmd/add_server.go index 599c753..82c0db5 100644 --- a/src/cmd/add_server.go +++ b/src/cmd/add_server.go @@ -170,7 +170,6 @@ func (c addServerCmdConfig) Run() { PublicKey: serverConfigE2EE.GetPublicKey(), AllowedIPs: c.allowedIPs, Endpoint: net.JoinHostPort(newRelayPrefixes[0].Addr().Next().Next().String(), fmt.Sprint(E2EEPort)), - Nickname: c.nickname, }) check("failed to generate new e2ee peer", err) clientConfigE2EE.AddPeer(serverE2EEPeer) @@ -264,6 +263,7 @@ func (c addServerCmdConfig) Run() { PublicKey: serverConfigE2EE.GetPublicKey(), AllowedIPs: c.allowedIPs, Endpoint: net.JoinHostPort(addresses.NextServerRelayAddr4.String(), fmt.Sprint(E2EEPort)), + Nickname: c.nickname, }) check("failed to parse server as peer", err) clientConfigE2EE.AddPeer(serverPeerConfigE2EE) From 91102795b3be23b182bf945b7b70c0e22653f173 Mon Sep 17 00:00:00 2001 From: Aptimex Date: Mon, 19 Aug 2024 16:15:27 -0600 Subject: [PATCH 7/9] fix nickname for add_server; cleanup unused functionality --- src/cmd/add_server.go | 1 + src/cmd/serve.go | 6 ------ src/peer/config.go | 44 ------------------------------------------- 3 files changed, 1 insertion(+), 50 deletions(-) diff --git a/src/cmd/add_server.go b/src/cmd/add_server.go index 82c0db5..e9919f9 100644 --- a/src/cmd/add_server.go +++ b/src/cmd/add_server.go @@ -170,6 +170,7 @@ func (c addServerCmdConfig) Run() { PublicKey: serverConfigE2EE.GetPublicKey(), AllowedIPs: c.allowedIPs, Endpoint: net.JoinHostPort(newRelayPrefixes[0].Addr().Next().Next().String(), fmt.Sprint(E2EEPort)), + Nickname: c.nickname, }) check("failed to generate new e2ee peer", err) clientConfigE2EE.AddPeer(serverE2EEPeer) diff --git a/src/cmd/serve.go b/src/cmd/serve.go index 8d3443f..6e46af0 100644 --- a/src/cmd/serve.go +++ b/src/cmd/serve.go @@ -47,7 +47,6 @@ type serveCmdConfig struct { keepaliveCount uint keepaliveInterval uint disableV6 bool - nickname string } type wiretapDefaultConfig struct { @@ -83,7 +82,6 @@ var serveCmd = serveCmdConfig{ keepaliveCount: 3, keepaliveInterval: 60, disableV6: false, - nickname: "", } var wiretapDefault = wiretapDefaultConfig{ @@ -129,7 +127,6 @@ func init() { cmd.Flags().StringP("api", "0", wiretapDefault.apiAddr, "address of API service") cmd.Flags().IntP("keepalive", "k", wiretapDefault.keepalive, "tunnel keepalive in seconds") cmd.Flags().IntP("mtu", "m", wiretapDefault.mtu, "tunnel MTU") - cmd.Flags().StringVarP(&serveCmd.nickname, "nickname", "n", serveCmd.nickname, "nickname for server") cmd.Flags().UintVarP(&serveCmd.catchTimeout, "completion-timeout", "", serveCmd.catchTimeout, "time in ms for client to complete TCP connection to server") cmd.Flags().UintVarP(&serveCmd.connTimeout, "conn-timeout", "", serveCmd.connTimeout, "time in ms for server to wait for outgoing TCP handshakes to complete") cmd.Flags().UintVarP(&serveCmd.keepaliveIdle, "keepalive-idle", "", serveCmd.keepaliveIdle, "time in seconds before TCP keepalives are sent to client") @@ -175,8 +172,6 @@ func init() { check("error binding flag to viper", err) err = viper.BindPFlag("Relay.Interface.mtu", cmd.Flags().Lookup("mtu")) check("error binding flag to viper", err) - err = viper.BindPFlag("Relay.Interface.nickname", cmd.Flags().Lookup("nickname")) - check("error binding flag to viper", err) err = viper.BindPFlag("Relay.Peer.publickey", cmd.Flags().Lookup("public-relay")) check("error binding flag to viper", err) @@ -323,7 +318,6 @@ func (c serveCmdConfig) Run() { configRelayArgs := peer.ConfigArgs{ PrivateKey: viper.GetString("Relay.Interface.privatekey"), ListenPort: viper.GetInt("Relay.Interface.port"), - Nickname: viper.GetString("Relay.Interface.nickname"), Peers: []peer.PeerConfigArgs{ { PublicKey: viper.GetString("Relay.Peer.publickey"), diff --git a/src/peer/config.go b/src/peer/config.go index 573fb76..f05e80f 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -18,7 +18,6 @@ type Config struct { mtu int peers []PeerConfig addresses []net.IPNet - nickname string } type configJSON struct { @@ -26,7 +25,6 @@ type configJSON struct { MTU int Peers []PeerConfig Addresses []net.IPNet - Nickname string } type ConfigArgs struct { @@ -37,7 +35,6 @@ type ConfigArgs struct { ReplacePeers bool Peers []PeerConfigArgs Addresses []string - Nickname string } type Shell uint @@ -80,13 +77,6 @@ func GetConfig(args ConfigArgs) (Config, error) { return Config{}, err } } - - if args.Nickname != "" { - err = c.SetNickname(args.Nickname) - if err != nil { - return Config{}, err - } - } c.SetReplacePeers(args.ReplacePeers) @@ -160,8 +150,6 @@ func ParseConfig(filename string) (c Config, err error) { return c, e } err = c.SetMTU(mtu) - //case "nickname": - //err = c.SetNickname(value) } if err != nil { return c, err @@ -230,7 +218,6 @@ func (c *Config) MarshalJSON() ([]byte, error) { c.mtu, c.peers, c.addresses, - c.nickname, }) } @@ -245,7 +232,6 @@ func (c *Config) UnmarshalJSON(b []byte) error { c.config = tmp.Config c.peers = tmp.Peers c.addresses = tmp.Addresses - c.nickname = tmp.Nickname return nil } @@ -277,22 +263,6 @@ func (c *Config) ClearPort() { c.config.ListenPort = nil } -func (c *Config) GetNickname() string { - return c.nickname -} - -func (c *Config) SetNickname(nickname string) error { - - if nickname != "" { - c.nickname = nickname - } - return nil -} - -func (c *Config) ClearNickname() { - c.nickname = "" -} - func (c *Config) SetFirewallMark(mark int) error { if mark < 1 { return errors.New("invalid firewall mark") @@ -442,11 +412,6 @@ func (c *Config) AsShareableFile() string { s.WriteString("[Peer]\n") s.WriteString(fmt.Sprintf("PublicKey = %s\n", c.config.PrivateKey.PublicKey().String())) s.WriteString("AllowedIPs = 0.0.0.0/32\n") - /* - if c.nickname != "" { - s.WriteString(fmt.Sprintf("#@Nickname = %s\n", c.nickname)) - } - */ return s.String() @@ -486,11 +451,6 @@ func CreateServerCommand(relayConfig Config, e2eeConfig Config, shell Shell, sim keys = append(keys, "WIRETAP_RELAY_INTERFACE_PORT") vals = append(vals, fmt.Sprint(*relayConfig.config.ListenPort)) } - - if relayConfig.nickname != "" { - keys = append(keys, "WIRETAP_RELAY_INTERFACE_NICKNAME") - vals = append(vals, fmt.Sprint(relayConfig.nickname)) - } if relayConfig.mtu != 0 { keys = append(keys, "WIRETAP_RELAY_INTERFACE_MTU") @@ -578,10 +538,6 @@ func CreateServerFile(relayConfig Config, e2eeConfig Config) string { if relayConfig.config.ListenPort != nil { s.WriteString(fmt.Sprintf("Port = %d\n", *relayConfig.config.ListenPort)) } - - if relayConfig.nickname != "" { - s.WriteString(fmt.Sprintf("Nickname = %s\n", relayConfig.nickname)) - } if relayConfig.mtu != 0 { s.WriteString(fmt.Sprintf("MTU = %d\n", relayConfig.mtu)) From 53ac4a4d2f40f7c1cfea28a3777a3114e7a306b9 Mon Sep 17 00:00:00 2001 From: Aptimex Date: Mon, 19 Aug 2024 16:38:05 -0600 Subject: [PATCH 8/9] use constant for special comments --- src/peer/config.go | 5 +++-- src/peer/peer_config.go | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/peer/config.go b/src/peer/config.go index f05e80f..5015c24 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -44,6 +44,8 @@ const ( PowerShell ) +const CUSTOM_PREFIX = "#@" + func GetConfig(args ConfigArgs) (Config, error) { c, err := NewConfig() if err != nil { @@ -162,7 +164,7 @@ func ParseConfig(filename string) (c Config, err error) { continue } - if line[:2] == "#@" { //special wiretap-specific values + if line[:2] == CUSTOM_PREFIX { //special wiretap-specific values line = line[2:] } else if line[0] == '#' { continue @@ -413,7 +415,6 @@ func (c *Config) AsShareableFile() string { s.WriteString(fmt.Sprintf("PublicKey = %s\n", c.config.PrivateKey.PublicKey().String())) s.WriteString("AllowedIPs = 0.0.0.0/32\n") - return s.String() } diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index d9f43ef..3b1137e 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -276,7 +276,7 @@ func (p *PeerConfig) AsFile() string { //Custom fields if p.nickname != "" { - s.WriteString(fmt.Sprintf("#@Nickname = %s\n", p.nickname)) + s.WriteString(fmt.Sprintf("%sNickname = %s\n", CUSTOM_PREFIX, p.nickname)) } return s.String() From 8d4e65f96bf30ffcc30d42bf957f93abd0d5b17d Mon Sep 17 00:00:00 2001 From: Aptimex Date: Fri, 23 Aug 2024 11:25:12 -0600 Subject: [PATCH 9/9] minor improvements --- src/peer/config.go | 4 ++-- src/peer/peer_config.go | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/peer/config.go b/src/peer/config.go index 5015c24..cf83d72 100644 --- a/src/peer/config.go +++ b/src/peer/config.go @@ -164,8 +164,8 @@ func ParseConfig(filename string) (c Config, err error) { continue } - if line[:2] == CUSTOM_PREFIX { //special wiretap-specific values - line = line[2:] + if strings.HasPrefix(line, CUSTOM_PREFIX) { //special wiretap-specific values + line = line[len(CUSTOM_PREFIX):] } else if line[0] == '#' { continue } diff --git a/src/peer/peer_config.go b/src/peer/peer_config.go index 3b1137e..7cc4064 100644 --- a/src/peer/peer_config.go +++ b/src/peer/peer_config.go @@ -257,9 +257,14 @@ func (p *PeerConfig) SetNickname(nickname string) error { func (p *PeerConfig) AsFile() string { var s strings.Builder - s.WriteString("[Peer]\n") + + if p.nickname != "" { + s.WriteString(fmt.Sprintf("%s Nickname = %s\n", CUSTOM_PREFIX, p.nickname)) + } + s.WriteString(fmt.Sprintf("PublicKey = %s\n", p.config.PublicKey.String())) + ips := []string{} for _, a := range p.config.AllowedIPs { ips = append(ips, a.String()) @@ -273,11 +278,6 @@ func (p *PeerConfig) AsFile() string { if p.config.PersistentKeepaliveInterval != nil { s.WriteString(fmt.Sprintf("PersistentKeepalive = %d\n", *p.config.PersistentKeepaliveInterval/time.Second)) } - - //Custom fields - if p.nickname != "" { - s.WriteString(fmt.Sprintf("%sNickname = %s\n", CUSTOM_PREFIX, p.nickname)) - } return s.String() }