67 lines
2.7 KiB
Python
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
|
|
|