fix: clean up OAuth token cache on provider deletion (#7908)

Signed-off-by: Vincenzo Palazzo <vincenzopalazzodev@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Vincenzo Palazzo
2026-03-17 18:54:11 +01:00
committed by GitHub
parent b4f018f6f9
commit 827175619a
14 changed files with 174 additions and 9 deletions
+34
View File
@@ -1383,6 +1383,40 @@
}
}
},
"/config/providers/{name}/cleanup": {
"post": {
"tags": [
"super::routes::config_management"
],
"operationId": "cleanup_provider_cache",
"parameters": [
{
"name": "name",
"in": "path",
"description": "Provider name (e.g., githubcopilot)",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Provider cache cleaned up successfully",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
},
"500": {
"description": "Internal server error"
}
}
}
},
"/config/providers/{name}/models": {
"get": {
"tags": [
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+28
View File
@@ -2655,6 +2655,34 @@ export type ProvidersResponses = {
export type ProvidersResponse2 = ProvidersResponses[keyof ProvidersResponses];
export type CleanupProviderCacheData = {
body?: never;
path: {
/**
* Provider name (e.g., githubcopilot)
*/
name: string;
};
query?: never;
url: '/config/providers/{name}/cleanup';
};
export type CleanupProviderCacheErrors = {
/**
* Internal server error
*/
500: unknown;
};
export type CleanupProviderCacheResponses = {
/**
* Provider cache cleaned up successfully
*/
200: string;
};
export type CleanupProviderCacheResponse = CleanupProviderCacheResponses[keyof CleanupProviderCacheResponses];
export type GetProviderModelsData = {
body?: never;
path: {
@@ -17,7 +17,12 @@ import { providerConfigSubmitHandler } from './subcomponents/handlers/DefaultSub
import { useConfig } from '../../../ConfigContext';
import { useModelAndProvider } from '../../../ModelAndProviderContext';
import { AlertTriangle, LogIn } from 'lucide-react';
import { ProviderDetails, removeCustomProvider, configureProviderOauth } from '../../../../api';
import {
ProviderDetails,
removeCustomProvider,
configureProviderOauth,
cleanupProviderCache,
} from '../../../../api';
import { Button } from '../../../../components/ui/button';
import { errorMessage } from '../../../../utils/conversionUtils';
@@ -153,6 +158,13 @@ export default function ProviderConfigurationModal({
return;
}
// Clean up provider-specific cache files (e.g., OAuth tokens) before removing config
try {
await cleanupProviderCache({ path: { name: provider.name } });
} catch {
// Cleanup is best-effort — proceed with deletion even if it fails
}
const isCustomProvider = provider.provider_type === 'Custom';
if (isCustomProvider) {