diff --git a/api/api.go b/api/api.go index 21e22f9..84310c8 100644 --- a/api/api.go +++ b/api/api.go @@ -8,6 +8,7 @@ import ( "net/http" http_pprof "net/http/pprof" "runtime/pprof" + "strings" "github.com/anywherelan/awl/config" "github.com/anywherelan/awl/p2p" @@ -61,6 +62,11 @@ func (h *Handler) SetupAPI() error { e.HideBanner = true e.HidePort = true val := validator.New() + err := val.RegisterValidation("trimmed_str_not_empty", validateTrimmedStringNotEmpty, false) + if err != nil { + return err + } + e.Validator = &customValidator{validator: val} // Middleware @@ -163,3 +169,9 @@ func (e Error) Error() string { func ErrorMessage(message string) Error { return Error{Message: message} } + +func validateTrimmedStringNotEmpty(fl validator.FieldLevel) bool { + str := fl.Field().String() + str = strings.TrimSpace(str) + return len(str) > 0 +} diff --git a/api/peers.go b/api/peers.go index 3c04d55..9c5bfc6 100644 --- a/api/peers.go +++ b/api/peers.go @@ -3,6 +3,7 @@ package api import ( "net/http" "sort" + "strings" "github.com/anywherelan/awl/awldns" "github.com/anywherelan/awl/config" @@ -112,7 +113,13 @@ func (h *Handler) UpdatePeerSettings(c echo.Context) (err error) { } peerID := knownPeer.PeerId() - knownPeer.Alias = req.Alias + req.Alias = strings.TrimSpace(req.Alias) + if h.conf.CheckIsUniqPeerAliasAndCache(req.Alias) { + knownPeer.Alias = req.Alias + } else { + return c.JSON(http.StatusBadRequest, ErrorMessage("peer name is not unique")) + } + knownPeer.DomainName = req.DomainName h.conf.UpsertPeer(knownPeer) @@ -158,6 +165,11 @@ func (h *Handler) SendFriendRequest(c echo.Context) (err error) { return c.JSON(http.StatusBadRequest, ErrorMessage("Peer has already been added")) } + req.Alias = strings.TrimSpace(req.Alias) + if !h.conf.CheckIsUniqPeerAliasAndCache(req.Alias) { + return c.JSON(http.StatusBadRequest, ErrorMessage("peer name is not unique")) + } + h.authStatus.AddPeer(h.ctx, peerId, "", req.Alias, false) return c.NoContent(http.StatusOK) @@ -208,6 +220,11 @@ func (h *Handler) AcceptFriend(c echo.Context) (err error) { return c.NoContent(http.StatusOK) } + req.Alias = strings.TrimSpace(req.Alias) + if !h.conf.CheckIsUniqPeerAliasAndCache(req.Alias) { + return c.JSON(http.StatusBadRequest, ErrorMessage("peer name is not unique")) + } + h.authStatus.AddPeer(h.ctx, peerId, auth.Name, req.Alias, true) return c.NoContent(http.StatusOK) diff --git a/cli/cli.go b/cli/cli.go index 59b98f2..bcfd30b 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -128,7 +128,7 @@ func (a *Application) init() { &cli.StringFlag{ Name: "name", Usage: "peer name", - Required: false, + Required: true, }, }, Before: a.initApiConnection, diff --git a/config/config.go b/config/config.go index e347cbe..36d2b32 100644 --- a/config/config.go +++ b/config/config.go @@ -2,6 +2,7 @@ package config import ( "encoding/json" + "fmt" "io/ioutil" "net" "path/filepath" @@ -25,13 +26,16 @@ const ( // TODO 8989 maybe? DefaultHTTPPort = 8639 HttpServerDomainName = "admin" + + DefaultPeerAlias = "peer" ) type ( Config struct { - sync.RWMutex `swaggerignore:"true"` - dataDir string - emitter awlevent.Emitter + sync.RWMutex `swaggerignore:"true"` + dataDir string + emitter awlevent.Emitter + peersUniqAliases map[string]struct{} Version string `json:"version"` LoggerLevel string `json:"loggerLevel"` @@ -97,6 +101,23 @@ func (c *Config) Save() { c.RUnlock() } +func (c *Config) CheckIsUniqPeerAliasAndCache(alias string) bool { + c.Lock() + _, ok := c.peersUniqAliases[alias] + if !ok { + c.peersUniqAliases[alias] = struct{}{} + } + c.Unlock() + return !ok +} + +func (c *Config) GenUniqPeerAlias(name, alias string) string { + c.Lock() + alias = c.genUniqPeerAlias(name, alias) + c.Unlock() + return alias +} + func (c *Config) KnownPeersIds() []peer.ID { c.RLock() ids := make([]peer.ID, 0, len(c.KnownPeers)) @@ -119,6 +140,7 @@ func (c *Config) RemovePeer(peerID string) (KnownPeer, bool) { knownPeer, exists := c.KnownPeers[peerID] if exists { delete(c.KnownPeers, peerID) + delete(c.peersUniqAliases, knownPeer.Alias) c.save() } c.Unlock() @@ -332,6 +354,26 @@ func (c *Config) path() string { return path } +func (c *Config) genUniqPeerAlias(name, alias string) string { + if alias == "" { + if name == "" { + alias = DefaultPeerAlias + } else { + alias = name + } + } + if _, ok := c.peersUniqAliases[alias]; ok { + newAlias := "" + for i := 0; ok; i++ { + newAlias = fmt.Sprintf("%s_%d", alias, i) + _, ok = c.peersUniqAliases[newAlias] + } + alias = newAlias + } + c.peersUniqAliases[alias] = struct{}{} + return alias +} + func (kp KnownPeer) PeerId() peer.ID { peerID, err := peer.Decode(kp.PeerID) if err != nil { diff --git a/config/other.go b/config/other.go index b5221be..d36d0d5 100644 --- a/config/other.go +++ b/config/other.go @@ -169,11 +169,17 @@ func setDefaults(conf *Config, bus awlevent.Bus) { conf.VPNConfig.InterfaceName = defaultInterfaceName } + conf.peersUniqAliases = make(map[string]struct{}) if conf.KnownPeers == nil { conf.KnownPeers = make(map[string]KnownPeer) } for peerID := range conf.KnownPeers { peer := conf.KnownPeers[peerID] + newAlias := conf.genUniqPeerAlias(peer.Name, peer.Alias) + if newAlias != peer.Alias { + logger.Warnf("incorrect config: peer alias %s is not unique, updated automaticaly to %s", peer.Alias, newAlias) + peer.Alias = newAlias + } if peer.IPAddr == "" { peer.IPAddr = conf.GenerateNextIpAddr() } diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 6c87ff5..0d85cfc 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -18,49 +18,63 @@ definitions: type: object config.Config: properties: - bucketSize: - type: integer - concurrency: + connManager: {} + connectionGater: {} + disablePing: + type: boolean + enableAutoRelay: + type: boolean + enableService: + type: boolean + forceReachability: type: integer - datastore: {} - disableFixLowPeers: - description: test specific Config options + insecure: type: boolean - enableProviders: + listenAddrs: + items: {} + type: array + multiaddrResolver: + $ref: '#/definitions/madns.Resolver' + muxers: + items: + $ref: '#/definitions/config.MsMuxC' + type: array + peerKey: {} + peerstore: {} + psk: + items: + type: integer + type: array + relay: type: boolean - enableValues: + relayCustom: type: boolean - maxRecordAge: + relayOpts: + items: + type: integer + type: array + reporter: {} + securityTransports: + items: + $ref: '#/definitions/config.MsSecC' + type: array + staticRelays: + items: + $ref: '#/definitions/peer.AddrInfo' + type: array + throttleGlobalLimit: type: integer - mode: + throttleInterval: type: integer - protocolPrefix: - type: string - resiliency: + throttlePeerLimit: type: integer - routingTable: - properties: - autoRefresh: - type: boolean - checkInterval: - type: integer - diversityFilter: {} - latencyTolerance: - type: integer - refreshInterval: - type: integer - refreshQueryTimeout: - type: integer - type: object - testAddressUpdateProcessing: - type: boolean - v1ProtocolOverride: + userAgent: + description: |- + UserAgent is the identifier this node will send to other peers when + identifying itself, e.g. via the identify protocol. + + Set it via the UserAgent option function. type: string - validator: {} - validatorChanged: - description: if true implies that the validator has been changed and that - Defaults should not be used - type: boolean type: object config.KnownPeer: properties: @@ -92,6 +106,16 @@ definitions: description: Hex-encoded multihash representing a peer ID type: string type: object + config.MsMuxC: + properties: + id: + type: string + type: object + config.MsSecC: + properties: + id: + type: string + type: object entity.AuthRequest: properties: name: @@ -170,6 +194,7 @@ definitions: peerID: type: string required: + - alias - peerID type: object entity.FriendRequestReply: @@ -181,6 +206,7 @@ definitions: peerID: type: string required: + - alias - peerID type: object entity.GeneralDebugInfo: @@ -205,6 +231,7 @@ definitions: declined: type: boolean displayName: + description: 'Deprecated: useless, equal to Alias all the time' type: string domainName: type: string @@ -296,6 +323,7 @@ definitions: peerID: type: string required: + - alias - peerID type: object kbucket.PeerInfo: @@ -316,6 +344,8 @@ definitions: Please see the DHT docs for the definition of usefulness. type: string type: object + madns.Resolver: + type: object metrics.Stats: properties: rateIn: @@ -355,6 +385,14 @@ definitions: transient: type: boolean type: object + peer.AddrInfo: + properties: + addrs: + items: {} + type: array + id: + type: string + type: object host: localhost:8639 info: contact: {} diff --git a/entity/api.go b/entity/api.go index 815bdd1..9de0705 100644 --- a/entity/api.go +++ b/entity/api.go @@ -17,11 +17,11 @@ type ( } FriendRequest struct { PeerID string `validate:"required"` - Alias string + Alias string `validate:"required,trimmed_str_not_empty"` } FriendRequestReply struct { PeerID string `validate:"required"` - Alias string + Alias string `validate:"required,trimmed_str_not_empty"` Decline bool } PeerIDRequest struct { @@ -29,7 +29,7 @@ type ( } UpdatePeerSettingsRequest struct { PeerID string `validate:"required"` - Alias string + Alias string `validate:"required,trimmed_str_not_empty"` DomainName string } UpdateMySettingsRequest struct { @@ -42,7 +42,7 @@ type ( KnownPeersResponse struct { PeerID string Name string // Deprecated: use DisplayName instead - DisplayName string + DisplayName string // Deprecated: useless, equal to Alias all the time Alias string Version string IpAddr string diff --git a/go.sum b/go.sum index 9c92bcc..1027714 100644 --- a/go.sum +++ b/go.sum @@ -108,6 +108,7 @@ github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7 github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -131,6 +132,7 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -678,6 +680,7 @@ github.com/libp2p/go-yamux v1.3.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZ github.com/libp2p/go-yamux v1.3.5/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= +github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= github.com/libp2p/go-yamux/v2 v2.2.0 h1:RwtpYZ2/wVviZ5+3pjC8qdQ4TKnrak0/E01N1UWoAFU= github.com/libp2p/go-yamux/v2 v2.2.0/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ= @@ -935,6 +938,7 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1009,6 +1013,7 @@ github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cb github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= @@ -1038,6 +1043,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= @@ -1083,6 +1089,7 @@ go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go4.org v0.0.0-20180809161055-417644f6feb5 h1:+hE86LblG4AyDgwMCLTE6FOlM9+qjHSYS+rKqxUVdsM= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= go4.org/intern v0.0.0-20210108033219-3eb7198706b2 h1:VFTf+jjIgsldaz/Mr00VaCSswHJrI2hIjQygE/W4IMg= go4.org/intern v0.0.0-20210108033219-3eb7198706b2/go.mod h1:vLqJ+12kCw61iCWsPto0EOHhBS+o4rO5VIucbc9g2Cc= @@ -1153,6 +1160,7 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1230,6 +1238,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde h1:ejfdSekXMDxDLbRrJMwUk6KnSLZ2McaUCVcIKM+N6jc= golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1313,10 +1322,13 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210910150752-751e447fb3d0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/service/auth_status.go b/service/auth_status.go index 3bde8b2..b3798e0 100644 --- a/service/auth_status.go +++ b/service/auth_status.go @@ -95,7 +95,7 @@ func (s *AuthStatus) StatusStreamHandler(stream network.Stream) { } // Processing opposite peer info - // get latest peer config to reduce race time between get and upsert (without locking) + // get the latest peer config to reduce race time between get and upsert (without locking) // TODO: fix race completely knownPeer, _ = s.conf.GetPeer(peerID) newPeer := s.processPeerStatusInfo(knownPeer, oppositePeerInfo) @@ -136,7 +136,7 @@ func (s *AuthStatus) ExchangeNewStatusInfo(ctx context.Context, remotePeerID pee return nil } - // get latest peer config to reduce race time between get and upsert (without locking) + // get the latest peer config to reduce race time between get and upsert (without locking) // TODO: fix race completely knownPeer, _ = s.conf.GetPeer(remotePeerID.String()) newPeer := s.processPeerStatusInfo(knownPeer, oppositePeerInfo) @@ -165,7 +165,7 @@ func (s *AuthStatus) createPeerInfo(_ config.KnownPeer, myPeerName string, decli return myPeerInfo } -func (*AuthStatus) processPeerStatusInfo(peer config.KnownPeer, peerInfo protocol.PeerStatusInfo) config.KnownPeer { +func (s *AuthStatus) processPeerStatusInfo(peer config.KnownPeer, peerInfo protocol.PeerStatusInfo) config.KnownPeer { peer.LastSeen = time.Now() if peerInfo.Declined { peer.Declined = true @@ -177,6 +177,9 @@ func (*AuthStatus) processPeerStatusInfo(peer config.KnownPeer, peerInfo protoco if peer.DomainName == "" { peer.DomainName = awldns.TrimDomainName(peer.DisplayName()) } + if peer.Alias == "" { + peer.Alias = s.conf.GenUniqPeerAlias(peer.Name, peer.Alias) + } return peer } @@ -211,7 +214,7 @@ func (s *AuthStatus) AuthStreamHandler(stream network.Stream) { } if !confirmed && !isBlocked && autoAccept { defer func() { - s.AddPeer(context.Background(), remotePeer, authPeer.Name, "", true) + s.AddPeer(context.Background(), remotePeer, authPeer.Name, s.conf.GenUniqPeerAlias(authPeer.Name, ""), true) }() } @@ -270,14 +273,14 @@ func (s *AuthStatus) SendAuthRequest(ctx context.Context, peerID peer.ID, req pr return nil } -func (s *AuthStatus) AddPeer(ctx context.Context, peerID peer.ID, name, alias string, confirmed bool) { +func (s *AuthStatus) AddPeer(ctx context.Context, peerID peer.ID, name, uniqAlias string, confirmed bool) { s.conf.RLock() ipAddr := s.conf.GenerateNextIpAddr() s.conf.RUnlock() newPeerConfig := config.KnownPeer{ PeerID: peerID.String(), Name: name, - Alias: alias, + Alias: uniqAlias, IPAddr: ipAddr, Confirmed: confirmed, CreatedAt: time.Now(),