from __future__ import annotations import logging from yuxi.channel.security.pairing import PairingManager logger = logging.getLogger(__name__) class ViberPairingAdapter: id_label = "viberUserId" def __init__(self): self._pairing = PairingManager() async def generate_code(self, peer_id: str, account_id: str = "default") -> str: request = await self._pairing.upsert_code("viber", peer_id, account_id) return request.code async def verify_code(self, peer_id: str, code: str, account_id: str = "default") -> bool: return await self._pairing.verify("viber", peer_id, code, account_id) async def approve(self, peer_id: str, account_id: str = "default") -> None: await self._pairing.approve("viber", peer_id, account_id) async def reject(self, peer_id: str, account_id: str = "default") -> None: await self._pairing.reject("viber", peer_id, account_id) def normalize_allow_entry(self, entry: str) -> str: stripped = entry.strip() if stripped.startswith("viber:user:"): return stripped[11:] if stripped.startswith("viber:"): return stripped[6:] return stripped async def notify_approval(self, config: dict, peer_id: str, account_id: str | None = None) -> None: logger.info("viber pairing approved for peer %s", peer_id)