mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
		
			884 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			884 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package headscale
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 
 | |
| 	"gorm.io/gorm"
 | |
| 	"tailscale.com/types/wgkey"
 | |
| )
 | |
| 
 | |
| // RegisterMachine is executed from the CLI to register a new Machine using its MachineKey
 | |
| func (h *Headscale) RegisterMachine(key string, namespace string) (*Machine, error) {
 | |
| 	ns, err := h.GetNamespace(namespace)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	mKey, err := wgkey.ParseHex(key)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 
 | |
| 	m := Machine{}
 | |
| 	if result := h.db.First(&m, "machine_key = ?", mKey.HexString()); errors.Is(result.Error, gorm.ErrRecordNotFound) {
 | |
| 		return nil, errors.New("Machine not found")
 | |
| 	}
 | |
| 
 | |
| 	if m.isAlreadyRegistered() {
 | |
| 		return nil, errors.New("Machine already registered")
 | |
| 	}
 | |
| 
 | |
| 	ip, err := h.getAvailableIP()
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	m.IPAddress = ip.String()
 | |
| 	m.NamespaceID = ns.ID
 | |
| 	m.Registered = true
 | |
| 	m.RegisterMethod = "cli"
 | |
| 	h.db.Save(&m)
 | |
| 	return &m, nil
 | |
| }
 |