mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-11-04 01:51:04 +01:00 
			
		
		
		
	Fix error 500 when deleting shared node (fixes #133)
This commit is contained in:
		
							parent
							
								
									087c461762
								
							
						
					
					
						commit
						48f5a9a18c
					
				
							
								
								
									
										11
									
								
								machine.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								machine.go
									
									
									
									
									
								
							@ -179,6 +179,11 @@ func (h *Headscale) UpdateMachine(m *Machine) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// DeleteMachine softs deletes a Machine from the database
 | 
					// DeleteMachine softs deletes a Machine from the database
 | 
				
			||||||
func (h *Headscale) DeleteMachine(m *Machine) error {
 | 
					func (h *Headscale) DeleteMachine(m *Machine) error {
 | 
				
			||||||
 | 
						err := h.RemoveSharedMachineFromAllNamespaces(m)
 | 
				
			||||||
 | 
						if err != nil && err != errorMachineNotShared {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.Registered = false
 | 
						m.Registered = false
 | 
				
			||||||
	namespaceID := m.NamespaceID
 | 
						namespaceID := m.NamespaceID
 | 
				
			||||||
	h.db.Save(&m) // we mark it as unregistered, just in case
 | 
						h.db.Save(&m) // we mark it as unregistered, just in case
 | 
				
			||||||
@ -191,10 +196,16 @@ func (h *Headscale) DeleteMachine(m *Machine) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// HardDeleteMachine hard deletes a Machine from the database
 | 
					// HardDeleteMachine hard deletes a Machine from the database
 | 
				
			||||||
func (h *Headscale) HardDeleteMachine(m *Machine) error {
 | 
					func (h *Headscale) HardDeleteMachine(m *Machine) error {
 | 
				
			||||||
 | 
						err := h.RemoveSharedMachineFromAllNamespaces(m)
 | 
				
			||||||
 | 
						if err != nil && err != errorMachineNotShared {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	namespaceID := m.NamespaceID
 | 
						namespaceID := m.NamespaceID
 | 
				
			||||||
	if err := h.db.Unscoped().Delete(&m).Error; err != nil {
 | 
						if err := h.db.Unscoped().Delete(&m).Error; err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return h.RequestMapUpdates(namespaceID)
 | 
						return h.RequestMapUpdates(namespaceID)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										11
									
								
								sharing.go
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								sharing.go
									
									
									
									
									
								
							@ -4,6 +4,7 @@ import "gorm.io/gorm"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const errorSameNamespace = Error("Destination namespace same as origin")
 | 
					const errorSameNamespace = Error("Destination namespace same as origin")
 | 
				
			||||||
const errorMachineAlreadyShared = Error("Node already shared to this namespace")
 | 
					const errorMachineAlreadyShared = Error("Node already shared to this namespace")
 | 
				
			||||||
 | 
					const errorMachineNotShared = Error("Machine not shared to this namespace")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// SharedMachine is a join table to support sharing nodes between namespaces
 | 
					// SharedMachine is a join table to support sharing nodes between namespaces
 | 
				
			||||||
type SharedMachine struct {
 | 
					type SharedMachine struct {
 | 
				
			||||||
@ -35,3 +36,13 @@ func (h *Headscale) AddSharedMachineToNamespace(m *Machine, ns *Namespace) error
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RemoveSharedMachineFromAllNamespaces removes a machine as a shared node from all namespaces
 | 
				
			||||||
 | 
					func (h *Headscale) RemoveSharedMachineFromAllNamespaces(m *Machine) error {
 | 
				
			||||||
 | 
						sharedMachine := SharedMachine{}
 | 
				
			||||||
 | 
						if result := h.db.Where("machine_id = ?", m.ID).Unscoped().Delete(&sharedMachine); result.Error != nil {
 | 
				
			||||||
 | 
							return result.Error
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user