gateway/modules/workflows/methods/methodSharepoint/helpers/connection.py
2025-12-17 10:45:09 +01:00

67 lines
2.7 KiB
Python

# Copyright (c) 2025 Patrick Motsch
# All rights reserved.
"""
Connection helper for SharePoint operations.
Handles Microsoft connection management and SharePoint service configuration.
"""
import logging
from typing import Dict, Any, Optional
logger = logging.getLogger(__name__)
class ConnectionHelper:
"""Helper for Microsoft connection management in SharePoint operations"""
def __init__(self, methodInstance):
"""
Initialize connection helper.
Args:
methodInstance: Instance of MethodSharepoint (for access to services)
"""
self.method = methodInstance
self.services = methodInstance.services
def getMicrosoftConnection(self, connectionReference: str) -> Optional[Dict[str, Any]]:
"""
Get Microsoft connection from connection reference and configure SharePoint service.
Args:
connectionReference: Connection reference string
Returns:
Dict with connection info or None if failed
"""
try:
userConnection = self.services.chat.getUserConnectionFromConnectionReference(connectionReference)
if not userConnection:
logger.warning(f"No user connection found for reference: {connectionReference}")
return None
if userConnection.authority.value != "msft":
logger.warning(f"Connection {userConnection.id} is not Microsoft (authority: {userConnection.authority.value})")
return None
# Check if connection is active or pending (pending means OAuth in progress)
if userConnection.status.value not in ["active", "pending"]:
logger.warning(f"Connection {userConnection.id} status is not active/pending: {userConnection.status.value}")
return None
# Configure SharePoint service with the UserConnection
if not self.services.sharepoint.setAccessTokenFromConnection(userConnection):
logger.warning(f"Failed to configure SharePoint service with connection {userConnection.id}")
return None
logger.info(f"Successfully configured SharePoint service with Microsoft connection: {userConnection.id}, status: {userConnection.status.value}, externalId: {userConnection.externalId}")
return {
"id": userConnection.id,
"userConnection": userConnection,
"scopes": ["Sites.ReadWrite.All", "Files.ReadWrite.All", "User.Read"] # SharePoint scopes
}
except Exception as e:
logger.error(f"Error getting Microsoft connection: {str(e)}")
return None