Creates gsap_broker/intune/graph_client.py with MSAL client_credentials auth and typed Graph API methods. Entra registrar refactored to consume the shared client. Signed-off-by: Tyler King <tking@guildhouse.dev>
76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
# Copyright 2026 Guildhouse Dev
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
"""Registrar factory — selects the appropriate AgentRegistrar based on settings."""
|
|
|
|
import logging
|
|
|
|
from .base import AgentRegistrar
|
|
from .stub import StubRegistrar
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def create_registrar(config) -> AgentRegistrar:
|
|
"""Create the appropriate registrar based on agent_registrar setting."""
|
|
driver = config.agent_registrar
|
|
|
|
if driver == "stub":
|
|
return StubRegistrar()
|
|
|
|
if driver == "keycloak":
|
|
if not config.keycloak_admin_client_secret:
|
|
logger.warning("Keycloak secret not configured, using stub")
|
|
return StubRegistrar()
|
|
from .keycloak import KeycloakRegistrar
|
|
return KeycloakRegistrar(
|
|
base_url=config.keycloak_url,
|
|
realm=config.keycloak_realm,
|
|
client_id=config.keycloak_admin_client_id,
|
|
client_secret=config.keycloak_admin_client_secret,
|
|
)
|
|
|
|
if driver == "entra":
|
|
if not config.entra_client_secret:
|
|
logger.warning("Entra secret not configured, using stub")
|
|
return StubRegistrar()
|
|
from gsap_broker.intune.graph_client import GraphClient
|
|
from .entra import EntraRegistrar
|
|
graph = GraphClient(
|
|
tenant_id=config.entra_tenant_id,
|
|
client_id=config.entra_client_id,
|
|
client_secret=config.entra_client_secret,
|
|
)
|
|
return EntraRegistrar(
|
|
graph_client=graph,
|
|
agent_blueprint_id=config.entra_agent_blueprint_id,
|
|
)
|
|
|
|
if driver == "auto":
|
|
if config.entra_client_secret:
|
|
from gsap_broker.intune.graph_client import GraphClient
|
|
from .entra import EntraRegistrar
|
|
logger.info("Auto-selected Entra registrar")
|
|
graph = GraphClient(
|
|
tenant_id=config.entra_tenant_id,
|
|
client_id=config.entra_client_id,
|
|
client_secret=config.entra_client_secret,
|
|
)
|
|
return EntraRegistrar(
|
|
graph_client=graph,
|
|
agent_blueprint_id=config.entra_agent_blueprint_id,
|
|
)
|
|
if config.keycloak_admin_client_secret:
|
|
from .keycloak import KeycloakRegistrar
|
|
logger.info("Auto-selected Keycloak registrar")
|
|
return KeycloakRegistrar(
|
|
base_url=config.keycloak_url,
|
|
realm=config.keycloak_realm,
|
|
client_id=config.keycloak_admin_client_id,
|
|
client_secret=config.keycloak_admin_client_secret,
|
|
)
|
|
logger.warning("No IdP configured, using stub registrar")
|
|
return StubRegistrar()
|
|
|
|
logger.warning("Unknown registrar driver: %s, using stub", driver)
|
|
return StubRegistrar()
|