Skip to content

Commit 8912f2d

Browse files
committed
clean-up DCR revoke
1 parent f4f83d9 commit 8912f2d

File tree

2 files changed

+21
-57
lines changed

2 files changed

+21
-57
lines changed

cmd/docker-mcp/oauth/revoke.go

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,35 @@ import (
44
"context"
55
"fmt"
66

7+
"github.com/docker/mcp-gateway/pkg/catalog"
78
"github.com/docker/mcp-gateway/pkg/desktop"
89
)
910

1011
func Revoke(ctx context.Context, app string) error {
1112
client := desktop.NewAuthClient()
1213

13-
// Check if this is a DCR provider
14-
dcrClient, err := client.GetDCRClient(ctx, app)
15-
if err == nil && dcrClient.State != "" {
16-
// Handle UNREGISTERED providers - they don't have tokens yet
17-
if dcrClient.State == "unregistered" {
18-
return fmt.Errorf("provider %s is not authenticated yet - nothing to revoke", app)
19-
}
14+
// Get catalog to check if this is a remote OAuth server
15+
catalogData, err := catalog.GetWithOptions(ctx, true, nil)
16+
if err != nil {
17+
return fmt.Errorf("failed to get catalog: %w", err)
18+
}
19+
20+
server, found := catalogData.Servers[app]
21+
isRemoteOAuth := found && server.IsRemoteOAuthServer()
22+
23+
fmt.Printf("Revoking OAuth access for %s...\n", app)
24+
25+
// Revoke tokens
26+
if err := client.DeleteOAuthApp(ctx, app); err != nil {
27+
return fmt.Errorf("failed to revoke OAuth access: %w", err)
28+
}
2029

21-
// REGISTERED DCR provider - revoke tokens but preserve DCR client for re-auth
22-
fmt.Printf("Revoking OAuth access for %s...\n", app)
23-
if err := client.DeleteOAuthApp(ctx, app); err != nil {
24-
return fmt.Errorf("failed to revoke OAuth access for %s: %w", app, err)
30+
// For remote OAuth servers, also delete DCR client
31+
if isRemoteOAuth {
32+
if err := client.DeleteDCRClient(ctx, app); err != nil {
33+
return fmt.Errorf("failed to remove DCR client: %w", err)
2534
}
26-
fmt.Printf("OAuth access revoked for %s\n", app)
27-
fmt.Printf("Note: DCR client registration preserved. Run 'docker mcp oauth authorize %s' to re-authenticate\n", app)
28-
return nil
2935
}
3036

31-
// Built-in OAuth provider - just revoke tokens
32-
return client.DeleteOAuthApp(ctx, app)
37+
return nil
3338
}

cmd/docker-mcp/server/enable.go

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -9,28 +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"
1413
"github.com/docker/mcp-gateway/pkg/oauth"
1514
)
1615

1716
func Disable(ctx context.Context, docker docker.Client, serverNames []string, mcpOAuthDcrEnabled bool) error {
18-
// Get catalog including user-configured catalogs to find OAuth-enabled remote servers for DCR cleanup
19-
catalog, err := catalog.GetWithOptions(ctx, true, nil)
20-
if err != nil {
21-
return fmt.Errorf("failed to get catalog: %w", err)
22-
}
23-
24-
// Clean up OAuth for disabled servers first
25-
for _, serverName := range serverNames {
26-
if server, found := catalog.Servers[serverName]; found {
27-
// Three-condition check: DCR flag enabled AND type="remote" AND oauth present
28-
if mcpOAuthDcrEnabled && server.IsRemoteOAuthServer() {
29-
cleanupOAuthForRemoteServer(ctx, serverName)
30-
}
31-
}
32-
}
33-
3417
return update(ctx, docker, nil, serverNames, mcpOAuthDcrEnabled)
3518
}
3619

@@ -113,27 +96,3 @@ func update(ctx context.Context, docker docker.Client, add []string, remove []st
11396

11497
return nil
11598
}
116-
117-
// cleanupOAuthForRemoteServer removes OAuth provider and DCR client for clean slate UX
118-
// This ensures disabled servers disappear completely from the Docker Desktop OAuth tab
119-
func cleanupOAuthForRemoteServer(ctx context.Context, serverName string) {
120-
client := desktop.NewAuthClient()
121-
122-
fmt.Printf("Cleaning up OAuth for %s...\n", serverName)
123-
124-
// 1. Revoke OAuth tokens (idempotent - fails gracefully if not exists)
125-
if err := client.DeleteOAuthApp(ctx, serverName); err != nil {
126-
fmt.Printf(" • No OAuth tokens to revoke\n")
127-
} else {
128-
fmt.Printf(" • OAuth tokens revoked\n")
129-
}
130-
131-
// 2. Delete DCR client data (idempotent - fails gracefully if not exists)
132-
if err := client.DeleteDCRClient(ctx, serverName); err != nil {
133-
fmt.Printf(" • No DCR client to remove\n")
134-
} else {
135-
fmt.Printf(" • DCR client data removed\n")
136-
}
137-
138-
fmt.Printf("OAuth cleanup complete for %s\n", serverName)
139-
}

0 commit comments

Comments
 (0)