mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Merge branch 'main' into tailscale-203
This commit is contained in:
		
						commit
						7a6be36f46
					
				
							
								
								
									
										6
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/lint.yml
									
									
									
									
										vendored
									
									
								
							| @ -14,6 +14,12 @@ jobs: | ||||
|         with: | ||||
|           version: latest | ||||
| 
 | ||||
|           # Only block PRs on new problems. | ||||
|           # If this is not enabled, we will end up having PRs | ||||
|           # blocked because new linters has appared and other | ||||
|           # parts of the code is affected. | ||||
|           only-new-issues: true | ||||
| 
 | ||||
|   prettier-lint: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|  | ||||
| @ -2,6 +2,9 @@ | ||||
| 
 | ||||
| **TBD (TBD):** | ||||
| 
 | ||||
| - Fixed issue where hosts deleted from control server may be written back to the database, as long as they are connected to the control server [#278](https://github.com/juanfont/headscale/pull/278) | ||||
|   ) | ||||
| 
 | ||||
| **0.12.3 (2022-01-13):** | ||||
| 
 | ||||
| **Changes**: | ||||
|  | ||||
							
								
								
									
										3
									
								
								app.go
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								app.go
									
									
									
									
									
								
							| @ -724,7 +724,8 @@ func readOrCreatePrivateKey(path string) (*key.MachinePrivate, error) { | ||||
| 		return nil, fmt.Errorf("failed to read private key file: %w", err) | ||||
| 	} | ||||
| 
 | ||||
| 	privateKeyEnsurePrefix := PrivateKeyEnsurePrefix(string(privateKey)) | ||||
| 	trimmedPrivateKey := strings.TrimSpace(string(privateKey)) | ||||
| 	privateKeyEnsurePrefix := PrivateKeyEnsurePrefix(trimmedPrivateKey) | ||||
| 
 | ||||
| 	var machineKey key.MachinePrivate | ||||
| 	if err = machineKey.UnmarshalText([]byte(privateKeyEnsurePrefix)); err != nil { | ||||
|  | ||||
| @ -319,6 +319,14 @@ func (h *Headscale) DeleteMachine(machine *Machine) error { | ||||
| 	return h.RequestMapUpdates(namespaceID) | ||||
| } | ||||
| 
 | ||||
| func (h *Headscale) TouchMachine(machine *Machine) error { | ||||
| 	return h.db.Updates(Machine{ | ||||
| 		ID:                   machine.ID, | ||||
| 		LastSeen:             machine.LastSeen, | ||||
| 		LastSuccessfulUpdate: machine.LastSuccessfulUpdate, | ||||
| 	}).Error | ||||
| } | ||||
| 
 | ||||
| // HardDeleteMachine hard deletes a Machine from the database.
 | ||||
| func (h *Headscale) HardDeleteMachine(machine *Machine) error { | ||||
| 	err := h.RemoveSharedMachineFromAllNamespaces(machine) | ||||
|  | ||||
							
								
								
									
										84
									
								
								poll.go
									
									
									
									
									
								
							
							
						
						
									
										84
									
								
								poll.go
									
									
									
									
									
								
							| @ -102,7 +102,7 @@ func (h *Headscale) PollNetMapHandler(ctx *gin.Context) { | ||||
| 		machine.Endpoints = datatypes.JSON(endpoints) | ||||
| 		machine.LastSeen = &now | ||||
| 	} | ||||
| 	h.db.Save(&machine) | ||||
| 	h.db.Updates(machine) | ||||
| 
 | ||||
| 	data, err := h.getMapResponse(machineKey, req, machine) | ||||
| 	if err != nil { | ||||
| @ -291,6 +291,10 @@ func (h *Headscale) PollNetMapStream( | ||||
| 					Str("channel", "pollData"). | ||||
| 					Err(err). | ||||
| 					Msg("Cannot update machine from database") | ||||
| 
 | ||||
| 				// client has been removed from database
 | ||||
| 				// since the stream opened, terminate connection.
 | ||||
| 				return false | ||||
| 			} | ||||
| 			now := time.Now().UTC() | ||||
| 			machine.LastSeen = &now | ||||
| @ -299,13 +303,22 @@ func (h *Headscale) PollNetMapStream( | ||||
| 				Set(float64(now.Unix())) | ||||
| 			machine.LastSuccessfulUpdate = &now | ||||
| 
 | ||||
| 			h.db.Save(&machine) | ||||
| 			log.Trace(). | ||||
| 				Str("handler", "PollNetMapStream"). | ||||
| 				Str("machine", machine.Name). | ||||
| 				Str("channel", "pollData"). | ||||
| 				Int("bytes", len(data)). | ||||
| 				Msg("Machine entry in database updated successfully after sending pollData") | ||||
| 			err = h.TouchMachine(machine) | ||||
| 			if err != nil { | ||||
| 				log.Error(). | ||||
| 					Str("handler", "PollNetMapStream"). | ||||
| 					Str("machine", machine.Name). | ||||
| 					Str("channel", "pollData"). | ||||
| 					Err(err). | ||||
| 					Msg("Cannot update machine LastSuccessfulUpdate") | ||||
| 			} else { | ||||
| 				log.Trace(). | ||||
| 					Str("handler", "PollNetMapStream"). | ||||
| 					Str("machine", machine.Name). | ||||
| 					Str("channel", "pollData"). | ||||
| 					Int("bytes", len(data)). | ||||
| 					Msg("Machine entry in database updated successfully after sending pollData") | ||||
| 			} | ||||
| 
 | ||||
| 			return true | ||||
| 
 | ||||
| @ -344,16 +357,29 @@ func (h *Headscale) PollNetMapStream( | ||||
| 					Str("channel", "keepAlive"). | ||||
| 					Err(err). | ||||
| 					Msg("Cannot update machine from database") | ||||
| 
 | ||||
| 				// client has been removed from database
 | ||||
| 				// since the stream opened, terminate connection.
 | ||||
| 				return false | ||||
| 			} | ||||
| 			now := time.Now().UTC() | ||||
| 			machine.LastSeen = &now | ||||
| 			h.db.Save(&machine) | ||||
| 			log.Trace(). | ||||
| 				Str("handler", "PollNetMapStream"). | ||||
| 				Str("machine", machine.Name). | ||||
| 				Str("channel", "keepAlive"). | ||||
| 				Int("bytes", len(data)). | ||||
| 				Msg("Machine updated successfully after sending keep alive") | ||||
| 			err = h.TouchMachine(machine) | ||||
| 			if err != nil { | ||||
| 				log.Error(). | ||||
| 					Str("handler", "PollNetMapStream"). | ||||
| 					Str("machine", machine.Name). | ||||
| 					Str("channel", "keepAlive"). | ||||
| 					Err(err). | ||||
| 					Msg("Cannot update machine LastSeen") | ||||
| 			} else { | ||||
| 				log.Trace(). | ||||
| 					Str("handler", "PollNetMapStream"). | ||||
| 					Str("machine", machine.Name). | ||||
| 					Str("channel", "keepAlive"). | ||||
| 					Int("bytes", len(data)). | ||||
| 					Msg("Machine updated successfully after sending keep alive") | ||||
| 			} | ||||
| 
 | ||||
| 			return true | ||||
| 
 | ||||
| @ -417,6 +443,10 @@ func (h *Headscale) PollNetMapStream( | ||||
| 						Str("channel", "update"). | ||||
| 						Err(err). | ||||
| 						Msg("Cannot update machine from database") | ||||
| 
 | ||||
| 					// client has been removed from database
 | ||||
| 					// since the stream opened, terminate connection.
 | ||||
| 					return false | ||||
| 				} | ||||
| 				now := time.Now().UTC() | ||||
| 
 | ||||
| @ -424,7 +454,15 @@ func (h *Headscale) PollNetMapStream( | ||||
| 					Set(float64(now.Unix())) | ||||
| 				machine.LastSuccessfulUpdate = &now | ||||
| 
 | ||||
| 				h.db.Save(&machine) | ||||
| 				err = h.TouchMachine(machine) | ||||
| 				if err != nil { | ||||
| 					log.Error(). | ||||
| 						Str("handler", "PollNetMapStream"). | ||||
| 						Str("machine", machine.Name). | ||||
| 						Str("channel", "update"). | ||||
| 						Err(err). | ||||
| 						Msg("Cannot update machine LastSuccessfulUpdate") | ||||
| 				} | ||||
| 			} else { | ||||
| 				log.Trace(). | ||||
| 					Str("handler", "PollNetMapStream"). | ||||
| @ -452,10 +490,22 @@ func (h *Headscale) PollNetMapStream( | ||||
| 					Str("channel", "Done"). | ||||
| 					Err(err). | ||||
| 					Msg("Cannot update machine from database") | ||||
| 
 | ||||
| 				// client has been removed from database
 | ||||
| 				// since the stream opened, terminate connection.
 | ||||
| 				return false | ||||
| 			} | ||||
| 			now := time.Now().UTC() | ||||
| 			machine.LastSeen = &now | ||||
| 			h.db.Save(&machine) | ||||
| 			err = h.TouchMachine(machine) | ||||
| 			if err != nil { | ||||
| 				log.Error(). | ||||
| 					Str("handler", "PollNetMapStream"). | ||||
| 					Str("machine", machine.Name). | ||||
| 					Str("channel", "Done"). | ||||
| 					Err(err). | ||||
| 					Msg("Cannot update machine LastSeen") | ||||
| 			} | ||||
| 
 | ||||
| 			log.Trace(). | ||||
| 				Str("handler", "PollNetMapStream"). | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user