import demistomock as demisto
from CommonServerPython import *
from CommonServerUserPython import *
def filter_OOO_users(get_users_response, ooo_list_name):
"""
Given the response with all OnCall users, remove the users that are Out Of Office, using the list `OOO List`.
"""
all_users = get_users_response.get("Contents")
if not all_users:
return "No data returned"
# get OOO users
ooo_list = demisto.executeCommand("GetUsersOOO", {"listname": ooo_list_name})
if isError(ooo_list[0]):
return_error(f'Error occurred while trying to get OOO users: {ooo_list[0].get("Contents")}')
# Get Away Users
away_users_response = demisto.executeCommand("GetAwayUsers", {})
if is_error(away_users_response) or not away_users_response:
return_error(f"Failed to get away users: {get_error(away_users_response)!s}")
away_users: list[Dict] = away_users_response[0].get("EntryContext", {}).get("AwayUsers", [])
away_users = away_users if away_users else []
list_info = ooo_list[0].get("EntryContext").get("ShiftManagment.OOOUsers")
list_info = list_info + away_users
OOO_usernames = [i["username"] for i in list_info]
try:
in_office_users = []
for user in all_users:
if user.get("username") in OOO_usernames:
continue
else:
in_office_users.append(user)
return "On-Call Team members\n" + tableToMarkdown("", in_office_users, ["username", "email", "name", "phone", "roles"])
except Exception as e:
demisto.error(f"Encountered the following exception: {e.args[0]}\n Returning all users without filtering.")
return get_users_response.get("HumanReadable")
def main():
include_out_of_office_users = demisto.args().get("include_OOO_users", "false") == "true"
get_users_response: list = demisto.executeCommand("getUsers", {"onCall": True})
list_name = demisto.getArg("listname")
if is_error(get_users_response):
demisto.error(f"Failed to get users on call: {get_error(get_users_response)!s}")
else:
if include_out_of_office_users:
contents = get_users_response[0]["HumanReadable"].replace("## On-Call Users", "On-Call Team members")
else:
contents = filter_OOO_users(get_users_response[0], list_name)
if contents == "No data returned":
contents = "On-Call Team members\nNo team members were found on-call."
demisto.results({"Type": entryTypes["note"], "ContentsFormat": formats["markdown"], "Contents": contents})
if __name__ in ("__builtin__", "builtins", "__main__"):
main()