mirror of
https://github.com/eigent-ai/eigent.git
synced 2026-04-29 04:00:09 +00:00
update
This commit is contained in:
parent
eca8110452
commit
dffd615018
7 changed files with 656 additions and 162 deletions
|
|
@ -2,6 +2,7 @@ from fastapi import APIRouter, HTTPException
|
|||
from loguru import logger
|
||||
from app.utils.toolkit.notion_mcp_toolkit import NotionMCPToolkit
|
||||
from app.utils.toolkit.google_calendar_toolkit import GoogleCalendarToolkit
|
||||
from app.utils.oauth_state_manager import oauth_state_manager
|
||||
|
||||
|
||||
router = APIRouter(tags=["task"])
|
||||
|
|
@ -60,20 +61,34 @@ async def install_tool(tool: str):
|
|||
)
|
||||
elif tool == "google_calendar":
|
||||
try:
|
||||
# Use a dummy task_id for installation, as this is just for pre-authentication
|
||||
toolkit = GoogleCalendarToolkit("install_auth")
|
||||
|
||||
# Get available tools to verify connection
|
||||
tools = [tool_func.func.__name__ for tool_func in toolkit.get_tools()]
|
||||
logger.info(f"Successfully pre-instantiated {tool} toolkit with {len(tools)} tools")
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"tools": tools,
|
||||
"message": f"Successfully installed {tool} toolkit",
|
||||
"count": len(tools),
|
||||
"toolkit_name": "GoogleCalendarToolkit"
|
||||
}
|
||||
# Try to initialize toolkit - will succeed if credentials exist
|
||||
try:
|
||||
toolkit = GoogleCalendarToolkit("install_auth")
|
||||
tools = [tool_func.func.__name__ for tool_func in toolkit.get_tools()]
|
||||
logger.info(f"Successfully initialized Google Calendar toolkit with {len(tools)} tools")
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"tools": tools,
|
||||
"message": f"Successfully installed {tool} toolkit",
|
||||
"count": len(tools),
|
||||
"toolkit_name": "GoogleCalendarToolkit"
|
||||
}
|
||||
except ValueError as auth_error:
|
||||
# No credentials - need authorization
|
||||
logger.info(f"No credentials found, starting authorization: {auth_error}")
|
||||
|
||||
# Start background authorization in a new thread
|
||||
logger.info("Starting background Google Calendar authorization")
|
||||
GoogleCalendarToolkit.start_background_auth("install_auth")
|
||||
|
||||
return {
|
||||
"success": False,
|
||||
"status": "authorizing",
|
||||
"message": "Authorization required. Browser should open automatically. Complete authorization and try installing again.",
|
||||
"toolkit_name": "GoogleCalendarToolkit",
|
||||
"requires_auth": True
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to install {tool} toolkit: {e}")
|
||||
raise HTTPException(
|
||||
|
|
@ -113,3 +128,61 @@ async def list_available_tools():
|
|||
}
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@router.get("/oauth/status/{provider}", name="get oauth status")
|
||||
async def get_oauth_status(provider: str):
|
||||
"""
|
||||
Get the current OAuth authorization status for a provider
|
||||
|
||||
Args:
|
||||
provider: OAuth provider name (e.g., 'google_calendar')
|
||||
|
||||
Returns:
|
||||
Current authorization status
|
||||
"""
|
||||
state = oauth_state_manager.get_state(provider)
|
||||
|
||||
if not state:
|
||||
return {
|
||||
"provider": provider,
|
||||
"status": "not_started",
|
||||
"message": "No authorization in progress"
|
||||
}
|
||||
|
||||
return state.to_dict()
|
||||
|
||||
|
||||
@router.post("/oauth/cancel/{provider}", name="cancel oauth")
|
||||
async def cancel_oauth(provider: str):
|
||||
"""
|
||||
Cancel an ongoing OAuth authorization flow
|
||||
|
||||
Args:
|
||||
provider: OAuth provider name (e.g., 'google_calendar')
|
||||
|
||||
Returns:
|
||||
Cancellation result
|
||||
"""
|
||||
state = oauth_state_manager.get_state(provider)
|
||||
|
||||
if not state:
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail=f"No authorization found for provider '{provider}'"
|
||||
)
|
||||
|
||||
if state.status not in ["pending", "authorizing"]:
|
||||
raise HTTPException(
|
||||
status_code=400,
|
||||
detail=f"Cannot cancel authorization with status '{state.status}'"
|
||||
)
|
||||
|
||||
state.cancel()
|
||||
logger.info(f"Cancelled OAuth authorization for {provider}")
|
||||
|
||||
return {
|
||||
"success": True,
|
||||
"provider": provider,
|
||||
"message": "Authorization cancelled successfully"
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue