mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-11-04 01:51:04 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			965 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			965 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package headscale
 | 
						|
 | 
						|
import "gorm.io/gorm"
 | 
						|
 | 
						|
const errorSameNamespace = Error("Destination namespace same as origin")
 | 
						|
const errorMachineAlreadyShared = Error("Node already shared to this namespace")
 | 
						|
 | 
						|
// SharedMachine is a join table to support sharing nodes between namespaces
 | 
						|
type SharedMachine struct {
 | 
						|
	gorm.Model
 | 
						|
	MachineID   uint64
 | 
						|
	Machine     Machine
 | 
						|
	NamespaceID uint
 | 
						|
	Namespace   Namespace
 | 
						|
}
 | 
						|
 | 
						|
// AddSharedMachineToNamespace adds a machine as a shared node to a namespace
 | 
						|
func (h *Headscale) AddSharedMachineToNamespace(m *Machine, ns *Namespace) error {
 | 
						|
	if m.NamespaceID == ns.ID {
 | 
						|
		return errorSameNamespace
 | 
						|
	}
 | 
						|
 | 
						|
	sharedMachine := SharedMachine{}
 | 
						|
	if err := h.db.Where("machine_id = ? AND namespace_id", m.ID, ns.ID).First(&sharedMachine).Error; err == nil {
 | 
						|
		return errorMachineAlreadyShared
 | 
						|
	}
 | 
						|
 | 
						|
	sharedMachine = SharedMachine{
 | 
						|
		MachineID:   m.ID,
 | 
						|
		Machine:     *m,
 | 
						|
		NamespaceID: ns.ID,
 | 
						|
		Namespace:   *ns,
 | 
						|
	}
 | 
						|
	h.db.Save(&sharedMachine)
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 |