From dc54d0e96eae7211d4a2ba0d75d2ad084775f9ff Mon Sep 17 00:00:00 2001 From: melissahardware Date: Wed, 10 May 2023 10:44:21 -0400 Subject: [PATCH 1/4] initial building of the connector --- README.md | 2 + grove/__about__.py | 2 +- grove/connectors/oomnitza/__init__.py | 4 + grove/connectors/oomnitza/activities.py | 58 + grove/connectors/oomnitza/api.py | 96 + setup.py | 1 + .../configuration/oomnitza/activities.json | 6 + tests/fixtures/oomnitza/activities/001.json | 67 + tests/fixtures/oomnitza/activities/002.json | 2602 +++++++++++++++++ tests/fixtures/oomnitza/activities/003.json | 3 + tests/test_connectors_oomnitza_activities.py | 114 + 11 files changed, 2954 insertions(+), 1 deletion(-) create mode 100644 grove/connectors/oomnitza/__init__.py create mode 100644 grove/connectors/oomnitza/activities.py create mode 100644 grove/connectors/oomnitza/api.py create mode 100644 templates/configuration/oomnitza/activities.json create mode 100644 tests/fixtures/oomnitza/activities/001.json create mode 100644 tests/fixtures/oomnitza/activities/002.json create mode 100644 tests/fixtures/oomnitza/activities/003.json create mode 100644 tests/test_connectors_oomnitza_activities.py diff --git a/README.md b/README.md index 09ddc2f..bff16c0 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,10 @@ isn't listed here, support can be added by creating a custom connector! * GSuite alerts * GSuite activity logs * Okta system logs +* Oomnitza activity logs * 1Password sign-in attempt logs * 1Password item usage event logs +* 1Password audit logs * PagerDuty audit records * SalesForce Cloud event logs * SalesForce Marketing Cloud audit event logs diff --git a/grove/__about__.py b/grove/__about__.py index 94ea5b8..587b648 100644 --- a/grove/__about__.py +++ b/grove/__about__.py @@ -1,6 +1,6 @@ """Grove metadata.""" -__version__ = "1.0.0rc3" +__version__ = "1.0.0rc4" __title__ = "grove" __author__ = "HashiCorp Security (TDR)" __license__ = "Mozilla Public License 2.0" diff --git a/grove/connectors/oomnitza/__init__.py b/grove/connectors/oomnitza/__init__.py new file mode 100644 index 0000000..3f15f63 --- /dev/null +++ b/grove/connectors/oomnitza/__init__.py @@ -0,0 +1,4 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +"""Oomnitza connectors for Grove.""" diff --git a/grove/connectors/oomnitza/activities.py b/grove/connectors/oomnitza/activities.py new file mode 100644 index 0000000..1964cde --- /dev/null +++ b/grove/connectors/oomnitza/activities.py @@ -0,0 +1,58 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +"""Oomnitza Audit connector for Grove.""" +import time +from datetime import datetime, timedelta + +from grove.connectors import BaseConnector +from grove.connectors.oomnitza.api import Client +from grove.constants import REVERSE_CHRONOLOGICAL +from grove.exceptions import NotFoundException + + +class Connector(BaseConnector): + NAME = "oomnitza_activities" + POINTER_PATH = "timestamp" + LOG_ORDER = REVERSE_CHRONOLOGICAL + + def collect(self): + """Collects Oomnitza activities from the Oomnitza API. + + This will first check whether there are any pointers cached to indicate previous + collections. If not, the last week of data will be collected. + """ + client = Client(token=self.key, identity=self.identity) + + # Set cursor + cursor = 0 + + # If no pointer is stored then a previous run hasn't been performed, so set the + # pointer to a week ago. In the case of the Oomnitza activities API the pointer is + # the value of the "timestamp" field from the latest record retrieved from + # the API - which is in epoch. The Oomnitza API doesnt account for milliseconds. + now = datetime.fromtimestamp(time.time()).strftime("%s") + + try: + _ = self.pointer + except NotFoundException: + self.pointer = ( + datetime.fromtimestamp(time.time()) - timedelta(days=2) + ).strftime("%s") + + # Get log data from the upstream API, paging is not required since this API gets all + # of the data. + # Get log data from the upstream API. A "from" and "to" datetime query + # parameters are required. + while True: + log = client.get_activites( + start_date=self.pointer, end_date=now, cursor=cursor + ) + + # Save this batch of log entries. + self.save(log.entries) + + # Check if we need to continue paging. + cursor = log.cursor # type: ignore + if not cursor: + break diff --git a/grove/connectors/oomnitza/api.py b/grove/connectors/oomnitza/api.py new file mode 100644 index 0000000..d33a78a --- /dev/null +++ b/grove/connectors/oomnitza/api.py @@ -0,0 +1,96 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +"""Oomnitza API client. + +As Oomnitza SDK does not currently support the Activities API, this client has been created in +the interim. +""" + +import logging +from typing import Dict, Optional + +import requests +from grove.exceptions import RequestFailedException +from grove.types import AuditLogEntries, HTTPResponse + +API_BASE_URI = "https://{identity}.oomnitza.com" +API_PAGE_SIZE = 200 + + +class Client: + def __init__( + self, + identity: Optional[str] = None, + token: Optional[str] = None, + ): + """Setup a new client. + + :param identity: The name of the Oomnitza organisation. + :param token: The Oomnitza API token. + """ + self.logger = logging.getLogger(__name__) + self.headers = { + "content-type": "application/json", + "Authorization2": f"{token}", + } + + # We need to push the identity into the URI, so we'll keep track of this. + self._api_base_uri = API_BASE_URI.format(identity=identity) + + def _get( + self, + url: str, + params: Optional[Dict[str, Optional[str]]] = None, + ) -> HTTPResponse: + """A GET wrapper to handle retries for the caller. + + :param url: URL to perform the HTTP GET against. + :param params: HTTP parameters to add to the request. + + :raises RequestFailedException: An HTTP request failed. + + :return: HTTP Response object containing the headers and body of a response. + """ + try: + response = requests.get(url, headers=self.headers, params=params) + response.raise_for_status() + except requests.exceptions.RequestException as err: + raise RequestFailedException(err) + + return HTTPResponse(headers=response.headers, body=response.json()) + + def get_activites( + self, + cursor: int = 0, + start_date: Optional[str] = None, + end_date: Optional[str] = None, + ) -> AuditLogEntries: + """Fetches a list of signing attempt logs. + + :param cursor: Cursor to use when fetching results. Supersedes other parameters. + :param from_date: The earliest date an event represented as a UNIX epoch time. + + :return: AuditLogEntries object containing a pagination cursor, and log entries. + """ + url = f"{self._api_base_uri}/api/v3/activities" + + result = self._get( + url, + params={ + "start_date": start_date, + "end_date": end_date, + "limit": str(API_PAGE_SIZE), + "skip": str(cursor), + }, + ) + # Keep paging until we run out of results. + data = result.body + + if len(data) == API_PAGE_SIZE: + cursor += API_PAGE_SIZE + else: + cursor = 0 + + # Return the cursor and the results to allow the caller to page as required. + return AuditLogEntries(cursor=cursor, entries=data) # type: ignore diff --git a/setup.py b/setup.py index 46ade84..1e6d794 100644 --- a/setup.py +++ b/setup.py @@ -54,6 +54,7 @@ "workday_activity_logging = grove.connectors.workday.activity_logging:Connector", "zoom_activities = grove.connectors.zoom.activities:Connector", "zoom_operationlogs = grove.connectors.zoom.operationlogs:Connector", + "oomnitza_activities = grove.connectors.oomnitza.activities:Connector", ], "grove.caches": [ "aws_dynamodb = grove.caches.aws_dynamodb:Handler", diff --git a/templates/configuration/oomnitza/activities.json b/templates/configuration/oomnitza/activities.json new file mode 100644 index 0000000..03997d4 --- /dev/null +++ b/templates/configuration/oomnitza/activities.json @@ -0,0 +1,6 @@ +{ + "key": "TOKEN_HERE", + "identity": "ORGANIZATION_ID_HERE", + "name": "oomnitza-activities", + "connector": "oomnitza-activities" +} \ No newline at end of file diff --git a/tests/fixtures/oomnitza/activities/001.json b/tests/fixtures/oomnitza/activities/001.json new file mode 100644 index 0000000..22e58fa --- /dev/null +++ b/tests/fixtures/oomnitza/activities/001.json @@ -0,0 +1,67 @@ +[ + { + "id": 605452, + "user_id": "0038389812878318237129898", + "username": "test@oomnitza.com", + "timestamp": 1680895957, + "event_source_id": "TESTER", + "event_type_id": "EDIT", + "module_id": "TEST", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "test" + }, + { + "id": 605449, + "user_id": "0038389812878318237129898", + "username": "test@oomnitza.com", + "timestamp": 1680895948, + "event_source_id": "TESTER", + "event_type_id": "EDIT", + "module_id": "TEST", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "test" + }, + { + "id": 605448, + "user_id": "0038389812878318237129898", + "username": "test@oomnitza.com", + "timestamp": 1680895947, + "event_source_id": "TESTER", + "event_type_id": "EDIT", + "module_id": "TEST", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "test" + }, + { + "id": 605447, + "user_id": "0038389812878318237129898", + "username": "test@oomnitza.com", + "timestamp": 1680895947, + "event_source_id": "TESTER", + "event_type_id": "EDIT", + "module_id": "TEST", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "test" + }, + { + "id": 605446, + "user_id": "0038389812878318237129898", + "username": "test@oomnitza.com", + "timestamp": 1680895937, + "event_source_id": "TESTER", + "event_type_id": "EDIT", + "module_id": "TEST", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "test" + } +] \ No newline at end of file diff --git a/tests/fixtures/oomnitza/activities/002.json b/tests/fixtures/oomnitza/activities/002.json new file mode 100644 index 0000000..652afbf --- /dev/null +++ b/tests/fixtures/oomnitza/activities/002.json @@ -0,0 +1,2602 @@ +[ + { + "id": 710480, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538024, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710476, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538016, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710474, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538014, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710472, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538013, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710470, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538008, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710469, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538007, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710468, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538006, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710467, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538005, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710466, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538004, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710465, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537999, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710463, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537984, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710460, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537909, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710455, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537879, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710453, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537876, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710451, + "user_id": "3e231a50066442578a7382cec88ac531", + "username": "test@test.com", + "timestamp": 1682537872, + "event_source_id": "TEST", + "event_type_id": "LOGIN", + "module_id": "AUTH", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710449, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537868, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710448, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537867, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710446, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537866, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710442, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537858, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710437, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537851, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710435, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537851, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710434, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537849, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710433, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537848, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710432, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537847, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710431, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537847, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710430, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537846, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710429, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537844, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710428, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537844, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710427, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537843, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710425, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537817, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710422, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537796, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710421, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537787, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710419, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537773, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710417, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537758, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710414, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537735, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710413, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537733, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710409, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537688, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710408, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537685, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710407, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537678, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710402, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537553, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710399, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537546, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710398, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537544, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710397, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537543, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710396, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537533, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710395, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537532, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710393, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537385, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710390, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537370, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710387, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537354, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710386, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537352, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710385, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537351, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710384, + "user_id": "fd0bd0ed88be470aa63b4f8f87385cad", + "username": "test@test.com", + "timestamp": 1682533432, + "event_source_id": "TEST", + "event_type_id": "LOGIN", + "module_id": "AUTH", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710383, + "user_id": "fd0bd0ed88be470aa63b4f8f87385cad", + "username": "test@test.com", + "timestamp": 1682530612, + "event_source_id": "TEST", + "event_type_id": "LOGIN", + "module_id": "AUTH", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710382, + "user_id": "827cb55abd424e2b9a91438800f07ff0", + "username": "test@test.com", + "timestamp": 1682530479, + "event_source_id": "TEST", + "event_type_id": "LOGIN", + "module_id": "AUTH", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710380, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529675, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710379, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529666, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710378, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529663, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710377, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529660, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710376, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529655, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710375, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529651, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710374, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529647, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710373, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529644, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710372, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529640, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710371, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529635, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710370, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529632, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710369, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529628, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710368, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529625, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710367, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529621, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710366, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529618, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710365, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529614, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710364, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529610, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710363, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529606, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710362, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529603, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710361, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529599, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710360, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529595, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710359, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529588, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710358, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529585, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710357, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529581, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710356, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529577, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710355, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529573, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710354, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529566, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710353, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529555, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710352, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529550, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710351, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529547, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710350, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529543, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710349, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529540, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710348, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529536, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710347, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529532, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710346, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529529, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710345, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529525, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710344, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529521, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710343, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529516, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710342, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529513, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710341, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529510, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710340, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529506, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710339, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529502, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710338, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529499, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710337, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529495, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710336, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529492, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710335, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529488, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710334, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529484, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710480, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538024, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710476, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538016, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710474, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538014, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710472, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538013, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710470, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538008, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710469, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538007, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710468, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538006, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710467, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538005, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710466, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682538004, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710465, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537999, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710463, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537984, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710460, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537909, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710455, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537879, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710453, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537876, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710451, + "user_id": "3e231a50066442578a7382cec88ac531", + "username": "test@test.com", + "timestamp": 1682537872, + "event_source_id": "TEST", + "event_type_id": "LOGIN", + "module_id": "AUTH", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710449, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537868, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710448, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537867, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710446, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537866, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710442, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537858, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710437, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537851, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710435, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537851, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710434, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537849, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710433, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537848, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710432, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537847, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710431, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537847, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710430, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537846, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710429, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537844, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710428, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537844, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710427, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537843, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710425, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537817, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710422, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537796, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710421, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537787, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710419, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537773, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710417, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537758, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710414, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537735, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710413, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537733, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710409, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537688, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710408, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537685, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710407, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537678, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710402, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537553, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710399, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537546, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710398, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537544, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710397, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537543, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710396, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537533, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710395, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537532, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710393, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537385, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710390, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537370, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710387, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537354, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710386, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537352, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710385, + "user_id": "999999999999", + "username": "test@test.com", + "timestamp": 1682537351, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "USERS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710384, + "user_id": "fd0bd0ed88be470aa63b4f8f87385cad", + "username": "test@test.com", + "timestamp": 1682533432, + "event_source_id": "TEST", + "event_type_id": "LOGIN", + "module_id": "AUTH", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710383, + "user_id": "fd0bd0ed88be470aa63b4f8f87385cad", + "username": "test@test.com", + "timestamp": 1682530612, + "event_source_id": "TEST", + "event_type_id": "LOGIN", + "module_id": "AUTH", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710382, + "user_id": "827cb55abd424e2b9a91438800f07ff0", + "username": "test@test.com", + "timestamp": 1682530479, + "event_source_id": "TEST", + "event_type_id": "LOGIN", + "module_id": "AUTH", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710380, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529675, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710379, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529666, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710378, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529663, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710377, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529660, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710376, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529655, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710375, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529651, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710374, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529647, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710373, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529644, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710372, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529640, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710371, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529635, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710370, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529632, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710369, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529628, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710368, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529625, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710367, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529621, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710366, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529618, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710365, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529614, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710364, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529610, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710363, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529606, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710362, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529603, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710361, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529599, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710360, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529595, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710359, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529588, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710358, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529585, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710357, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529581, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710356, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529577, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710355, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529573, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710354, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529566, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710353, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529555, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710352, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529550, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710351, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529547, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710350, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529543, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710349, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529540, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710348, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529536, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710347, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529532, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710346, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529529, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710345, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529525, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710344, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529521, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710343, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529516, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710342, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529513, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710341, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529510, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710340, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529506, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710339, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529502, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710338, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529499, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710337, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529495, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710336, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529492, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710335, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529488, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + }, + { + "id": 710334, + "user_id": "b27f0a10f0a5462b9350cb72dad36d21", + "username": "test@test.com", + "timestamp": 1682529484, + "event_source_id": "TEST", + "event_type_id": "EDIT", + "module_id": "ASSETS", + "oomnitza_id": "test@test.com", + "sub_module_id": null, + "extra_json": null, + "full_name": "TEST INTEGRATION" + } +] \ No newline at end of file diff --git a/tests/fixtures/oomnitza/activities/003.json b/tests/fixtures/oomnitza/activities/003.json new file mode 100644 index 0000000..2789070 --- /dev/null +++ b/tests/fixtures/oomnitza/activities/003.json @@ -0,0 +1,3 @@ +[ + {} +] \ No newline at end of file diff --git a/tests/test_connectors_oomnitza_activities.py b/tests/test_connectors_oomnitza_activities.py new file mode 100644 index 0000000..c20afd2 --- /dev/null +++ b/tests/test_connectors_oomnitza_activities.py @@ -0,0 +1,114 @@ +# Copyright (c) HashiCorp, Inc. +# SPDX-License-Identifier: MPL-2.0 + +"""Implements unit tests for the Oomnitza Audit collector.""" + +import os +import re +import unittest +from unittest.mock import patch + +import responses +from grove.connectors.oomnitza.activities import Connector +from grove.models import ConnectorConfig +from tests import mocks + + +class OomnitzaAuditTestCase(unittest.TestCase): + """Implements unit tests for the Oomnitza Activities collector.""" + + @patch("grove.helpers.plugin.load_handler", mocks.load_handler) + def setUp(self): + """Ensure the application is setup for testing.""" + self.dir = os.path.dirname(os.path.abspath(__file__)) + self.connector = Connector( + config=ConnectorConfig( + identity="corp", + key="testkey", + name="corp", + connector="test", + ), + context={ + "runtime": "test_harness", + "runtime_id": "NA", + }, + ) + + @responses.activate + def test_collect_pagination(self): + """Ensure pagination is working as expected.""" + responses.add( + responses.GET, + re.compile(r"https://.*"), + status=200, + content_type="application/json", + body=bytes( + open( + os.path.join(self.dir, "fixtures/oomnitza/activities/002.json"), + "r", + ).read(), + "utf-8", + ), + ) + + # The last "page" returns an empty cursor. + responses.add( + responses.GET, + re.compile(r"https://.*"), + status=200, + content_type="application/json", + body=bytes( + open( + os.path.join(self.dir, "fixtures/oomnitza/activities/001.json"), + "r", + ).read(), + "utf-8", + ), + ) + + # Check the pointer matches the latest execution_time value, and that the + # expected number of logs were returned. + self.connector.run() + self.assertEqual(self.connector._saved, 205) + self.assertEqual(self.connector.pointer, "1682538024") + + @responses.activate + def test_collect_no_pagination(self): + """Ensure collection without pagination is working as expected.""" + responses.add( + responses.GET, + re.compile(r"https://.*"), + status=200, + content_type="application/json", + body=bytes( + open( + os.path.join(self.dir, "fixtures/oomnitza/activities/001.json"), + "r", + ).read(), + "utf-8", + ), + ) + + # Ensure only a single value is returned, and the pointer is properly set. + self.connector.run() + self.assertEqual(self.connector._saved, 5) + self.assertEqual(self.connector.pointer, "1680895957") + + @responses.activate + def test_collect_no_results(self): + """Ensure break accurs when there is no results returned.""" + responses.add( + responses.GET, + re.compile(r"https://.*"), + status=200, + content_type="application/json", + body=bytes( + open( + os.path.join(self.dir, "fixtures/oomnitza/activities/003.json"), + "r", + ).read(), + "utf-8", + ), + ) + self.connector.run() + self.assertEqual(self.connector._saved, 0) From a82b88084cc650680f92b2f01750ba9dbb296fed Mon Sep 17 00:00:00 2001 From: melissahardware Date: Wed, 10 May 2023 17:59:00 -0400 Subject: [PATCH 2/4] commet changes --- grove/connectors/oomnitza/activities.py | 4 +--- grove/connectors/oomnitza/api.py | 5 +++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/grove/connectors/oomnitza/activities.py b/grove/connectors/oomnitza/activities.py index 1964cde..6d54a61 100644 --- a/grove/connectors/oomnitza/activities.py +++ b/grove/connectors/oomnitza/activities.py @@ -1,7 +1,7 @@ # Copyright (c) HashiCorp, Inc. # SPDX-License-Identifier: MPL-2.0 -"""Oomnitza Audit connector for Grove.""" +"""Oomnitza Activities connector for Grove.""" import time from datetime import datetime, timedelta @@ -40,8 +40,6 @@ def collect(self): datetime.fromtimestamp(time.time()) - timedelta(days=2) ).strftime("%s") - # Get log data from the upstream API, paging is not required since this API gets all - # of the data. # Get log data from the upstream API. A "from" and "to" datetime query # parameters are required. while True: diff --git a/grove/connectors/oomnitza/api.py b/grove/connectors/oomnitza/api.py index d33a78a..d2f15ff 100644 --- a/grove/connectors/oomnitza/api.py +++ b/grove/connectors/oomnitza/api.py @@ -68,8 +68,9 @@ def get_activites( ) -> AuditLogEntries: """Fetches a list of signing attempt logs. - :param cursor: Cursor to use when fetching results. Supersedes other parameters. - :param from_date: The earliest date an event represented as a UNIX epoch time. + :param cursor: Cursor to use when fetching results. + :param start_date: The earliest date an event represented as an epoch value. + :param end_date: The latest date an event represented as an epoch value. :return: AuditLogEntries object containing a pagination cursor, and log entries. """ From 30c00c9ec6ae9f6e5b47e0d9c4468fce6c149a65 Mon Sep 17 00:00:00 2001 From: melissahardware Date: Thu, 11 May 2023 11:35:00 -0400 Subject: [PATCH 3/4] update comments --- grove/connectors/oomnitza/activities.py | 4 ++-- grove/connectors/oomnitza/api.py | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/grove/connectors/oomnitza/activities.py b/grove/connectors/oomnitza/activities.py index 6d54a61..9be2dae 100644 --- a/grove/connectors/oomnitza/activities.py +++ b/grove/connectors/oomnitza/activities.py @@ -28,7 +28,7 @@ def collect(self): cursor = 0 # If no pointer is stored then a previous run hasn't been performed, so set the - # pointer to a week ago. In the case of the Oomnitza activities API the pointer is + # pointer to 2 days ago. In the case of the Oomnitza activities API the pointer is # the value of the "timestamp" field from the latest record retrieved from # the API - which is in epoch. The Oomnitza API doesnt account for milliseconds. now = datetime.fromtimestamp(time.time()).strftime("%s") @@ -40,7 +40,7 @@ def collect(self): datetime.fromtimestamp(time.time()) - timedelta(days=2) ).strftime("%s") - # Get log data from the upstream API. A "from" and "to" datetime query + # Get log data from the upstream API. A "start_date" and "end_date" datetime query # parameters are required. while True: log = client.get_activites( diff --git a/grove/connectors/oomnitza/api.py b/grove/connectors/oomnitza/api.py index d2f15ff..fa00d3f 100644 --- a/grove/connectors/oomnitza/api.py +++ b/grove/connectors/oomnitza/api.py @@ -1,11 +1,7 @@ # Copyright (c) HashiCorp, Inc. # SPDX-License-Identifier: MPL-2.0 -"""Oomnitza API client. - -As Oomnitza SDK does not currently support the Activities API, this client has been created in -the interim. -""" +"""Oomnitza API client.""" import logging from typing import Dict, Optional From 74103ed95322e384c1886c42295057e6a5cc1676 Mon Sep 17 00:00:00 2001 From: melissahardware Date: Fri, 12 May 2023 09:43:19 -0400 Subject: [PATCH 4/4] update auth --- grove/connectors/oomnitza/api.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/grove/connectors/oomnitza/api.py b/grove/connectors/oomnitza/api.py index fa00d3f..ade4b83 100644 --- a/grove/connectors/oomnitza/api.py +++ b/grove/connectors/oomnitza/api.py @@ -28,8 +28,9 @@ def __init__( self.logger = logging.getLogger(__name__) self.headers = { "content-type": "application/json", - "Authorization2": f"{token}", } + if token: + self.headers["Authorization2"] = token # We need to push the identity into the URI, so we'll keep track of this. self._api_base_uri = API_BASE_URI.format(identity=identity)