fix(agent): 同步更新 transport URL 并发布 v1.4.2
CI / verify (push) Canceled after 0s

This commit is contained in:
2026-09-28 14:24:37 +08:00
parent fac9234e4d
commit 4a29bcb249
9 changed files with 51 additions and 25 deletions
+15 -5
View File
@@ -780,11 +780,12 @@ func (s *Service) AgentInstall(ctx context.Context, serverID int64) (Server, err
}
s.tunnels[serverID] = tunnel
s.tunnelMu.Unlock()
if err := s.store.SetAgentTransport(ctx, serverID, "tunnel", localPort, "", "127.0.0.1:7700", "connected", ""); err != nil {
if err := s.store.SetAgentTransport(ctx, serverID, baseURL, "tunnel", localPort, "", "127.0.0.1:7700", "connected", ""); err != nil {
tunnel.Stop()
_ = (AgentInstaller{SSH: installer}).RestorePreviousConfig(ctx)
return Server{}, err
}
s.invalidateAgentClient(serverID)
return updated, nil
}
@@ -861,10 +862,12 @@ func (s *Service) ensureAgentTunnel(ctx context.Context, serverID int64) (*agent
}
s.tunnels[serverID] = tunnel
s.tunnelMu.Unlock()
if err := s.store.SetAgentTransport(ctx, serverID, "tunnel", localPort, server.AgentTLSPin, "127.0.0.1:7700", "connected", ""); err != nil {
baseURL := fmt.Sprintf("http://127.0.0.1:%d", localPort)
if err := s.store.SetAgentTransport(ctx, serverID, baseURL, "tunnel", localPort, "", "127.0.0.1:7700", "connected", ""); err != nil {
tunnel.Stop()
return nil, err
}
s.invalidateAgentClient(serverID)
return tunnel, nil
}
@@ -926,7 +929,7 @@ func (s *Service) RestartAgentTunnel(ctx context.Context, serverID int64) (Serve
}
s.stopAgentTunnel(serverID)
if _, err := s.ensureAgentTunnel(ctx, serverID); err != nil {
_ = s.store.SetAgentTransport(ctx, serverID, "tunnel", current.AgentLocalPort, current.AgentTLSPin, current.AgentListenAddr, "failed", err.Error())
_ = s.store.SetAgentTransport(ctx, serverID, current.AgentURL, "tunnel", current.AgentLocalPort, current.AgentTLSPin, current.AgentListenAddr, "failed", err.Error())
return Server{}, err
}
server, err := s.store.GetServer(ctx, serverID)
@@ -984,9 +987,10 @@ func (s *Service) EnableAgentHTTPS(ctx context.Context, serverID int64, port int
_ = currentClient.DisableHTTPS(ctx)
return Server{}, fmt.Errorf("HTTPS 直连验证失败: %w", err)
}
if err := s.store.SetAgentTransport(ctx, serverID, "https-pin", server.AgentLocalPort, cert.Pin, fmt.Sprintf("0.0.0.0:%d", port), "connected", ""); err != nil {
if err := s.store.SetAgentTransport(ctx, serverID, baseURL, "https-pin", server.AgentLocalPort, cert.Pin, fmt.Sprintf("0.0.0.0:%d", port), "connected", ""); err != nil {
return Server{}, err
}
s.invalidateAgentClient(serverID)
s.stopAgentTunnel(serverID)
updated, err := s.store.GetServer(ctx, serverID)
if err != nil {
@@ -1029,7 +1033,7 @@ func (s *Service) AgentUninstall(ctx context.Context, serverID int64, keepData b
output, err := AgentInstaller{SSH: installer}.Uninstall(ctx, keepData)
if err == nil {
s.stopAgentTunnel(serverID)
_ = s.store.SetAgentTransport(ctx, serverID, "tunnel", 0, "", "", "stopped", "")
_ = s.store.SetAgentTransport(ctx, serverID, "", "tunnel", 0, "", "", "stopped", "")
}
return output, err
}
@@ -1585,6 +1589,12 @@ type cachedAgentClient struct {
client *AgentClient
}
func (s *Service) invalidateAgentClient(serverID int64) {
s.agentMu.Lock()
delete(s.agentClients, serverID)
s.agentMu.Unlock()
}
func (s *Service) agentClient(ctx context.Context, serverID int64) (*AgentClient, bool) {
server, err := s.store.GetServer(ctx, serverID)
if err != nil || !server.MgmtEnabled || !server.AgentConfigured {
+3 -3
View File
@@ -279,14 +279,14 @@ func (s *Store) AgentToken(ctx context.Context, id int64) (string, error) {
return token, err
}
func (s *Store) SetAgentTransport(ctx context.Context, id int64, transport string, localPort int, tlsPin, listenAddr, state, lastError string) error {
func (s *Store) SetAgentTransport(ctx context.Context, id int64, agentURL, transport string, localPort int, tlsPin, listenAddr, state, lastError string) error {
result, err := s.db.ExecContext(ctx, `
UPDATE frp_servers
SET agent_transport = ?, agent_local_port = ?, agent_tls_pin = ?,
SET agent_url = ?, agent_transport = ?, agent_local_port = ?, agent_tls_pin = ?,
agent_listen_addr = ?, agent_transport_state = ?, agent_transport_error = ?,
updated_at = datetime('now')
WHERE id = ?
`, transport, localPort, tlsPin, listenAddr, state, lastError, id)
`, agentURL, transport, localPort, tlsPin, listenAddr, state, lastError, id)
if err != nil {
return err
}