From 4e5bbc7abdbea0f2e925dc3775b88231350f0aa3 Mon Sep 17 00:00:00 2001 From: kamleshsolanki-crest Date: Thu, 6 Feb 2025 11:46:36 +0530 Subject: [PATCH] Added CLS BWAN 1.0.0 Plugin --- netskope_bwan_cls/CHANGELOG.md | 3 + netskope_bwan_cls/__init__.py | 1 + netskope_bwan_cls/icon.png | Bin 0 -> 71126 bytes netskope_bwan_cls/main.py | 199 +++++++++++++++++++++++++++ netskope_bwan_cls/manifest.json | 71 ++++++++++ netskope_bwan_cls/utils/constants.py | 44 ++++++ 6 files changed, 318 insertions(+) create mode 100644 netskope_bwan_cls/CHANGELOG.md create mode 100644 netskope_bwan_cls/__init__.py create mode 100644 netskope_bwan_cls/icon.png create mode 100644 netskope_bwan_cls/main.py create mode 100644 netskope_bwan_cls/manifest.json create mode 100644 netskope_bwan_cls/utils/constants.py diff --git a/netskope_bwan_cls/CHANGELOG.md b/netskope_bwan_cls/CHANGELOG.md new file mode 100644 index 00000000..c1d3c0cf --- /dev/null +++ b/netskope_bwan_cls/CHANGELOG.md @@ -0,0 +1,3 @@ +# 1.0.0 +## Added +- Initial release. \ No newline at end of file diff --git a/netskope_bwan_cls/__init__.py b/netskope_bwan_cls/__init__.py new file mode 100644 index 00000000..dda66444 --- /dev/null +++ b/netskope_bwan_cls/__init__.py @@ -0,0 +1 @@ +"""Netskope Borderless WAN CLS plugin.""" diff --git a/netskope_bwan_cls/icon.png b/netskope_bwan_cls/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fbea96638a7cb20ec02cc5924964b81b41b1c3f8 GIT binary patch literal 71126 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 vWk)$9XFf{qd`1St)q3dl_ literal 0 HcmV?d00001 diff --git a/netskope_bwan_cls/main.py b/netskope_bwan_cls/main.py new file mode 100644 index 00000000..cce7c5c4 --- /dev/null +++ b/netskope_bwan_cls/main.py @@ -0,0 +1,199 @@ +""" +BSD 3-Clause License + +Copyright (c) 2021, Netskope OSS +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +CLS Netskope Borderless plugin. +""" + +import traceback +from typing import List + +from netskope.integrations.cls.plugin_base import ( + PluginBase, + ValidationResult, + PushResult, +) + +from .utils.constants import ( + MODULE_NAME, + PLUGIN_NAME, + PLUGIN_VERSION, + EVENT_TYPES, +) + +# from netskope.common.utils import DBConnector, AlertsHelper +from netskope.common.utils.alerts_helper import AlertsHelper + +# from netskope.common.utils.plugin_provider_helper import PluginProviderHelper + +helper = AlertsHelper() + +# connector = DBConnector() +# alerts_helper = AlertsHelper() +# plugin_provider_helper = PluginProviderHelper() + + +class NetskopeBWANCLSPlugin(PluginBase): + """The Netskope Borderless WAN CLS plugin implementation class.""" + + def __init__( + self, + name, + configuration, + storage, + last_run_at, + logger, + use_proxy=False, + ssl_validation=True, + source=None, + mappings=None, + ): + """Initialize.""" + super().__init__( + name, + configuration, + storage, + last_run_at, + logger, + use_proxy, + ssl_validation, + source=source, + mappings=mappings, + ) + self.plugin_name, self.plugin_version = self._get_plugin_info() + self.log_prefix = f"{MODULE_NAME} {self.plugin_name}" + if name: + self.log_prefix = f"{self.log_prefix} [{name}]" + + def _get_plugin_info(self) -> tuple: + """Get plugin name and version from manifest. + + Returns: + tuple: Tuple of plugin's name and version fetched from manifest. + """ + try: + manifest_json = NetskopeBWANCLSPlugin.metadata + plugin_name = manifest_json.get("name", PLUGIN_NAME) + plugin_version = manifest_json.get("version", PLUGIN_VERSION) + return (plugin_name, plugin_version) + except Exception as exp: + self.logger.error( + message=( + "{} {}: Error occurred while" + " getting plugin details. Error: {}".format( + MODULE_NAME, PLUGIN_NAME, exp + ) + ), + details=traceback.format_exc(), + ) + return (PLUGIN_NAME, PLUGIN_VERSION) + + def push(self, transformed_data, data_type, subtype) -> PushResult: + """Push the transformed_data to the 3rd party platform.""" + pass + + def transform(self, raw_data, data_type, subtype) -> List: + """Transform the raw Netskope JSON data into target platform \ + supported data formats.""" + pass + + def get_types_to_pull(self, data_type): + """Get the types of data to pull. + + Returns: + List of sub types to pull + """ + types = [] + if data_type == "events": + types = self.configuration.get("events_types", []) + + return types if types else EVENT_TYPES + else: + return types + + def validate( + self, configuration: dict, tenant_name=None + ) -> ValidationResult: + """Validate the configuration parameters dict.""" + + event_types = configuration.get("events_types", []) + if event_types and (not isinstance(event_types, list) or not ( + all( + indicator_type in EVENT_TYPES + for indicator_type in event_types + ) + )): + error_msg = ( + "Invalid Event Types provided in the " + "configuration parameters. Please select the " + "Event Types from the available options." + ) + self.logger.error( + f"{self.log_prefix}: Validation error occurred. Error: " + f"{error_msg}", + ) + return ValidationResult(success=False, message=error_msg) + + hours = configuration.get("hours", 0) + if hours is None: + err_msg = ( + "Initial Range in hours is a required " + "configuration parameters." + ) + self.logger.error(f"{self.log_prefix}: {err_msg}") + return ValidationResult( + success=False, + message=err_msg, + ) + elif not isinstance(hours, int): + err_msg = ( + "Invalid Initial Range in hours provided in " + "the configuration parameters." + ) + self.logger.error(f"{self.log_prefix}: {err_msg}") + return ValidationResult( + success=False, + message=err_msg, + ) + elif hours < 0 or hours > 8760: + err_msg = ( + "Invalid Initial Range in hours provided in the configuration " + "parameters. The value should be in range 0 to 8760." + ) + self.logger.error(f"{self.log_prefix}: {err_msg}") + return ValidationResult( + success=False, + message=err_msg, + ) + + if not tenant_name: + tenant_name = helper.get_tenant_cls(self.name).name + + return ValidationResult(success=True, message="Validation successful.") diff --git a/netskope_bwan_cls/manifest.json b/netskope_bwan_cls/manifest.json new file mode 100644 index 00000000..6ee764c1 --- /dev/null +++ b/netskope_bwan_cls/manifest.json @@ -0,0 +1,71 @@ +{ + "name": "Netskope Borderless WAN", + "id": "netskope_bwan_cls", + "netskope": true, + "version": "1.0.0", + "module": "CLS", + "minimum_version": "5.1.0", + "minimum_provider_version": "1.0.0", + "provider_id": "netskope_bwan_tenant", + "patch_supported": true, + "types": [ + "events" + ], + "mapping": "", + "description": "This plugin is used to fetch Events (Audit, Authentication, Client, Gateway, System) from the Monitor > Events page of Netskope Borderless WAN Tenant. The Plugin fetches the data in JSON format.", + "supported_subtypes": { + "events": [ + "audit", + "authentication", + "client", + "gateway", + "system" + ] + }, + "configuration": [ + { + "label": "Event Types", + "key": "events_types", + "mandatory": false, + "description": "Selected types of events will be fetched. If kept empty, all event types will be fetched.", + "type": "multichoice", + "choices": [ + { + "key": "Audit", + "value": "audit" + }, + { + "key": "Authentication", + "value": "authentication" + }, + { + "key": "Client", + "value": "client" + }, + { + "key": "Gateway", + "value": "gateway" + }, + { + "key": "System", + "value": "system" + } + ], + "default": [ + "audit", + "authentication", + "client", + "gateway", + "system" + ] + }, + { + "label": "Initial Range (in hours)", + "key": "hours", + "type": "number", + "mandatory": true, + "default": 1, + "description": "Number of hours to pull the event data for the initial run." + } + ] +} \ No newline at end of file diff --git a/netskope_bwan_cls/utils/constants.py b/netskope_bwan_cls/utils/constants.py new file mode 100644 index 00000000..ac550897 --- /dev/null +++ b/netskope_bwan_cls/utils/constants.py @@ -0,0 +1,44 @@ +""" +BSD 3-Clause License + +Copyright (c) 2021, Netskope OSS +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +CLS Borderless WAN plugin constants. +""" + +MODULE_NAME = "CLS" +PLUGIN_NAME = "Netskope Borderless WAN" +PLUGIN_VERSION = "1.0.0" +EVENT_TYPES = [ + "audit", + "authentication", + "client", + "gateway", + "system" +] \ No newline at end of file