@@ -9,27 +9,11 @@ import (
99
1010 "github.com/docker/mcp-gateway/pkg/catalog"
1111 "github.com/docker/mcp-gateway/pkg/config"
12- "github.com/docker/mcp-gateway/pkg/desktop"
1312 "github.com/docker/mcp-gateway/pkg/docker"
13+ "github.com/docker/mcp-gateway/pkg/oauth"
1414)
1515
1616func Disable (ctx context.Context , docker docker.Client , serverNames []string , mcpOAuthDcrEnabled bool ) error {
17- // Get catalog including user-configured catalogs to find OAuth-enabled remote servers for DCR cleanup
18- catalog , err := catalog .GetWithOptions (ctx , true , nil )
19- if err != nil {
20- return fmt .Errorf ("failed to get catalog: %w" , err )
21- }
22-
23- // Clean up OAuth for disabled servers first
24- for _ , serverName := range serverNames {
25- if server , found := catalog .Servers [serverName ]; found {
26- // Three-condition check: DCR flag enabled AND type="remote" AND oauth present
27- if mcpOAuthDcrEnabled && server .IsRemoteOAuthServer () {
28- cleanupOAuthForRemoteServer (ctx , serverName )
29- }
30- }
31- }
32-
3317 return update (ctx , docker , nil , serverNames , mcpOAuthDcrEnabled )
3418}
3519
@@ -76,7 +60,7 @@ func update(ctx context.Context, docker docker.Client, add []string, remove []st
7660
7761 // Three-condition check: DCR flag enabled AND type="remote" AND oauth present
7862 if mcpOAuthDcrEnabled && server .IsRemoteOAuthServer () {
79- if err := registerProviderForLazySetup (ctx , serverName ); err != nil {
63+ if err := oauth . RegisterProviderForLazySetup (ctx , serverName ); err != nil {
8064 fmt .Printf ("Warning: Failed to register OAuth provider for %s: %v\n " , serverName , err )
8165 fmt .Printf (" You can run 'docker mcp oauth authorize %s' later to set up authentication.\n " , serverName )
8266 } else {
@@ -112,71 +96,3 @@ func update(ctx context.Context, docker docker.Client, add []string, remove []st
11296
11397 return nil
11498}
115-
116- // registerProviderForLazySetup registers a provider for lazy DCR setup
117- // This shows the provider in the OAuth tab immediately without doing network calls
118- func registerProviderForLazySetup (ctx context.Context , serverName string ) error {
119- client := desktop .NewAuthClient ()
120-
121- // Check if DCR client already exists to avoid double-registration
122- _ , err := client .GetDCRClient (ctx , serverName )
123- if err == nil {
124- // Provider already registered, no need to register again
125- return nil
126- }
127-
128- // Get catalog to extract provider name
129- catalog , err := catalog .GetWithOptions (ctx , true , nil )
130- if err != nil {
131- return fmt .Errorf ("failed to get catalog: %w" , err )
132- }
133-
134- server , found := catalog .Servers [serverName ]
135- if ! found {
136- return fmt .Errorf ("server %s not found in catalog" , serverName )
137- }
138-
139- // Extract provider name from OAuth config
140- if server .OAuth == nil || len (server .OAuth .Providers ) == 0 {
141- return fmt .Errorf ("server %s has no OAuth providers configured" , serverName )
142- }
143-
144- providerName := server .OAuth .Providers [0 ].Provider // Use first provider
145-
146- fmt .Printf ("Configuring OAuth provider %s (provider: %s) for authentication...\n " , serverName , providerName )
147-
148- // Use the existing DCR endpoint with pending=true to register provider without DCR
149- dcrRequest := desktop.RegisterDCRRequest {
150- ProviderName : providerName ,
151- }
152-
153- if err := client .RegisterDCRClientPending (ctx , serverName , dcrRequest ); err != nil {
154- return fmt .Errorf ("failed to register pending DCR provider: %w" , err )
155- }
156-
157- return nil
158- }
159-
160- // cleanupOAuthForRemoteServer removes OAuth provider and DCR client for clean slate UX
161- // This ensures disabled servers disappear completely from the Docker Desktop OAuth tab
162- func cleanupOAuthForRemoteServer (ctx context.Context , serverName string ) {
163- client := desktop .NewAuthClient ()
164-
165- fmt .Printf ("Cleaning up OAuth for %s...\n " , serverName )
166-
167- // 1. Revoke OAuth tokens (idempotent - fails gracefully if not exists)
168- if err := client .DeleteOAuthApp (ctx , serverName ); err != nil {
169- fmt .Printf (" • No OAuth tokens to revoke\n " )
170- } else {
171- fmt .Printf (" • OAuth tokens revoked\n " )
172- }
173-
174- // 2. Delete DCR client data (idempotent - fails gracefully if not exists)
175- if err := client .DeleteDCRClient (ctx , serverName ); err != nil {
176- fmt .Printf (" • No DCR client to remove\n " )
177- } else {
178- fmt .Printf (" • DCR client data removed\n " )
179- }
180-
181- fmt .Printf ("OAuth cleanup complete for %s\n " , serverName )
182- }
0 commit comments