def delete_module_api_config(self, conn_request, module_config_params):
        config = {}
        before = []
        after = []
        changed = False
        for each in module_config_params:
            search_by_name = self.search_for_resource_name(
                conn_request, each["name"])
            if search_by_name.get(self.api_return):
                every = map_obj_to_params(
                    search_by_name[self.api_return][0],
                    self.key_transform,
                    self.api_return,
                )
                before.append(every)
                response_code, api_response = conn_request.delete(
                    "{0}/{1}".format(self.api_object, every["id"]), data=each)
                self._check_for_response_code(response_code, api_response)

                changed = True
                if api_response:
                    after.append(
                        map_obj_to_params(api_response, self.key_transform,
                                          self.api_return))
        if changed:
            config.update({"before": before, "after": after})
        else:
            config.update({"before": before})
        return config, changed
def reset_module_api_config(module, deepsec_request):
    if module.params.get("config"):
        config = {}
        before = []
        after = []
        changed = False
        for each in module.params["config"]:
            search_by_name = search_for_imr_by_name(deepsec_request,
                                                    each["name"])
            if search_by_name.get(api_return):
                every = map_obj_to_params(search_by_name[api_return][0],
                                          key_transform, api_return)
                before.append(every)
                api_request = deepsec_request.delete("{0}/{1}".format(
                    api_object, every["id"]),
                                                     data=each)
                if api_request.get("errors"):
                    module.fail_json(msg=api_request["errors"])
                elif api_request.get("message"):
                    module.fail_json(msg=api_request["message"])
                changed = True
                if api_request:
                    after.append(
                        map_obj_to_params(api_request, key_transform,
                                          api_return))
        if changed:
            config.update({"before": before, "after": after})
            module.exit_json(integrity_monitoringrules=config, changed=changed)
        else:
            config.update({"before": before})
            module.exit_json(integrity_monitoringrules=config, changed=changed)
def display_gathered_result(module, deepsec_request):
    return_config = {}
    if module.params.get("config"):
        return_config["config"] = []
        for each in module.params.get("config"):
            search_result = search_for_imr_by_name(deepsec_request,
                                                   each["name"])
            return_config["config"].extend(
                map_obj_to_params(search_result, key_transform,
                                  api_return)[api_return])
    else:
        search_result = search_for_integrity_monitoring_rules(deepsec_request)
        return_config["config"] = map_obj_to_params(search_result,
                                                    key_transform,
                                                    api_return)[api_return]
    module.exit_json(gathered=return_config["config"], changed=False)
def search_for_pre_existing_key(want, deepsec_api_request):
    search_existing_apikey = check_if_config_exists(
        deepsec_api_request,
        want["keyName"],
        api_object.split("/")[2],
        api_return,
        "keyName",
    )
    return map_obj_to_params(search_existing_apikey, key_transform, api_return)
def configure_module_api(argspec, module, deepsec_request):
    if module.params and module.params.get("api_keys"):
        return_val = {}
        return_val["api_keys"] = []
        changed = False
        for each in module.params["api_keys"]:
            want = map_params_to_obj(each, key_transform)
            if not each.get("current"):
                search_existing_apikey = search_for_pre_existing_key(
                    want, deepsec_request)
            if each.get("current") or each.get("secret_key"):
                if each.get("current"):
                    api_key = deepsec_request.post(
                        "{0}".format(api_secretkey_current_object), data=want)
                elif "id" in search_existing_apikey:
                    id = search_existing_apikey["id"]
                    request_api = "/api/apikeys/{0}/secretkey".format(id)
                    api_key = deepsec_request.post("{0}".format(request_api),
                                                   data=want)
                if api_key.get("message"):
                    module.fail_json(msg=api_key["message"])
                else:
                    changed = True
                    api_key = map_obj_to_params(api_key, key_transform,
                                                api_return)
                    return_val["api_keys"].append(api_key)
            else:
                if "id" in search_existing_apikey:
                    return_val["api_keys"].append(search_existing_apikey)
                    continue
                apikey = deepsec_request.post("{0}".format(api_object),
                                              data=want)
                if apikey.get("message"):
                    module.fail_json(msg=apikey["message"])
                else:
                    changed = True
                    apikey = map_obj_to_params(apikey, key_transform,
                                               api_return)
                    return_val["api_keys"].append(apikey)
    utils.validate_config(argspec, return_val)
    module.exit_json(config=return_val, changed=changed)
def display_gathered_result(argspec, module, deepsec_request):
    return_val = {}
    if module.params and module.params.get("api_keys"):
        return_val["api_keys"] = []
        for each in module.params["api_keys"]:
            want = map_params_to_obj(each, key_transform)
            search_by_id = search_for_pre_existing_key(want, deepsec_request)
            if search_by_id.get("id"):
                request_api = "{0}/{1}".format(api_object, search_by_id["id"])
                get_key_by_id = deepsec_request.get("{0}".format(request_api))
                get_key_by_id = map_obj_to_params(get_key_by_id, key_transform,
                                                  api_return)
                return_val["api_keys"].append(get_key_by_id)
            if get_key_by_id.get("message"):
                module.fail_json(msg=get_key_by_id["message"])
    else:
        return_get = deepsec_request.post(api_get_object)
        if return_get:
            return_val["api_keys"] = map_obj_to_params(return_get,
                                                       key_transform,
                                                       api_return)[api_return]

    utils.validate_config(argspec, return_val)
    module.exit_json(gathered=return_val, changed=False)
    def search_for_resource_name(self, conn_request, search_resource_by_names):
        search_result = []
        if isinstance(search_resource_by_names, list):
            for each in search_resource_by_names:
                search_payload = {
                    "maxItems": 1,
                    "searchCriteria": [
                        {
                            "fieldName": "name",
                            "stringTest": "equal",
                            "stringValue": each["name"],
                        }
                    ],
                }
                temp_search_response = self.search_for_existing_rules(
                    conn_request, search_payload
                )
                if (
                    temp_search_response.get("integrityMonitoringRules")
                    and temp_search_response["integrityMonitoringRules"]
                ):
                    search_result.append(
                        map_obj_to_params(
                            temp_search_response["integrityMonitoringRules"][
                                0
                            ],
                            self.key_transform,
                            self.api_return,
                        )
                    )
        else:
            search_payload = {
                "maxItems": 1,
                "searchCriteria": [
                    {
                        "fieldName": "name",
                        "stringTest": "equal",
                        "stringValue": search_resource_by_names,
                    }
                ],
            }
            search_result = self.search_for_existing_rules(
                conn_request, search_payload
            )

        return search_result
    def search_for_resource_name(self, conn_request, search_resource_by_names):
        search_result = []
        if isinstance(search_resource_by_names, list):
            for each in search_resource_by_names:
                search_payload = {
                    "maxItems":
                    1,
                    "searchCriteria": [{
                        "fieldName": "name",
                        "stringTest": "equal",
                        "stringValue": each["name"],
                    }],
                }
                temp_search_response = self.search_for_existing_rules(
                    conn_request, search_payload)
                if (temp_search_response.get(self.api_return)
                        and temp_search_response[self.api_return]):
                    api_response = map_obj_to_params(
                        temp_search_response[self.api_return][0],
                        self.key_transform,
                        self.api_return,
                    )
                    if api_response.get("logFiles"):
                        api_response["log_files"] = self.log_files_fn(
                            api_response)
                        api_response.pop("logFiles")
                    search_result.append(api_response)
        else:
            search_payload = {
                "maxItems":
                1,
                "searchCriteria": [{
                    "fieldName": "name",
                    "stringTest": "equal",
                    "stringValue": search_resource_by_names,
                }],
            }
            search_result = self.search_for_existing_rules(
                conn_request, search_payload)

        return search_result
    def search_for_ipr_name(self, deepsec_conn_request, search_ipr_by_names):
        search_result = []
        if isinstance(search_ipr_by_names, list):
            for each in search_ipr_by_names:
                search_payload = {
                    "maxItems":
                    1,
                    "searchCriteria": [{
                        "fieldName": "name",
                        "stringTest": "equal",
                        "stringValue": each["name"],
                    }],
                }
                temp_search_response = self.search_for_intrusion_prevention_rules(
                    deepsec_conn_request, search_payload)
                if (temp_search_response.get("intrusionPreventionRules")
                        and temp_search_response["intrusionPreventionRules"]):
                    search_result.append(
                        map_obj_to_params(
                            temp_search_response["intrusionPreventionRules"]
                            [0],
                            self.key_transform,
                            self.api_return,
                        ))
        else:
            search_payload = {
                "maxItems":
                1,
                "searchCriteria": [{
                    "fieldName": "name",
                    "stringTest": "equal",
                    "stringValue": search_ipr_by_names,
                }],
            }
            search_result = self.search_for_intrusion_prevention_rules(
                deepsec_conn_request, search_payload)

        return search_result
def configure_module_api(argspec, module, deepsec_request):
    if module.params.get("config"):
        config = {}
        before = []
        after = []
        changed = False
        temp_name = []
        for each in module.params["config"]:
            search_by_name = search_for_imr_by_name(deepsec_request,
                                                    each["name"])
            if search_by_name.get(api_return):
                each_result = search_by_name[api_return]
                temp = copy.deepcopy(each_result)
                for every in temp:
                    every = map_obj_to_params(every, key_transform, api_return)
                    if every["name"] == each["name"]:
                        diff = utils.dict_diff(every, each)
                if diff:
                    diff = remove_get_keys_from_payload_dict(
                        diff, get_supported_keys)
                    if diff:
                        if each["name"] not in temp_name:
                            after.extend(before)
                        before.append(every)
                        # Check for actual modification and if present fire
                        # the request over that IPR ID
                        each = utils.remove_empties(
                            utils.dict_merge(every, each))
                        each = remove_get_keys_from_payload_dict(
                            each, get_supported_keys)
                        changed = True
                        utils.validate_config(argspec, {"config": [each]})
                        payload = map_params_to_obj(each, key_transform)
                        api_request = deepsec_request.post(
                            "{0}/{1}".format(api_object, every["id"]),
                            data=payload,
                        )
                        if api_request.get("errors"):
                            module.fail_json(msg=api_request["errors"])
                        elif api_request.get("message"):
                            module.fail_json(msg=api_request["message"])
                        after.append(
                            map_obj_to_params(api_request, key_transform,
                                              api_return))
                    else:
                        before.append(every)
                        temp_name.append(every["name"])
                else:
                    before.append(every)
            else:
                changed = True
                each = remove_get_keys_from_payload_dict(
                    each, get_supported_keys)
                utils.validate_config(argspec, {"config": [each]})
                payload = map_params_to_obj(each, key_transform)
                api_request = deepsec_request.post("{0}".format(api_object),
                                                   data=payload)
                if api_request.get("errors"):
                    module.fail_json(msg=api_request["errors"])
                elif api_request.get("message"):
                    module.fail_json(msg=api_request["message"])
                after.append(
                    map_obj_to_params(api_request, key_transform, api_return))
        config.update({"before": before, "after": after})
        module.exit_json(integrity_monitoringrules=config, changed=changed)
    def configure_module_api(self, conn_request, module_config_params):
        get_supported_keys = ["id", "identifier", "can_be_assigned_alone"]
        config = {}
        before = []
        after = []
        changed = False
        # Add to the THIS list for the value which needs to be excluded
        # from HAVE params when compared to WANT param like 'ID' can be
        # part of HAVE param but may not be part of your WANT param
        remove_from_diff_compare = [
            "id",
            "real_time_scan",
            "scan_action_for_virus",
            "cpu_usage",
        ]
        temp_name = []
        for each in module_config_params:
            search_by_name = self.search_for_resource_name(
                conn_request, each["name"])
            if search_by_name and search_by_name.get(self.api_return):
                each_result = search_by_name[self.api_return]
                for every in each_result:
                    every = map_obj_to_params(every, self.key_transform,
                                              self.api_return)
                    if every["name"] == each["name"]:
                        each = utils.remove_empties(each)
                        diff = utils.dict_diff(every, each)
                if diff:
                    diff = remove_get_keys_from_payload_dict(
                        diff, remove_from_diff_compare)
                    if diff:
                        before.append(every)
                        if self._task.args["state"] == "merged":
                            # Check for actual modification and if present fire
                            # the request over that integrity_monitoring_rules ID
                            each = utils.remove_empties(
                                utils.dict_merge(every, each))
                            each = remove_get_keys_from_payload_dict(
                                each, remove_from_diff_compare)
                            changed = True
                            payload = map_params_to_obj(
                                each, self.key_transform)
                            response_code, api_response = conn_request.post(
                                "{0}/{1}".format(self.api_object, every["id"]),
                                data=payload,
                            )
                            self._check_for_response_code(
                                response_code, api_response)
                            after.append(
                                map_obj_to_params(
                                    api_response,
                                    self.key_transform,
                                    self.api_return,
                                ))
                        elif self._task.args["state"] == "replaced":
                            response_code, api_response = conn_request.delete(
                                "{0}/{1}".format(self.api_object, every["id"]),
                                data=each,
                            )
                            self._check_for_response_code(
                                response_code, api_response)
                            changed = True
                            payload = map_params_to_obj(
                                each, self.key_transform)
                            response_code, api_response = conn_request.post(
                                "{0}".format(self.api_object), data=payload)
                            self._check_for_response_code(
                                response_code, api_response)
                            after.append(
                                map_obj_to_params(
                                    api_response,
                                    self.key_transform,
                                    self.api_return,
                                ))
                    else:
                        before.append(every)
                        after.append(every)
                        temp_name.append(every["name"])
                else:
                    before.append(every)
                    after.append(every)
            else:
                changed = True
                each = utils.remove_empties(each)
                each = remove_get_keys_from_payload_dict(
                    each, get_supported_keys)
                payload = map_params_to_obj(each, self.key_transform)
                code, api_response = conn_request.post("{0}".format(
                    self.api_object),
                                                       data=payload)
                self._check_for_response_code(code, api_response)
                after.extend(before)
                after.append(
                    map_obj_to_params(api_response, self.key_transform,
                                      self.api_return))
        if not changed:
            after = []
        config.update({"before": before, "after": after})

        return config, changed
    def configure_module_api(self, deepsec_conn_request, module_config_params):
        get_supported_keys = ["id", "identifier", "can_be_assigned_alone"]
        config = {}
        before = []
        after = []
        changed = False
        remove_from_diff_compare = [
            "id",
            "cvss_score",
            "cve",
            "can_be_assigned_alone",
            "type",
        ]
        temp_name = []
        for each in module_config_params:
            search_by_name = self.search_for_ipr_name(deepsec_conn_request,
                                                      each["name"])
            if search_by_name and search_by_name.get(self.api_return):
                each_result = search_by_name[self.api_return]
                for every in each_result:
                    every = map_obj_to_params(every, self.key_transform,
                                              self.api_return)
                    if every["name"] == each["name"]:
                        each = utils.remove_empties(each)
                        diff = utils.dict_diff(every, each)
                if diff:
                    diff = remove_get_keys_from_payload_dict(
                        diff, remove_from_diff_compare)
                    if diff:
                        before.append(every)
                        if self._task.args["state"] == "merged":
                            # Check for actual modification and if present fire
                            # the request over that IPR ID
                            each = utils.remove_empties(
                                utils.dict_merge(every, each))
                            each = remove_get_keys_from_payload_dict(
                                each, remove_from_diff_compare)
                            changed = True
                            payload = map_params_to_obj(
                                each, self.key_transform)
                            response_code, api_response = deepsec_conn_request.post(
                                "{0}/{1}".format(self.api_object, every["id"]),
                                data=payload,
                            )
                            self._check_for_response_code(
                                response_code, api_response)
                            after.append(
                                map_obj_to_params(
                                    api_response,
                                    self.key_transform,
                                    self.api_return,
                                ))
                        elif self._task.args["state"] == "replaced":
                            response_code, api_response = deepsec_conn_request.delete(
                                "{0}/{1}".format(self.api_object, every["id"]),
                                data=each,
                            )
                            self._check_for_response_code(
                                response_code, api_response)
                            changed = True
                            payload = map_params_to_obj(
                                each, self.key_transform)
                            response_code, api_response = deepsec_conn_request.post(
                                "{0}".format(self.api_object), data=payload)
                            self._check_for_response_code(
                                response_code, api_response)
                            after.append(
                                map_obj_to_params(
                                    api_response,
                                    self.key_transform,
                                    self.api_return,
                                ))
                    else:
                        before.append(every)
                        after.append(every)
                        temp_name.append(every["name"])
                else:
                    before.append(every)
                    after.append(every)
            else:
                changed = True
                each = utils.remove_empties(each)
                each = remove_get_keys_from_payload_dict(
                    each, get_supported_keys)
                payload = map_params_to_obj(each, self.key_transform)
                code, api_response = deepsec_conn_request.post("{0}".format(
                    self.api_object),
                                                               data=payload)
                self._check_for_response_code(code, api_response)
                after.extend(before)
                after.append(
                    map_obj_to_params(api_response, self.key_transform,
                                      self.api_return))
        if not changed:
            after = []
        config.update({"before": before, "after": after})

        return config, changed