ees_microsoft_outlook/sync_microsoft_outlook.py (81 lines of code) (raw):

# # Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one # or more contributor license agreements. Licensed under the Elastic License 2.0; # you may not use this file except in compliance with the Elastic License 2.0. # import csv import os from . import constant class SyncMicrosoftOutlook: """This class is responsible for fetching the Microsoft Outlook objects and it's permissions from the Workplace Search.""" def __init__( self, config, logger, workplace_search_custom_client, queue, ): self.logger = logger self.config = config self.workplace_search_custom_client = workplace_search_custom_client self.objects = config.get_value("objects") self.permission = config.get_value("enable_document_permission") self.microsoft_outlook_thread_count = config.get_value( "source_sync_thread_count" ) self.ws_auth = config.get_value("enterprise_search.api_key") self.ws_source = config.get_value("enterprise_search.source_id") self.queue = queue def workplace_add_permission(self, user_name, permissions): """Indexes the user permissions into Workplace Search :param user_name: A string value denoting the username of the user :param permissions: Permissions that needs to be provided to the user """ self.workplace_search_custom_client.add_permissions( user_name, permissions, ) def map_ms_outlook_user_to_ws_user(self, user, permissions): """This method is used to map the Microsoft Outlook user to Workplace Search user and responsible to call the user permissions indexer method :param user: User for indexing the permissions :param permissions: User permissions """ rows = {} mapping_sheet_path = self.config.get_value("connector.user_mapping") if mapping_sheet_path and os.path.exists(mapping_sheet_path) and os.path.getsize(mapping_sheet_path) > 0: with open(mapping_sheet_path, encoding="UTF-8") as file: csvreader = csv.reader(file) for row in csvreader: rows[row[0]] = row[1] user_name = rows.get(user, user) self.workplace_add_permission(user_name, permissions) def fetch_mails(self, ids_list, users_account, mail_object, start_time, end_time): """This method is used to fetch mails from Microsoft Outlook :ids_list: List of ids of documents :param users_account: List of user accounts :param mail_object: Object of mails :param start_time: Start time for fetching the mails :param end_time: End time for fetching the mails """ self.logger.info("Fetching Mails from Microsoft Outlook") try: documents = mail_object.get_mails( ids_list, users_account, start_time, end_time ) except Exception as exception: self.logger.exception(f"Error while fetching Mails. Error: {exception}") self.logger.info("Successfully fetched Mails from Microsoft Outlook") self.queue.append_to_queue(constant.MAILS_OBJECT.lower(), documents) def fetch_calendar( self, ids_list, users_account, calendar_object, start_time, end_time ): """This method is used to fetch calendar from Microsoft Outlook :ids_list: List of ids of documents :param users_accounts: List of user account :param calendar_object: Object of calendar :param start_time: Start time for fetching the calendar :param end_time: End time for fetching the calendar """ self.logger.info("Fetching Calendars from Microsoft Outlook") try: documents = calendar_object.get_calendar( ids_list, users_account, start_time, end_time ) except Exception as exception: self.logger.exception(f"Error while fetching Calendar. Error: {exception}") self.logger.info("Successfully fetched Calendars from Microsoft Outlook") self.queue.append_to_queue(constant.CALENDARS_OBJECT.lower(), documents) def fetch_contacts( self, ids_list, users_account, contact_object, start_time, end_time ): """This method is used to fetch contacts from Microsoft Outlook :ids_list: List of ids of documents :param users_account: List of user account :param contact_object: Object of contacts :param start_time: Start time for fetching the contacts :param end_time: End time for fetching the contacts """ self.logger.info("Fetching Contacts from Microsoft Outlook") try: documents = contact_object.get_contacts( ids_list, users_account, start_time, end_time ) except Exception as exception: self.logger.exception(f"Error while fetching Contacts. Error: {exception}") self.logger.info("Successfully fetched Contacts from Microsoft Outlook") self.queue.append_to_queue(constant.CONTACTS_OBJECT.lower(), documents) def fetch_tasks(self, ids_list, users_account, task_object, start_time, end_time): """This method is used to fetch tasks from Microsoft Outlook :ids_list: List of ids of documents :param users_account: List of user accounts :param task_object: Object of task :param start_time: Start time for fetching the tasks :param end_time: End time for fetching the tasks """ self.logger.info("Fetching Tasks from Microsoft Outlook") try: documents = task_object.get_tasks( ids_list, users_account, start_time, end_time ) except Exception as exception: self.logger.exception(f"Error while fetching Tasks. Error: {exception}") self.logger.info("Successfully fetched Tasks from Microsoft Outlook") self.queue.append_to_queue(constant.TASKS_OBJECT.lower(), documents)