mirror of
https://github.com/eigent-ai/eigent.git
synced 2026-04-30 04:30:13 +00:00
update
This commit is contained in:
parent
5d818590e8
commit
b99f826903
6 changed files with 204 additions and 11 deletions
|
|
@ -186,3 +186,95 @@ async def cancel_oauth(provider: str):
|
|||
"provider": provider,
|
||||
"message": "Authorization cancelled successfully"
|
||||
}
|
||||
|
||||
|
||||
@router.delete("/uninstall/tool/{tool}", name="uninstall tool")
|
||||
async def uninstall_tool(tool: str):
|
||||
"""
|
||||
Uninstall a tool and clean up its authentication data
|
||||
|
||||
Args:
|
||||
tool: Tool name to uninstall (notion, google_calendar)
|
||||
|
||||
Returns:
|
||||
Uninstallation result
|
||||
"""
|
||||
import os
|
||||
import shutil
|
||||
|
||||
if tool == "notion":
|
||||
try:
|
||||
import hashlib
|
||||
import glob
|
||||
|
||||
# Calculate the hash for Notion MCP URL
|
||||
# mcp-remote uses MD5 hash of the URL to generate file names
|
||||
notion_url = "https://mcp.notion.com/mcp"
|
||||
url_hash = hashlib.md5(notion_url.encode()).hexdigest()
|
||||
|
||||
# Find and remove Notion-specific auth files
|
||||
mcp_auth_dir = os.path.join(os.path.expanduser("~"), ".mcp-auth")
|
||||
deleted_files = []
|
||||
|
||||
if os.path.exists(mcp_auth_dir):
|
||||
# Look for all files with the Notion hash prefix
|
||||
for version_dir in os.listdir(mcp_auth_dir):
|
||||
version_path = os.path.join(mcp_auth_dir, version_dir)
|
||||
if os.path.isdir(version_path):
|
||||
# Find all files matching the hash pattern
|
||||
pattern = os.path.join(version_path, f"{url_hash}_*")
|
||||
notion_files = glob.glob(pattern)
|
||||
|
||||
for file_path in notion_files:
|
||||
try:
|
||||
os.remove(file_path)
|
||||
deleted_files.append(file_path)
|
||||
logger.info(f"Removed Notion auth file: {file_path}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to remove {file_path}: {e}")
|
||||
|
||||
message = f"Successfully uninstalled {tool}"
|
||||
if deleted_files:
|
||||
message += f" and cleaned up {len(deleted_files)} authentication file(s)"
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"message": message,
|
||||
"deleted_files": deleted_files
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to uninstall {tool}: {e}")
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail=f"Failed to uninstall {tool}: {str(e)}"
|
||||
)
|
||||
|
||||
elif tool == "google_calendar":
|
||||
try:
|
||||
# Clean up Google Calendar token directory
|
||||
token_dir = os.path.join(os.path.expanduser("~"), ".eigent", "tokens", "google_calendar")
|
||||
if os.path.exists(token_dir):
|
||||
shutil.rmtree(token_dir)
|
||||
logger.info(f"Removed Google Calendar token directory: {token_dir}")
|
||||
|
||||
# Cancel any ongoing OAuth authorization
|
||||
state = oauth_state_manager.get_state("google_calendar")
|
||||
if state and state.status in ["pending", "authorizing"]:
|
||||
state.cancel()
|
||||
logger.info("Cancelled ongoing Google Calendar authorization")
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"message": f"Successfully uninstalled {tool} and cleaned up authentication data"
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to uninstall {tool}: {e}")
|
||||
raise HTTPException(
|
||||
status_code=500,
|
||||
detail=f"Failed to uninstall {tool}: {str(e)}"
|
||||
)
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail=f"Tool '{tool}' not found. Available tools: ['notion', 'google_calendar']"
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue