Exemplo n.º 1
0
    def _get_suppressions_from_platform(self):
        headers = merge_dicts(
            get_default_get_headers(self.bc_integration.bc_source,
                                    self.bc_integration.bc_source_version),
            get_auth_header(self.bc_integration.get_auth_token()))
        response = requests.request('GET',
                                    self.suppressions_url,
                                    headers=headers)

        if response.status_code != 200:
            error_message = extract_error_message(response)
            raise Exception(
                f'Get suppressions request failed with response code {response.status_code}: {error_message}'
            )

        # filter out suppressions that we know just don't apply
        suppressions = [
            s for s in json.loads(response.content)
            if self._suppression_valid_for_run(s)
        ]

        for suppression in suppressions:
            if suppression['policyId'] in self.bc_integration.bc_id_mapping:
                suppression[
                    'checkovPolicyId'] = self.bc_integration.bc_id_mapping[
                        suppression['policyId']]
            else:
                suppression['checkovPolicyId'] = suppression[
                    'policyId']  # custom policy

        return suppressions
Exemplo n.º 2
0
    def _get_fixes_for_file(self, check_type, filename, file_contents, failed_checks):

        errors = list(map(lambda c: {
            'resourceId': c.resource,
            'policyId': self.bc_integration.ckv_to_bc_id_mapping[c.check_id],
            'startLine': c.file_line_range[0],
            'endLine': c.file_line_range[1]
        }, failed_checks))

        payload = {
            'filePath': filename,
            'fileContent': file_contents,
            'framework': check_type,
            'errors': errors
        }

        headers = merge_dicts(
            get_default_post_headers(self.bc_integration.bc_source, self.bc_integration.bc_source_version),
            {"Authorization": self.bc_integration.get_auth_token()}
        )

        response = requests.request('POST', self.fixes_url, headers=headers, json=payload)

        if response.status_code != 200:
            error_message = extract_error_message(response)
            raise Exception(f'Get fixes request failed with response code {response.status_code}: {error_message}')

        logging.debug(f'Response from fixes API: {response.content}')

        fixes = json.loads(response.content) if response.content else None
        if not fixes or type(fixes) != list:
            logging.warning(f'Unexpected fixes API response for file {filename}; skipping fixes for this file')
            return None
        return fixes[0]
    def _get_policies_from_platform(self):
        headers = merge_dicts(get_default_get_headers(self.bc_integration.bc_source, self.bc_integration.bc_source_version),
                              get_auth_header(self.bc_integration.bc_api_key))
        response = requests.request('GET', self.policies_url, headers=headers)

        if response.status_code != 200:
            error_message = extract_error_message(response)
            raise Exception(f'Get custom policies request failed with response code {response.status_code}: {error_message}')

        policies = response.json().get('data', [])
        return policies
Exemplo n.º 4
0
    def _get_fixes_for_file(self, filename, file_contents, failed_checks):

        errors = list(
            map(
                lambda c: {
                    'resourceId':
                    c.resource,
                    'policyId':
                    self.bc_integration.ckv_to_bc_id_mapping[c.check_id],
                    'startLine':
                    c.file_line_range[0],
                    'endLine':
                    c.file_line_range[1]
                }, failed_checks))

        payload = {
            'filePath': filename,
            'fileContent': file_contents,
            'errors': errors
        }

        headers = merge_dicts(
            get_default_post_headers(self.bc_integration.bc_source,
                                     self.bc_integration.bc_source_version),
            get_auth_header(self.bc_integration.bc_api_key))

        response = requests.request('POST',
                                    self.fixes_url,
                                    headers=headers,
                                    json=payload)

        if response.status_code != 200:
            error_message = extract_error_message(response)
            raise Exception(
                f'Get fixes request failed with response code {response.status_code}: {error_message}'
            )

        fixes = json.loads(response.content)
        return fixes[0]