mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-05-04 00:40:44 +02:00
65 lines
2.4 KiB
Python
65 lines
2.4 KiB
Python
from ee.onyx.db.external_perm import ExternalUserGroup
|
|
from onyx.connectors.confluence.onyx_confluence import build_confluence_client
|
|
from onyx.connectors.confluence.onyx_confluence import OnyxConfluence
|
|
from onyx.connectors.confluence.utils import get_user_email_from_username__server
|
|
from onyx.db.models import ConnectorCredentialPair
|
|
from onyx.utils.logger import setup_logger
|
|
|
|
|
|
logger = setup_logger()
|
|
|
|
|
|
def _build_group_member_email_map(
|
|
confluence_client: OnyxConfluence,
|
|
) -> dict[str, set[str]]:
|
|
group_member_emails: dict[str, set[str]] = {}
|
|
for user_result in confluence_client.paginated_cql_user_retrieval():
|
|
user = user_result.get("user", {})
|
|
if not user:
|
|
logger.warning(f"user result missing user field: {user_result}")
|
|
continue
|
|
email = user.get("email")
|
|
if not email:
|
|
# This field is only present in Confluence Server
|
|
user_name = user.get("username")
|
|
# If it is present, try to get the email using a Server-specific method
|
|
if user_name:
|
|
email = get_user_email_from_username__server(
|
|
confluence_client=confluence_client,
|
|
user_name=user_name,
|
|
)
|
|
if not email:
|
|
# If we still don't have an email, skip this user
|
|
continue
|
|
|
|
for group in confluence_client.paginated_groups_by_user_retrieval(user):
|
|
# group name uniqueness is enforced by Confluence, so we can use it as a group ID
|
|
group_id = group["name"]
|
|
group_member_emails.setdefault(group_id, set()).add(email)
|
|
|
|
return group_member_emails
|
|
|
|
|
|
def confluence_group_sync(
|
|
cc_pair: ConnectorCredentialPair,
|
|
) -> list[ExternalUserGroup]:
|
|
confluence_client = build_confluence_client(
|
|
credentials=cc_pair.credential.credential_json,
|
|
is_cloud=cc_pair.connector.connector_specific_config.get("is_cloud", False),
|
|
wiki_base=cc_pair.connector.connector_specific_config["wiki_base"],
|
|
)
|
|
|
|
group_member_email_map = _build_group_member_email_map(
|
|
confluence_client=confluence_client,
|
|
)
|
|
onyx_groups: list[ExternalUserGroup] = []
|
|
for group_id, group_member_emails in group_member_email_map.items():
|
|
onyx_groups.append(
|
|
ExternalUserGroup(
|
|
id=group_id,
|
|
user_emails=list(group_member_emails),
|
|
)
|
|
)
|
|
|
|
return onyx_groups
|