mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package headscale
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/rs/zerolog/log"
 | 
						|
	"tailscale.com/tailcfg"
 | 
						|
)
 | 
						|
 | 
						|
func (h *Headscale) generateMapResponse(
 | 
						|
	mapRequest tailcfg.MapRequest,
 | 
						|
	machine *Machine,
 | 
						|
) (*tailcfg.MapResponse, error) {
 | 
						|
	log.Trace().
 | 
						|
		Str("func", "generateMapResponse").
 | 
						|
		Str("machine", mapRequest.Hostinfo.Hostname).
 | 
						|
		Msg("Creating Map response")
 | 
						|
	node, err := machine.toNode(h.cfg.BaseDomain, h.cfg.DNSConfig, true)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().
 | 
						|
			Caller().
 | 
						|
			Str("func", "generateMapResponse").
 | 
						|
			Err(err).
 | 
						|
			Msg("Cannot convert to node")
 | 
						|
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	peers, err := h.getValidPeers(machine)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().
 | 
						|
			Caller().
 | 
						|
			Str("func", "generateMapResponse").
 | 
						|
			Err(err).
 | 
						|
			Msg("Cannot fetch peers")
 | 
						|
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	profiles := getMapResponseUserProfiles(*machine, peers)
 | 
						|
 | 
						|
	nodePeers, err := peers.toNodes(h.cfg.BaseDomain, h.cfg.DNSConfig, true)
 | 
						|
	if err != nil {
 | 
						|
		log.Error().
 | 
						|
			Caller().
 | 
						|
			Str("func", "generateMapResponse").
 | 
						|
			Err(err).
 | 
						|
			Msg("Failed to convert peers to Tailscale nodes")
 | 
						|
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	dnsConfig := getMapResponseDNSConfig(
 | 
						|
		h.cfg.DNSConfig,
 | 
						|
		h.cfg.BaseDomain,
 | 
						|
		*machine,
 | 
						|
		peers,
 | 
						|
	)
 | 
						|
 | 
						|
	resp := tailcfg.MapResponse{
 | 
						|
		KeepAlive:    false,
 | 
						|
		Node:         node,
 | 
						|
		Peers:        nodePeers,
 | 
						|
		DNSConfig:    dnsConfig,
 | 
						|
		Domain:       h.cfg.BaseDomain,
 | 
						|
		PacketFilter: h.aclRules,
 | 
						|
		DERPMap:      h.DERPMap,
 | 
						|
		UserProfiles: profiles,
 | 
						|
		Debug: &tailcfg.Debug{
 | 
						|
			DisableLogTail:      !h.cfg.LogTail.Enabled,
 | 
						|
			RandomizeClientPort: h.cfg.RandomizeClientPort,
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	log.Trace().
 | 
						|
		Str("func", "generateMapResponse").
 | 
						|
		Str("machine", mapRequest.Hostinfo.Hostname).
 | 
						|
		// Interface("payload", resp).
 | 
						|
		Msgf("Generated map response: %s", tailMapResponseToString(resp))
 | 
						|
 | 
						|
	return &resp, nil
 | 
						|
}
 |