"""Permission checking utilities for Nextcloud admin operations.""" import logging from httpx import AsyncClient from starlette.requests import Request from nextcloud_mcp_server.client.users import UsersClient logger = logging.getLogger(__name__) async def is_nextcloud_admin(request: Request, http_client: AsyncClient) -> bool: """Check if the authenticated user is a Nextcloud administrator. This function extracts the username from the session/request context and checks if the user is a member of the "admin" group in Nextcloud. Args: request: Starlette request object with authenticated user http_client: Authenticated HTTP client for Nextcloud API calls Returns: True if user is admin, False otherwise Example: ```python if await is_nextcloud_admin(request, http_client): # Show admin-only features pass ``` """ try: # Extract username from authenticated session username = request.user.display_name if not username: logger.warning("No username found in authenticated session") return False # Query Nextcloud for user's group memberships users_client = UsersClient(http_client, username) user_groups = await users_client.get_user_groups(username) # Check if user is in the admin group is_admin = "admin" in user_groups logger.debug( f"Admin check for user '{username}': {is_admin} (groups: {user_groups})" ) return is_admin except Exception as e: logger.error(f"Error checking admin permissions: {e}", exc_info=True) return False