From 914d080a5796fbedae393be671218f7351d2d863 Mon Sep 17 00:00:00 2001 From: Owen Date: Fri, 7 Nov 2025 14:31:13 -0800 Subject: [PATCH] Connecting disconnecting working Former-commit-id: 553010f2ea1ffb01f0bdc612f91de81b29bee512 --- api/api.go | 18 ++++++++++++++++++ olm/olm.go | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/api/api.go b/api/api.go index 83fd6f3..a79e20f 100644 --- a/api/api.go +++ b/api/api.go @@ -255,6 +255,15 @@ func (s *API) handleConnect(w http.ResponseWriter, r *http.Request) { return } + // if we are already connected, reject new connection requests + s.statusMu.RLock() + alreadyConnected := s.isConnected + s.statusMu.RUnlock() + if alreadyConnected { + http.Error(w, "Already connected to a server. Disconnect first before connecting again.", http.StatusConflict) + return + } + var req ConnectionRequest decoder := json.NewDecoder(r.Body) if err := decoder.Decode(&req); err != nil { @@ -374,6 +383,15 @@ func (s *API) handleDisconnect(w http.ResponseWriter, r *http.Request) { return } + // if we are already disconnected, reject new disconnect requests + s.statusMu.RLock() + alreadyDisconnected := !s.isConnected + s.statusMu.RUnlock() + if alreadyDisconnected { + http.Error(w, "Not currently connected to a server.", http.StatusConflict) + return + } + logger.Info("Received disconnect request via API") // Send disconnect signal diff --git a/olm/olm.go b/olm/olm.go index d571cc3..474e968 100644 --- a/olm/olm.go +++ b/olm/olm.go @@ -64,6 +64,7 @@ var ( apiServer *api.API olmClient *websocket.Client tunnelCancel context.CancelFunc + tunnelRunning bool ) func Run(ctx context.Context, config Config) { @@ -132,6 +133,7 @@ func Run(ctx context.Context, config Config) { // Start the tunnel process with the new credentials if id != "" && secret != "" && endpoint != "" { logger.Info("Starting tunnel with new credentials") + tunnelRunning = true go TunnelProcess(ctx, config, id, secret, endpoint) } @@ -145,7 +147,7 @@ func Run(ctx context.Context, config Config) { default: // If we have credentials and no tunnel is running, start it - if id != "" && secret != "" && endpoint != "" && olmClient == nil { + if id != "" && secret != "" && endpoint != "" && !tunnelRunning { logger.Info("Starting tunnel process with initial credentials") go TunnelProcess(ctx, config, id, secret, endpoint) } else if id == "" || secret == "" || endpoint == "" { @@ -829,6 +831,7 @@ func StopTunnel() { // Reset the connected state connected = false + tunnelRunning = false // Update API server status apiServer.SetConnectionStatus(false)