From 0e8e0f656199c57db0fbdd711d77caa63428f60f Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Mon, 29 Jun 2020 18:59:08 +0000 Subject: [PATCH 01/24] Client create user --- Packs/Code42/Integrations/Code42/Code42.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Packs/Code42/Integrations/Code42/Code42.py b/Packs/Code42/Integrations/Code42/Code42.py index 806acf1a9d54..b857e2e2bb05 100644 --- a/Packs/Code42/Integrations/Code42/Code42.py +++ b/Packs/Code42/Integrations/Code42/Code42.py @@ -261,6 +261,21 @@ def get_user_id(self, username): raise Exception("No user found with username {0}.".format(username)) return res[0]["userUid"] + def create_user(self, org_name, username, email): + org_uid = self.get_org_uid(org_name) + return self._get_sdk().users.create_user(org_uid, username, email) + + def block_user(self, username): + + + def get_org_uid(self, org_name): + org_pages = self._get_sdk().orgs.get_all() + for org_page in org_pages: + for org in org_page["orgs"]: + if org["orgName"] == org_name: + return org["orgUid"] + raise Exception("No org found with name {0}.".format(org_name)) + def search_file_events(self, payload): res = self._get_sdk().securitydata.search_file_events(payload) return res["fileEvents"] From f8d733a6f94383b6dd1b3aa7bf66536bd42ca13b Mon Sep 17 00:00:00 2001 From: Juliya Smith Date: Mon, 29 Jun 2020 19:34:50 +0000 Subject: [PATCH 02/24] Save --- Packs/Code42/Integrations/Code42/Code42.py | 39 +- Packs/Code42/Integrations/Code42/Code42.yml | 373 +++++++++++++----- .../Code42/Integrations/Code42/Code42_test.py | 36 +- 3 files changed, 333 insertions(+), 115 deletions(-) diff --git a/Packs/Code42/Integrations/Code42/Code42.py b/Packs/Code42/Integrations/Code42/Code42.py index b857e2e2bb05..df76e5a25757 100644 --- a/Packs/Code42/Integrations/Code42/Code42.py +++ b/Packs/Code42/Integrations/Code42/Code42.py @@ -174,7 +174,7 @@ def _get_sdk(self): return self._sdk def add_user_to_departing_employee(self, username, departure_date=None, note=None): - user_id = self.get_user_id(username) + user_id = self.get_user(username)["userUid"] self._get_sdk().detectionlists.departing_employee.add( user_id, departure_date=departure_date ) @@ -183,7 +183,7 @@ def add_user_to_departing_employee(self, username, departure_date=None, note=Non return user_id def remove_user_from_departing_employee(self, username): - user_id = self.get_user_id(username) + user_id = self.get_user(username)["userUid"] self._get_sdk().detectionlists.departing_employee.remove(user_id) return user_id @@ -200,26 +200,26 @@ def get_all_departing_employees(self, results): return res def add_user_to_high_risk_employee(self, username, note=None): - user_id = self.get_user_id(username) + user_id = self.get_user(username)["userUid"] self._get_sdk().detectionlists.high_risk_employee.add(user_id) if note: self._get_sdk().detectionlists.update_user_notes(user_id, note) return user_id def remove_user_from_high_risk_employee(self, username): - user_id = self.get_user_id(username) + user_id = self.get_user(username)["userUid"] self._get_sdk().detectionlists.high_risk_employee.remove(user_id) return user_id def add_user_risk_tags(self, username, risk_tags): risk_tags = _try_convert_str_list_to_list(risk_tags) - user_id = self.get_user_id(username) + user_id = self.get_user(username)["userUid"] self._get_sdk().detectionlists.add_user_risk_tags(user_id, risk_tags) return user_id def remove_user_risk_tags(self, username, risk_tags): risk_tags = _try_convert_str_list_to_list(risk_tags) - user_id = self.get_user_id(username) + user_id = self.get_user(username)["userUid"] self._get_sdk().detectionlists.remove_user_risk_tags(user_id, risk_tags) return user_id @@ -255,25 +255,30 @@ def get_current_user(self): res = self._get_sdk().users.get_current() return res - def get_user_id(self, username): + def get_user(self, username): res = self._get_sdk().users.get_by_username(username)["users"] if not res: raise Exception("No user found with username {0}.".format(username)) - return res[0]["userUid"] + return res[0] def create_user(self, org_name, username, email): - org_uid = self.get_org_uid(org_name) + org_uid = self.get_org(org_name)["orgUid"] return self._get_sdk().users.create_user(org_uid, username, email) def block_user(self, username): + user_id = self.get_user(username)["userId"] + return self._get_sdk().users.block(user_id) + def deactivate_user(self, username): + user_id = self.get_user(username)["userId"] + return self._get_sdk().users.deactivate(user_id) - def get_org_uid(self, org_name): + def get_org(self, org_name): org_pages = self._get_sdk().orgs.get_all() for org_page in org_pages: for org in org_page["orgs"]: if org["orgName"] == org_name: - return org["orgUid"] + return org raise Exception("No org found with name {0}.".format(org_name)) def search_file_events(self, payload): @@ -786,6 +791,18 @@ def securitydata_search_command(client, args): return "No results found", {}, {} +def code42_user_create_command(): + pass + + +def code42_user_block_command(): + pass + + +def code42_user_deactivate_command(): + pass + + """Fetching""" diff --git a/Packs/Code42/Integrations/Code42/Code42.yml b/Packs/Code42/Integrations/Code42/Code42.yml index 2dcf45befea1..1faa4b9926e3 100644 --- a/Packs/Code42/Integrations/Code42/Code42.yml +++ b/Packs/Code42/Integrations/Code42/Code42.yml @@ -1,70 +1,87 @@ +category: Endpoint commonfields: id: Code42 version: -1 -name: Code42 -display: Code42 -category: Endpoint -description: Use the Code42 integration to identify potential data exfiltration from insider threats while speeding investigation and response by providing fast access to file events and metadata across physical and cloud environments. configuration: -- display: Code42 Console URL for the pod your Code42 instance is running in +- defaultvalue: console.us.code42.com + display: Code42 Console URL for the pod your Code42 instance is running in name: console_url - defaultvalue: console.us.code42.com - type: 0 required: true -- display: "Username" + type: 0 +- display: Username name: credentials - defaultvalue: "" - type: 9 required: true + type: 9 - display: Fetch incidents name: isFetch - type: 8 required: false + type: 8 - display: Incident type name: incidentType - type: 13 required: false + type: 13 - display: Alert severities to fetch when fetching incidents name: alert_severity - defaultvalue: "" - type: 16 - required: false options: - High - Medium - Low -- display: First fetch time range (