44~~~~~~~~~~~~~
55 This module provides a class which abstracts the Nightfall REST API.
66"""
7- import time
87from datetime import datetime , timedelta
98import hmac
109import hashlib
11- import json
1210import logging
1311import os
14- from functools import wraps
1512from typing import List , Tuple , Optional
1613
1714import requests
@@ -104,7 +101,7 @@ def scan_text(self, texts: List[str], detection_rules: Optional[List[DetectionRu
104101 return findings , parsed_response .get ("redactedPayload" )
105102
106103 def _scan_text_v3 (self , data : dict ):
107- response = self .session .post (url = self .TEXT_SCAN_ENDPOINT_V3 , data = json . dumps ( data ) )
104+ response = self .session .post (url = self .TEXT_SCAN_ENDPOINT_V3 , json = data )
108105
109106 self .logger .debug (f"HTTP Request URL: { response .request .url } " )
110107 self .logger .debug (f"HTTP Request Body: { response .request .body } " )
@@ -119,7 +116,8 @@ def _scan_text_v3(self, data: dict):
119116
120117 def scan_file (self , location : str , webhook_url : Optional [str ] = None , policy_uuid : Optional [str ] = None ,
121118 detection_rules : Optional [List [DetectionRule ]] = None ,
122- detection_rule_uuids : Optional [List [str ]] = None ) -> Tuple [str , str ]:
119+ detection_rule_uuids : Optional [List [str ]] = None ,
120+ request_metadata : Optional [str ] = None ) -> Tuple [str , str ]:
123121 """Scan file with Nightfall.
124122 At least one of policy_uuid, detection_rule_uuids or detection_rules is required.
125123
@@ -131,6 +129,8 @@ def scan_file(self, location: str, webhook_url: Optional[str] = None, policy_uui
131129 :type detection_rules: List[DetectionRule] or None
132130 :param detection_rule_uuids: list of detection rule UUIDs.
133131 :type detection_rule_uuids: List[str] or None
132+ :param request_metadata: additional metadata that will be returned with the webhook response
133+ :type request_metadata: str or None
134134 :returns: (scan_id, message)
135135 """
136136
@@ -153,7 +153,8 @@ def scan_file(self, location: str, webhook_url: Optional[str] = None, policy_uui
153153 response = self ._file_scan_scan (session_id ,
154154 detection_rules = detection_rules ,
155155 detection_rule_uuids = detection_rule_uuids ,
156- webhook_url = webhook_url , policy_uuid = policy_uuid )
156+ webhook_url = webhook_url , policy_uuid = policy_uuid ,
157+ request_metadata = request_metadata )
157158 _validate_response (response , 200 )
158159 parsed_response = response .json ()
159160
@@ -163,7 +164,7 @@ def _file_scan_initialize(self, location: str):
163164 data = {
164165 "fileSizeBytes" : os .path .getsize (location )
165166 }
166- response = self .session .post (url = self .FILE_SCAN_INITIALIZE_ENDPOINT , data = json . dumps ( data ) )
167+ response = self .session .post (url = self .FILE_SCAN_INITIALIZE_ENDPOINT , json = data )
167168
168169 return response
169170
@@ -200,7 +201,7 @@ def _file_scan_finalize(self, session_id: str):
200201
201202 def _file_scan_scan (self , session_id : str , detection_rules : Optional [List [DetectionRule ]] = None ,
202203 detection_rule_uuids : Optional [List [str ]] = None , webhook_url : Optional [str ] = None ,
203- policy_uuid : Optional [str ] = None ) -> requests .Response :
204+ policy_uuid : Optional [str ] = None , request_metadata : Optional [ str ] = None ) -> requests .Response :
204205 if policy_uuid :
205206 data = {"policyUUID" : policy_uuid }
206207 else :
@@ -210,7 +211,10 @@ def _file_scan_scan(self, session_id: str, detection_rules: Optional[List[Detect
210211 if detection_rules :
211212 data ["policy" ]["detectionRules" ] = [d .as_dict () for d in detection_rules ]
212213
213- response = self .session .post (url = self .FILE_SCAN_SCAN_ENDPOINT .format (session_id ), data = json .dumps (data ))
214+ if request_metadata :
215+ data ["requestMetadata" ] = request_metadata
216+
217+ response = self .session .post (url = self .FILE_SCAN_SCAN_ENDPOINT .format (session_id ), json = data )
214218 return response
215219
216220 def validate_webhook (self , request_signature : str , request_timestamp : str , request_data : str ) -> bool :
0 commit comments