ManageOOOusers
Adds or removes an analyst from the out-of-office list in XSOAR. When used with the AssignAnalystToIncidentOOO automation, prevents incidents from being assigned to an analyst who is out of office.
python · Shift Management
Source
from CommonServerPython import * # noqa: F401 def _get_current_user(): current_username = demisto.executeCommand("getUsers", {"current": True}) if isError(current_username): demisto.debug(f"failed to get current username - {get_error(current_username)}") return None else: return current_username[0]["Contents"][0]["username"] def main(): # get current time now = datetime.now() # args list_name = demisto.getArg("listname") username = demisto.getArg("username") option = demisto.getArg("option") days_off = now + timedelta(days=int(demisto.getArg("daysoff"))) off_until = days_off.strftime("%Y-%m-%d") # update list name to start with 'OOO', so we can't overwrite other lists with this if not list_name.startswith("OOO"): list_name = f"OOO {list_name}" current_user = _get_current_user() if not current_user and not username: return_error("Failed to get current user. Please set the username argument in the script.") if not username: # Current user was found, running script on it. username = current_user else: # check if provided username is a valid xsoar user users = demisto.executeCommand("getUsers", {}) if isError(users): return_error(f"Failed to get users: {get_error(users)!s}") users = users[0]["Contents"] users = [x["username"] for x in users] if username not in users: return_error(message=f"{username} is not a valid user") # get the out of office list, check if the list exists, if not create it: ooo_list = demisto.executeCommand("getList", {"listName": list_name})[0]["Contents"] if isError(ooo_list): return_error(f"Failed to get users out of office: {get_error(ooo_list)!s}") if "Item not found" in ooo_list: demisto.results(demisto.executeCommand("createList", {"listName": list_name, "listData": "[]"})) ooo_list = demisto.executeCommand("getList", {"listName": list_name})[0]["Contents"] # check status of the list, and add/remove the user from it. if not ooo_list: list_data = [] else: list_data = json.loads(ooo_list) if option == "add": # check if user is already in the list, and remove, to allow updating list_data = [i for i in list_data if i["user"] != username] list_data.append({"user": username, "offuntil": off_until, "addedby": current_user if current_user else "DBot"}) else: # remove the user from the list. list_data = [i for i in list_data if i["user"] != username] set_list_res = demisto.executeCommand("setList", {"listName": list_name, "listData": json.dumps(list_data)}) if isError(set_list_res): return_error(f"Failed to update the list {list_name}: {get_error(set_list_res)!s}") # welcome back, or see ya later! if option == "add": demisto.results(f"Vacation mode engaged until {off_until}, enjoy the time off {username}") else: demisto.results(f"Welcome back {username}, it's like you never left!") if __name__ in ("__builtin__", "builtins", "__main__"): main()
README
Adds or removes an analyst from the out-of-office list in XSOAR. When used with the AssignAnalystToIncidentOOO automation, prevents incidents from being assigned to an analyst who is out of office.
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
| Tags | ooo, Shift Management |
| Cortex XSOAR Version | 5.5.0 |
Inputs
| Argument Name | Description |
|---|---|
| option | Add or remove an analyst from the out-of-office list. Possible values are “Add” and “Remove”. |
| daysoff | Number of days the analyst will be off. Default is 7. |
| listname | A list to use in place of the out-of-office list. If the name of the list that you pass does not begin with OOO, the script automatically prefixes OOO to the script name. For example, if you pass a list called newList, the script will automatically change the name to OOO newList. Default is “OOO List”. |
| username | The name of the analyst to add to the list. The default is the current analyst. Must be provided when running as part of a playbook. |
Outputs
There are no outputs for this script.