fix: display tagged devices in user profile

This commit is contained in:
Johan Siebens
2022-05-24 20:35:05 +02:00
parent e8dc2ee34f
commit 03fd19958a
3 changed files with 33 additions and 16 deletions
+4
View File
@@ -61,6 +61,10 @@ func (m *Machine) HasTag(tag string) bool {
return false
}
func (m *Machine) HasTags() bool {
return len(m.Tags) != 0
}
func (m *Machine) IsAllowedIP(i netaddr.IP) bool {
if m.HasIP(i) {
return true
+11 -9
View File
@@ -219,7 +219,7 @@ func (h *PollNetMapHandler) createKeepAliveResponse(binder bind.Binder, request
func (h *PollNetMapHandler) createMapResponse(m *domain.Machine, binder bind.Binder, request *tailcfg.MapRequest, delta bool, prevSyncedPeerIDs map[uint64]bool) ([]byte, map[uint64]bool, error) {
ctx := context.TODO()
node, err := mapping.ToNode(m, true)
node, user, err := mapping.ToNode(m, true)
if err != nil {
return nil, nil, err
}
@@ -229,11 +229,7 @@ func (h *PollNetMapHandler) createMapResponse(m *domain.Machine, binder bind.Bin
return nil, nil, err
}
users, err := h.repository.ListUsers(ctx, m.TailnetID)
if err != nil {
return nil, nil, err
}
var users = []tailcfg.UserProfile{*user}
var changedPeers []*tailcfg.Node
var removedPeers []tailcfg.NodeID
@@ -243,19 +239,25 @@ func (h *PollNetMapHandler) createMapResponse(m *domain.Machine, binder bind.Bin
}
syncedPeerIDs := map[uint64]bool{}
syncedUserIDs := map[tailcfg.UserID]bool{}
for _, peer := range candidatePeers {
if peer.IsExpired() {
continue
}
if domain.IsValidPeer(policies, m, &peer) || domain.IsValidPeer(policies, &peer, m) {
n, err := mapping.ToNode(&peer, h.brokers(peer.TailnetID).IsConnected(peer.ID))
n, u, err := mapping.ToNode(&peer, h.brokers(peer.TailnetID).IsConnected(peer.ID))
if err != nil {
return nil, nil, err
}
changedPeers = append(changedPeers, n)
syncedPeerIDs[peer.ID] = true
delete(prevSyncedPeerIDs, peer.ID)
if _, ok := syncedUserIDs[u.ID]; !ok {
users = append(users, *u)
syncedUserIDs[u.ID] = true
}
}
}
@@ -287,7 +289,7 @@ func (h *PollNetMapHandler) createMapResponse(m *domain.Machine, binder bind.Bin
DERPMap: derpMap,
Domain: dnsname.SanitizeHostname(m.Tailnet.Name),
Peers: changedPeers,
UserProfiles: mapping.ToUserProfiles(users),
UserProfiles: users,
ControlTime: &controlTime,
}
} else {
@@ -297,7 +299,7 @@ func (h *PollNetMapHandler) createMapResponse(m *domain.Machine, binder bind.Bin
DERPMap: derpMap,
PeersChanged: changedPeers,
PeersRemoved: removedPeers,
UserProfiles: mapping.ToUserProfiles(users),
UserProfiles: users,
ControlTime: &controlTime,
}
}
+18 -7
View File
@@ -72,22 +72,22 @@ func ToDNSConfig(tailnet *domain.Tailnet, c *domain.DNSConfig) *tailcfg.DNSConfi
return config
}
func ToNode(m *domain.Machine, connected bool) (*tailcfg.Node, error) {
func ToNode(m *domain.Machine, connected bool) (*tailcfg.Node, *tailcfg.UserProfile, error) {
nKey, err := util.ParseNodePublicKey(m.NodeKey)
if err != nil {
return nil, err
return nil, nil, err
}
mKey, err := util.ParseMachinePublicKey(m.MachineKey)
if err != nil {
return nil, err
return nil, nil, err
}
var discoKey key.DiscoPublic
if m.DiscoKey != "" {
dKey, err := util.ParseDiscoPublicKey(m.DiscoKey)
if err != nil {
return nil, err
return nil, nil, err
}
discoKey = *dKey
}
@@ -101,7 +101,7 @@ func ToNode(m *domain.Machine, connected bool) (*tailcfg.Node, error) {
if !m.IPv4.IsZero() {
ipv4, err := m.IPv4.Prefix(32)
if err != nil {
return nil, err
return nil, nil, err
}
addrs = append(addrs, ipv4)
allowedIPs = append(allowedIPs, ipv4)
@@ -110,7 +110,7 @@ func ToNode(m *domain.Machine, connected bool) (*tailcfg.Node, error) {
if !m.IPv6.IsZero() {
ipv6, err := m.IPv6.Prefix(128)
if err != nil {
return nil, err
return nil, nil, err
}
addrs = append(addrs, ipv6)
allowedIPs = append(allowedIPs, ipv6)
@@ -169,7 +169,18 @@ func ToNode(m *domain.Machine, connected bool) (*tailcfg.Node, error) {
n.LastSeen = &l
}
return &n, nil
var user = ToUserProfile(m.User)
if m.HasTags() {
n.User = tailcfg.UserID(m.ID)
user = tailcfg.UserProfile{
ID: tailcfg.UserID(m.ID),
LoginName: "tagged-devices",
DisplayName: "Tagged Devices",
}
}
return &n, &user, nil
}
func ToUserProfile(u domain.User) tailcfg.UserProfile {