Skip to main content
Glama
users.py5.18 kB
"""User management handlers.""" from typing import Any from ludus_mcp.core.client import LudusAPIClient from ludus_mcp.utils.logging import get_logger logger = get_logger(__name__) class UserHandler: """Handler for user management operations.""" def __init__(self, client: LudusAPIClient): """Initialize the user handler.""" self.client = client async def list_users(self) -> list[dict[str, Any]]: """List all users in the Ludus platform.""" logger.info("Listing all users") users = await self.client.list_users() return users async def get_user(self, user_id: str) -> dict[str, Any]: """Get information about a specific user.""" logger.info(f"Getting user info: {user_id}") return await self.client.get_user(user_id) async def add_user( self, user_id: str, name: str | None = None, proxmox_username: str | None = None, proxmox_password: str | None = None, ) -> dict[str, Any]: """ Add a new user to Ludus. Args: user_id: Unique user identifier name: Display name for the user proxmox_username: Proxmox username for the user proxmox_password: Proxmox password for the user Returns: User creation result """ logger.info(f"Adding new user: {user_id}") return await self.client.add_user( user_id=user_id, name=name, proxmox_username=proxmox_username, proxmox_password=proxmox_password, ) async def remove_user(self, user_id: str) -> dict[str, Any]: """ Remove a user from Ludus. Args: user_id: User identifier to remove Returns: Removal result """ logger.info(f"Removing user: {user_id}") return await self.client.remove_user(user_id) async def get_user_apikey(self, user_id: str) -> dict[str, Any]: """ Get or regenerate API key for a user. Args: user_id: User identifier Returns: API key information """ logger.info(f"Getting API key for user: {user_id}") return await self.client.get_user_apikey(user_id) async def get_user_wireguard(self, user_id: str) -> str: """ Get WireGuard configuration for a user. Args: user_id: User identifier Returns: WireGuard configuration string """ logger.info(f"Getting WireGuard config for user: {user_id}") return await self.client.get_user_wireguard(user_id) async def update_user_proxmox_creds( self, user_id: str, proxmox_username: str, proxmox_password: str, ) -> dict[str, Any]: """ Update Proxmox credentials for a user. Args: user_id: User identifier proxmox_username: New Proxmox username proxmox_password: New Proxmox password Returns: Update result """ logger.info(f"Updating Proxmox credentials for user: {user_id}") return await self.client.update_user_proxmox_creds( user_id=user_id, proxmox_username=proxmox_username, proxmox_password=proxmox_password, ) def format_users_list(self, users: list[dict[str, Any]]) -> str: """Format users list for display.""" if not users: return "No users found." lines = ["## 👥 Ludus Users\n"] for user in users: user_id = user.get("userID", "unknown") name = user.get("name", "N/A") range_count = user.get("rangeCount", 0) is_admin = user.get("isAdmin", False) admin_badge = " 👑 **ADMIN**" if is_admin else "" lines.append(f"### 🔹 {user_id}{admin_badge}") lines.append(f"- **Name:** {name}") lines.append(f"- **Ranges:** {range_count}") lines.append("") return "\n".join(lines) def format_user_details(self, user: dict[str, Any]) -> str: """Format user details for display.""" user_id = user.get("userID", "unknown") name = user.get("name", "N/A") is_admin = user.get("isAdmin", False) range_count = user.get("rangeCount", 0) wireguard_ip = user.get("wireguardIP", "N/A") proxmox_user = user.get("proxmoxUsername", "N/A") admin_badge = " 👑 **ADMIN**" if is_admin else "" lines = [ f"## 👤 User: {user_id}{admin_badge}\n", f"**Name:** {name}", f"**WireGuard IP:** {wireguard_ip}", f"**Proxmox User:** {proxmox_user}", f"**Active Ranges:** {range_count}", "", "### Available Actions:", "- Get API key: `ludus.get_user_apikey(user_id='{}')`".format(user_id), "- Get WireGuard config: `ludus.get_user_wireguard(user_id='{}')`".format(user_id), "- Update Proxmox creds: `ludus.update_user_proxmox_creds(...)`", ] return "\n".join(lines)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tjnull/Ludus-FastMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server