From a1cb7ac0415ad74810abf64ff2f4c8aa955ce899 Mon Sep 17 00:00:00 2001 From: RotemAmit Date: Thu, 9 Jan 2025 16:11:47 +0200 Subject: [PATCH] Fix Pylint errors in AWS (#38042) * aws pylint * apimodule * aws secret manager * apimodule_test * fix unit test * pylint fix * response * update dynamo test playbook * fromversion: 5.0.0 --- Packs/AWS-ACM/ReleaseNotes/1_1_40.md | 4 + Packs/AWS-ACM/pack_metadata.json | 2 +- .../AWS-AccessAnalyzer/ReleaseNotes/1_1_37.md | 4 + Packs/AWS-AccessAnalyzer/pack_metadata.json | 2 +- Packs/AWS-Athena/ReleaseNotes/2_0_5.md | 4 + Packs/AWS-Athena/pack_metadata.json | 2 +- .../AWS-CloudWatchLogs/AWS-CloudWatchLogs.py | 3 +- .../AWS-CloudWatchLogs/AWS-CloudWatchLogs.yml | 2 +- .../AWS-CloudWatchLogs/ReleaseNotes/1_2_26.md | 5 + Packs/AWS-CloudWatchLogs/pack_metadata.json | 2 +- Packs/AWS-EC2/ReleaseNotes/1_4_17.md | 4 + Packs/AWS-EC2/pack_metadata.json | 2 +- Packs/AWS-EKS/ReleaseNotes/1_0_7.md | 4 + Packs/AWS-EKS/pack_metadata.json | 2 +- .../Integrations/AWSGuardDuty/AWSGuardDuty.py | 36 +++--- .../AWSGuardDuty/AWSGuardDuty.yml | 2 +- Packs/AWS-GuardDuty/ReleaseNotes/1_3_57.md | 8 ++ Packs/AWS-GuardDuty/pack_metadata.json | 2 +- Packs/AWS-IAM/Integrations/AWS-IAM/AWS-IAM.py | 90 ++++++++------- .../AWS-IAM/Integrations/AWS-IAM/AWS-IAM.yml | 2 +- Packs/AWS-IAM/ReleaseNotes/1_1_68.md | 5 + Packs/AWS-IAM/pack_metadata.json | 2 +- .../ReleaseNotes/1_0_7.md | 4 + .../AWS-IAMIdentityCenter/pack_metadata.json | 2 +- Packs/AWS-ILM/Integrations/AWSILM/AWSILM.py | 4 +- Packs/AWS-ILM/Integrations/AWSILM/AWSILM.yml | 2 +- Packs/AWS-ILM/ReleaseNotes/1_0_27.md | 5 + Packs/AWS-ILM/pack_metadata.json | 2 +- Packs/AWS-Lambda/ReleaseNotes/1_3_11.md | 4 + Packs/AWS-Lambda/pack_metadata.json | 2 +- .../AWS-NetworkFirewall.py | 2 + .../AWS-NetworkFirewall.yml | 2 +- .../AWS-NetworkFirewall/ReleaseNotes/1_0_9.md | 5 + Packs/AWS-NetworkFirewall/pack_metadata.json | 2 +- Packs/AWS-Organizations/ReleaseNotes/1_0_6.md | 4 + Packs/AWS-Organizations/pack_metadata.json | 2 +- Packs/AWS-Route53/ReleaseNotes/1_1_38.md | 4 + Packs/AWS-Route53/pack_metadata.json | 2 +- Packs/AWS-S3/ReleaseNotes/1_2_29.md | 4 + Packs/AWS-S3/pack_metadata.json | 2 +- Packs/AWS-SNS/ReleaseNotes/1_0_20.md | 4 + Packs/AWS-SNS/pack_metadata.json | 2 +- Packs/AWS-SQS/ReleaseNotes/1_2_30.md | 4 + Packs/AWS-SQS/pack_metadata.json | 2 +- Packs/AWS-SecurityHub/ReleaseNotes/1_3_41.md | 7 ++ Packs/AWS-SecurityHub/pack_metadata.json | 2 +- Packs/AWS-SecurityLake/ReleaseNotes/1_0_13.md | 4 + Packs/AWS-SecurityLake/pack_metadata.json | 2 +- .../Integrations/AWS_DynamoDB/AWS_DynamoDB.py | 1 + .../AWS_DynamoDB/AWS_DynamoDB.yml | 2 +- Packs/AWS_DynamoDB/ReleaseNotes/1_0_36.md | 5 + .../playbook-AWS-DynamoDB-Test.yml | 108 +++++++++++++++--- Packs/AWS_DynamoDB/pack_metadata.json | 2 +- Packs/AWS_SystemManager/ReleaseNotes/1_0_9.md | 4 + Packs/AWS_SystemManager/pack_metadata.json | 2 +- Packs/AWS_WAF/Integrations/AWSWAF/AWSWAF.yml | 2 +- Packs/AWS_WAF/ReleaseNotes/1_0_12.md | 5 + Packs/AWS_WAF/pack_metadata.json | 2 +- Packs/ApiModules/ReleaseNotes/2_2_37.md | 4 + .../Scripts/AWSApiModule/AWSApiModule.py | 9 +- .../Scripts/AWSApiModule/AWSApiModule_test.py | 17 ++- Packs/ApiModules/pack_metadata.json | 2 +- .../Aws-SecretsManager/ReleaseNotes/1_0_46.md | 4 + Packs/Aws-SecretsManager/pack_metadata.json | 2 +- 64 files changed, 317 insertions(+), 124 deletions(-) create mode 100644 Packs/AWS-ACM/ReleaseNotes/1_1_40.md create mode 100644 Packs/AWS-AccessAnalyzer/ReleaseNotes/1_1_37.md create mode 100644 Packs/AWS-Athena/ReleaseNotes/2_0_5.md create mode 100644 Packs/AWS-CloudWatchLogs/ReleaseNotes/1_2_26.md create mode 100644 Packs/AWS-EC2/ReleaseNotes/1_4_17.md create mode 100644 Packs/AWS-EKS/ReleaseNotes/1_0_7.md create mode 100644 Packs/AWS-GuardDuty/ReleaseNotes/1_3_57.md create mode 100644 Packs/AWS-IAM/ReleaseNotes/1_1_68.md create mode 100644 Packs/AWS-IAMIdentityCenter/ReleaseNotes/1_0_7.md create mode 100644 Packs/AWS-ILM/ReleaseNotes/1_0_27.md create mode 100644 Packs/AWS-Lambda/ReleaseNotes/1_3_11.md create mode 100644 Packs/AWS-NetworkFirewall/ReleaseNotes/1_0_9.md create mode 100644 Packs/AWS-Organizations/ReleaseNotes/1_0_6.md create mode 100644 Packs/AWS-Route53/ReleaseNotes/1_1_38.md create mode 100644 Packs/AWS-S3/ReleaseNotes/1_2_29.md create mode 100644 Packs/AWS-SNS/ReleaseNotes/1_0_20.md create mode 100644 Packs/AWS-SQS/ReleaseNotes/1_2_30.md create mode 100644 Packs/AWS-SecurityHub/ReleaseNotes/1_3_41.md create mode 100644 Packs/AWS-SecurityLake/ReleaseNotes/1_0_13.md create mode 100644 Packs/AWS_DynamoDB/ReleaseNotes/1_0_36.md create mode 100644 Packs/AWS_SystemManager/ReleaseNotes/1_0_9.md create mode 100644 Packs/AWS_WAF/ReleaseNotes/1_0_12.md create mode 100644 Packs/ApiModules/ReleaseNotes/2_2_37.md create mode 100644 Packs/Aws-SecretsManager/ReleaseNotes/1_0_46.md diff --git a/Packs/AWS-ACM/ReleaseNotes/1_1_40.md b/Packs/AWS-ACM/ReleaseNotes/1_1_40.md new file mode 100644 index 000000000000..efd98ff53cc8 --- /dev/null +++ b/Packs/AWS-ACM/ReleaseNotes/1_1_40.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - ACM +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-ACM/pack_metadata.json b/Packs/AWS-ACM/pack_metadata.json index 9787ac3994da..f6a6f4090fda 100644 --- a/Packs/AWS-ACM/pack_metadata.json +++ b/Packs/AWS-ACM/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - ACM", "description": "Amazon Web Services Certificate Manager Service (acm)", "support": "xsoar", - "currentVersion": "1.1.39", + "currentVersion": "1.1.40", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-AccessAnalyzer/ReleaseNotes/1_1_37.md b/Packs/AWS-AccessAnalyzer/ReleaseNotes/1_1_37.md new file mode 100644 index 000000000000..92cc46d55635 --- /dev/null +++ b/Packs/AWS-AccessAnalyzer/ReleaseNotes/1_1_37.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - AccessAnalyzer +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-AccessAnalyzer/pack_metadata.json b/Packs/AWS-AccessAnalyzer/pack_metadata.json index 2ea212e4e0d7..21ddfd87bafe 100644 --- a/Packs/AWS-AccessAnalyzer/pack_metadata.json +++ b/Packs/AWS-AccessAnalyzer/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - AccessAnalyzer", "description": "Amazon Web Services IAM Access Analyzer", "support": "xsoar", - "currentVersion": "1.1.36", + "currentVersion": "1.1.37", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-Athena/ReleaseNotes/2_0_5.md b/Packs/AWS-Athena/ReleaseNotes/2_0_5.md new file mode 100644 index 000000000000..68ff3312208a --- /dev/null +++ b/Packs/AWS-Athena/ReleaseNotes/2_0_5.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - Athena +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-Athena/pack_metadata.json b/Packs/AWS-Athena/pack_metadata.json index 107d50e7036a..32bc2cff99d0 100644 --- a/Packs/AWS-Athena/pack_metadata.json +++ b/Packs/AWS-Athena/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - Athena", "description": "Amazon Web Services Athena", "support": "xsoar", - "currentVersion": "2.0.4", + "currentVersion": "2.0.5", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-CloudWatchLogs/Integrations/AWS-CloudWatchLogs/AWS-CloudWatchLogs.py b/Packs/AWS-CloudWatchLogs/Integrations/AWS-CloudWatchLogs/AWS-CloudWatchLogs.py index 5f37f476aed3..f10ee519e9ca 100644 --- a/Packs/AWS-CloudWatchLogs/Integrations/AWS-CloudWatchLogs/AWS-CloudWatchLogs.py +++ b/Packs/AWS-CloudWatchLogs/Integrations/AWS-CloudWatchLogs/AWS-CloudWatchLogs.py @@ -144,7 +144,7 @@ def filter_log_events(args, aws_client): if args.get('limit') is not None: kwargs.update({'limit': int(args.get('limit'))}) if args.get('interleaved') is not None: - kwargs.update({'interleaved': True if args.get('interleaved') == 'True' else False}) + kwargs.update({'interleaved': args.get('interleaved') == 'True'}) response = client.filter_log_events(**kwargs) for event in response['events']: @@ -435,6 +435,7 @@ def main(): retries, sts_endpoint_url=sts_endpoint_url, endpoint_url=endpoint_url) command = demisto.command() args = demisto.args() + result = "" if command == 'test-module': # This is the call made when pressing the integration test button. diff --git a/Packs/AWS-CloudWatchLogs/Integrations/AWS-CloudWatchLogs/AWS-CloudWatchLogs.yml b/Packs/AWS-CloudWatchLogs/Integrations/AWS-CloudWatchLogs/AWS-CloudWatchLogs.yml index 4f8104917ce1..1c0db62741f9 100644 --- a/Packs/AWS-CloudWatchLogs/Integrations/AWS-CloudWatchLogs/AWS-CloudWatchLogs.yml +++ b/Packs/AWS-CloudWatchLogs/Integrations/AWS-CloudWatchLogs/AWS-CloudWatchLogs.yml @@ -461,7 +461,7 @@ script: description: The name of the log group. type: string description: Lists the specified metric filters. You can list all the metric filters or filter the results by log name, prefix, metric name, or metric namespace. - dockerimage: demisto/boto3py3:1.0.0.115129 + dockerimage: demisto/boto3py3:1.0.0.1894954 tests: - No Tests fromversion: 5.0.0 diff --git a/Packs/AWS-CloudWatchLogs/ReleaseNotes/1_2_26.md b/Packs/AWS-CloudWatchLogs/ReleaseNotes/1_2_26.md new file mode 100644 index 000000000000..c1935b5e6c02 --- /dev/null +++ b/Packs/AWS-CloudWatchLogs/ReleaseNotes/1_2_26.md @@ -0,0 +1,5 @@ +#### Integrations + +##### AWS - CloudWatchLogs +- Code functionality improvements. +- Updated the Docker image to: *demisto/boto3py3:1.0.0.1894954*. \ No newline at end of file diff --git a/Packs/AWS-CloudWatchLogs/pack_metadata.json b/Packs/AWS-CloudWatchLogs/pack_metadata.json index bc2b7dfaa9b2..a38fe92d3710 100644 --- a/Packs/AWS-CloudWatchLogs/pack_metadata.json +++ b/Packs/AWS-CloudWatchLogs/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - CloudWatchLogs", "description": "Amazon Web Services CloudWatch Logs (logs).", "support": "xsoar", - "currentVersion": "1.2.25", + "currentVersion": "1.2.26", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-EC2/ReleaseNotes/1_4_17.md b/Packs/AWS-EC2/ReleaseNotes/1_4_17.md new file mode 100644 index 000000000000..bb09fe5a1d2b --- /dev/null +++ b/Packs/AWS-EC2/ReleaseNotes/1_4_17.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - EC2 +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-EC2/pack_metadata.json b/Packs/AWS-EC2/pack_metadata.json index 0bc14bb40c2c..fc4e7b614df5 100644 --- a/Packs/AWS-EC2/pack_metadata.json +++ b/Packs/AWS-EC2/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - EC2", "description": "Amazon Web Services Elastic Compute Cloud (EC2)", "support": "xsoar", - "currentVersion": "1.4.16", + "currentVersion": "1.4.17", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-EKS/ReleaseNotes/1_0_7.md b/Packs/AWS-EKS/ReleaseNotes/1_0_7.md new file mode 100644 index 000000000000..c52eabb9bccc --- /dev/null +++ b/Packs/AWS-EKS/ReleaseNotes/1_0_7.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS-EKS +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-EKS/pack_metadata.json b/Packs/AWS-EKS/pack_metadata.json index d8f951e28252..988e050dd744 100644 --- a/Packs/AWS-EKS/pack_metadata.json +++ b/Packs/AWS-EKS/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - EKS", "description": "The AWS EKS integration allows for the management and operation of Amazon Elastic Kubernetes Service (EKS) clusters.", "support": "xsoar", - "currentVersion": "1.0.6", + "currentVersion": "1.0.7", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-GuardDuty/Integrations/AWSGuardDuty/AWSGuardDuty.py b/Packs/AWS-GuardDuty/Integrations/AWSGuardDuty/AWSGuardDuty.py index 203b92e3bd09..90d9beb04178 100644 --- a/Packs/AWS-GuardDuty/Integrations/AWSGuardDuty/AWSGuardDuty.py +++ b/Packs/AWS-GuardDuty/Integrations/AWSGuardDuty/AWSGuardDuty.py @@ -48,7 +48,7 @@ def create_detector(client: "GuardDutyClient", args: dict) -> CommandResults: if args.get('findingFrequency'): kwargs['FindingPublishingFrequency'] = FINDING_FREQUENCY[args['findingFrequency']] - get_dataSources = dict() + get_dataSources = {} if args.get('enableKubernetesLogs'): get_dataSources.update( {'Kubernetes': {'AuditLogs': {'Enable': argToBoolean(args['enableKubernetesLogs'])}}}) @@ -73,7 +73,7 @@ def create_detector(client: "GuardDutyClient", args: dict) -> CommandResults: def delete_detector(client: "GuardDutyClient", args: dict): response = client.delete_detector(DetectorId=args.get('detectorId', '')) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return f"The Detector {args.get('detectorId')} has been deleted" else: raise Exception(f"The Detector {args.get('detectorId')} failed to delete.") @@ -118,7 +118,7 @@ def update_detector(client: "GuardDutyClient", args: dict) -> str: if args.get('findingFrequency'): kwargs['FindingPublishingFrequency'] = FINDING_FREQUENCY[args['findingFrequency']] - get_dataSources = dict() + get_dataSources = {} if args.get('enableKubernetesLogs'): get_dataSources.update( {'Kubernetes': {'AuditLogs': {'Enable': argToBoolean(args['enableKubernetesLogs'])}}}) @@ -131,7 +131,7 @@ def update_detector(client: "GuardDutyClient", args: dict) -> str: kwargs['DataSources'] = get_dataSources response = client.update_detector(**kwargs) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return f"The Detector {args.get('detectorId')} has been updated successfully" else: raise Exception(f"Detector {args.get('detectorId')} failed to update. Response was: {response}") @@ -167,7 +167,7 @@ def list_detectors(client: "GuardDutyClient", args: dict) -> CommandResults: def create_ip_set(client: "GuardDutyClient", args: dict): kwargs: dict[str, Any] = {'DetectorId': args.get('detectorId')} if args.get('activate') is not None: - kwargs.update({'Activate': True if args.get('activate') == 'True' else False}) + kwargs.update({'Activate': args.get('activate') == 'True'}) if args.get('format') is not None: kwargs.update({'Format': args.get('format')}) if args.get('location') is not None: @@ -193,7 +193,7 @@ def delete_ip_set(client: "GuardDutyClient", args: dict): DetectorId=args.get('detectorId', ''), IpSetId=args.get('ipSetId', '') ) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return f"The IPSet {args.get('ipSetId')} has been deleted from Detector {args.get('detectorId')}" else: @@ -206,7 +206,7 @@ def update_ip_set(client: "GuardDutyClient", args: dict): 'IpSetId': args.get('ipSetId') } if args.get('activate'): - kwargs.update({'Activate': True if args.get('activate') == 'True' else False}) + kwargs.update({'Activate': args.get('activate') == 'True'}) if args.get('location'): kwargs.update({'Location': args.get('location')}) if args.get('name'): @@ -214,7 +214,7 @@ def update_ip_set(client: "GuardDutyClient", args: dict): response = client.update_ip_set(**kwargs) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return f"The IPSet {args.get('ipSetId')} has been Updated" else: @@ -269,7 +269,7 @@ def list_ip_sets(client: "GuardDutyClient", args: dict) -> CommandResults: def create_threat_intel_set(client: "GuardDutyClient", args: dict): kwargs: dict[str, Any] = {'DetectorId': args.get('detectorId')} if args.get('activate') is not None: - kwargs.update({'Activate': True if args.get('activate') == 'True' else False}) + kwargs.update({'Activate': args.get('activate') == 'True'}) if args.get('format') is not None: kwargs.update({'Format': args.get('format')}) if args.get('location') is not None: @@ -296,7 +296,7 @@ def delete_threat_intel_set(client: "GuardDutyClient", args: dict): DetectorId=args.get('detectorId', ''), ThreatIntelSetId=args.get('threatIntelSetId', '') ) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return f"The ThreatIntel Set {args.get('threatIntelSetId')} has been deleted from Detector {args.get('detectorId')}" else: raise Exception(f"Failed to delete ThreatIntel set {args.get('threatIntelSetId')} . Response was: {response}") @@ -357,14 +357,14 @@ def update_threat_intel_set(client: "GuardDutyClient", args: dict): 'ThreatIntelSetId': args.get('threatIntelSetId') } if args.get('activate'): - kwargs.update({'Activate': True if args.get('activate') == 'True' else False}) + kwargs.update({'Activate': args.get('activate') == 'True'}) if args.get('location'): kwargs.update({'Location': args.get('location')}) if args.get('name'): kwargs.update({'Name': args.get('name')}) response = client.update_threat_intel_set(**kwargs) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return f"The ThreatIntel set {args.get('threatIntelSetId')} has been updated" else: raise Exception(f"Failed updating ThreatIntel set {args.get('threatIntelSetId')}. " @@ -457,7 +457,7 @@ def parse_finding(finding: "FindingTypeDef") -> Dict[str, Any]: which is generated when abnormal or suspicious activity is detected. :return: parsed_finding """ - parsed_finding: dict = dict() + parsed_finding: dict = {} parsed_finding['AccountId'] = finding.get('AccountId') parsed_finding['CreatedAt'] = finding.get('CreatedAt') parsed_finding['Description'] = finding.get('Description') @@ -511,7 +511,7 @@ def get_findings(client: "GuardDutyClient", args: dict) -> dict: def parse_incident_from_finding(finding: "FindingTypeDef") -> Dict[str, Any]: - incident: dict = dict() + incident: dict = {} incident['name'] = finding.get('Title') incident['details'] = finding.get('Description') incident['occurred'] = finding.get('CreatedAt') @@ -646,7 +646,7 @@ def create_sample_findings(client: "GuardDutyClient", args: dict): response = client.create_sample_findings(**kwargs) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return "Sample Findings were generated" else: raise Exception(f"Failed to generate findings. Response was: {response}") @@ -659,7 +659,7 @@ def archive_findings(client: "GuardDutyClient", args: dict): response = client.archive_findings(**kwargs) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return "Findings were archived" else: raise Exception(f"Failed to archive findings. Response was: {response}") @@ -672,7 +672,7 @@ def unarchive_findings(client: "GuardDutyClient", args: dict): response = client.unarchive_findings(**kwargs) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return "Findings were unarchived" else: raise Exception(f"Failed to archive findings. Response was: {response}") @@ -688,7 +688,7 @@ def update_findings_feedback(client: "GuardDutyClient", args: dict): kwargs.update({'Feedback': argToList(args.get('feedback'))}) response = client.update_findings_feedback(**kwargs) - if response == dict() or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: + if response == {} or response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 200: return "Findings Feedback sent!" else: raise Exception(f"Failed to send findings feedback. Response was: {response}") diff --git a/Packs/AWS-GuardDuty/Integrations/AWSGuardDuty/AWSGuardDuty.yml b/Packs/AWS-GuardDuty/Integrations/AWSGuardDuty/AWSGuardDuty.yml index 756b6369cb06..96b1674e3999 100644 --- a/Packs/AWS-GuardDuty/Integrations/AWSGuardDuty/AWSGuardDuty.yml +++ b/Packs/AWS-GuardDuty/Integrations/AWSGuardDuty/AWSGuardDuty.yml @@ -880,7 +880,7 @@ script: - contextPath: AWS.GuardDuty.Members.UpdatedAt description: The time a member was last updated. type: string - dockerimage: demisto/boto3py3:1.0.0.1865449 + dockerimage: demisto/boto3py3:1.0.0.1894954 isfetch: true runonce: false script: '-' diff --git a/Packs/AWS-GuardDuty/ReleaseNotes/1_3_57.md b/Packs/AWS-GuardDuty/ReleaseNotes/1_3_57.md new file mode 100644 index 000000000000..110278786462 --- /dev/null +++ b/Packs/AWS-GuardDuty/ReleaseNotes/1_3_57.md @@ -0,0 +1,8 @@ +#### Integrations + +##### AWS - GuardDuty Event Collector +Code functionality improvements. + +##### AWS - GuardDuty +- Code functionality improvements. +- Updated the Docker image to: *demisto/boto3py3:1.0.0.1894954*. \ No newline at end of file diff --git a/Packs/AWS-GuardDuty/pack_metadata.json b/Packs/AWS-GuardDuty/pack_metadata.json index cb83a9558bba..7c3f8077e267 100644 --- a/Packs/AWS-GuardDuty/pack_metadata.json +++ b/Packs/AWS-GuardDuty/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - GuardDuty", "description": "Amazon Web Services Guard Duty Service (gd)", "support": "xsoar", - "currentVersion": "1.3.56", + "currentVersion": "1.3.57", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-IAM/Integrations/AWS-IAM/AWS-IAM.py b/Packs/AWS-IAM/Integrations/AWS-IAM/AWS-IAM.py index 9e421a3d05b4..715eceab70a0 100644 --- a/Packs/AWS-IAM/Integrations/AWS-IAM/AWS-IAM.py +++ b/Packs/AWS-IAM/Integrations/AWS-IAM/AWS-IAM.py @@ -1,3 +1,4 @@ + import demistomock as demisto # noqa: F401 from CommonServerPython import * # noqa: F401 @@ -71,12 +72,11 @@ def create_login_profile(args, client): # pragma: no cover 'Password': args.get('password') } if args.get('passwordResetRequired'): - kwargs.update({'PasswordResetRequired': True if args.get( - 'passwordResetRequired') == 'True' else False}) + kwargs.update({'PasswordResetRequired': args.get('passwordResetRequired') == 'True'}) response = client.create_login_profile(**kwargs) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - demisto.results("Login Profile Was Created For user {0} ".format(args.get('userName'))) + demisto.results("Login Profile Was Created For user {} ".format(args.get('userName'))) def get_user(args, client): # pragma: no cover @@ -132,23 +132,23 @@ def update_user(args, client): # pragma: no cover response = client.update_user(**kwargs) if response['ResponseMetadata']['HTTPStatusCode'] == 200: demisto.results( - "Changed UserName {0} To: {1}".format(args.get('oldUserName'), args.get('newUserName'))) + "Changed UserName {} To: {}".format(args.get('oldUserName'), args.get('newUserName'))) def delete_user(args, client): # pragma: no cover response = client.delete_user(UserName=args.get('userName')) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - demisto.results('The User {0} has been deleted'.format(args.get('userName'))) + demisto.results('The User {} has been deleted'.format(args.get('userName'))) def update_login_profile(args, client): # pragma: no cover response = client.update_login_profile( Password=args.get('newPassword'), UserName=args.get('userName'), - PasswordResetRequired=True if args.get('passwordResetRequired') == 'True' else False + PasswordResetRequired=args.get('passwordResetRequired') == 'True' ) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - demisto.results("The user {0} Password was changed".format(args.get('userName'))) + demisto.results("The user {} Password was changed".format(args.get('userName'))) def create_group(args, client): # pragma: no cover @@ -211,9 +211,9 @@ def add_user_to_group(args, client): # pragma: no cover UserName=args.get('userName') ) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - demisto.results("The user {0} was added to the IAM group: {1}".format(args.get('userName'), - args.get( - 'groupName'))) + demisto.results("The user {} was added to the IAM group: {}".format(args.get('userName'), + args.get( + 'groupName'))) def create_access_key(args, client): # pragma: no cover @@ -245,8 +245,8 @@ def update_access_key(args, client): # pragma: no cover response = client.update_access_key(**kwargs) if response['ResponseMetadata']['HTTPStatusCode'] == 200: demisto.results( - "Access Key with ID {0} was set to status: {1}".format(args.get('accessKeyId'), - args.get('status'))) + "Access Key with ID {} was set to status: {}".format(args.get('accessKeyId'), + args.get('status'))) def list_access_key_for_user(args, client): # pragma: no cover @@ -269,7 +269,7 @@ def list_policies(args, client): # pragma: no cover data = [] response = client.list_policies( Scope=args.get('scope'), - OnlyAttached=True if args.get('onlyAttached') == 'True' else False + OnlyAttached=args.get('onlyAttached') == 'True' ) for policy in response['Policies']: data.append({ @@ -310,6 +310,7 @@ def list_roles(args, client): # pragma: no cover def attach_policy(args, client): # pragma: no cover + response = {} if args.get('type') == 'User': response = client.attach_user_policy( UserName=args.get('entityName'), @@ -328,10 +329,11 @@ def attach_policy(args, client): # pragma: no cover if response['ResponseMetadata']['HTTPStatusCode'] == 200: demisto.results( - "Policy was attached to {0}: {1} ".format(args.get('type'), args.get('entityName'))) + "Policy was attached to {}: {} ".format(args.get('type'), args.get('entityName'))) def detach_policy(args, client): # pragma: no cover + response = {} if args.get('type') == 'User': response = client.detach_user_policy( UserName=args.get('entityName'), @@ -349,19 +351,19 @@ def detach_policy(args, client): # pragma: no cover ) if response['ResponseMetadata']['HTTPStatusCode'] == 200: demisto.results( - "Policy was detached from {0}: {1} ".format(args.get('type'), args.get('entityName'))) + "Policy was detached from {}: {} ".format(args.get('type'), args.get('entityName'))) def delete_login_profile(args, client): # pragma: no cover response = client.delete_login_profile(UserName=args.get('userName')) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - demisto.results("The user {0} login profile has been deleted".format(args.get('userName'))) + demisto.results("The user {} login profile has been deleted".format(args.get('userName'))) def delete_group(args, client): # pragma: no cover response = client.delete_group(GroupName=args.get('groupName')) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - demisto.results("The Group {0} has been deleted".format(args.get('groupName'))) + demisto.results("The Group {} has been deleted".format(args.get('groupName'))) def remove_user_from_group(args, client): # pragma: no cover @@ -371,8 +373,8 @@ def remove_user_from_group(args, client): # pragma: no cover ) if response['ResponseMetadata']['HTTPStatusCode'] == 200: demisto.results( - "The User {0} has been removed from the group {1}".format(args.get('userName'), - args.get('groupName'))) + "The User {} has been removed from the group {}".format(args.get('userName'), + args.get('groupName'))) def delete_access_key(args, client): # pragma: no cover @@ -461,7 +463,7 @@ def delete_instance_profile(args, client): # pragma: no cover response = client.delete_instance_profile(InstanceProfileName=args.get('instanceProfileName')) if response['ResponseMetadata']['HTTPStatusCode'] == 200: demisto.results( - "The InstanceProfile: {0} was deleted".format(args.get('instanceProfileName'))) + "The InstanceProfile: {} was deleted".format(args.get('instanceProfileName'))) def list_instance_profiles(args, client): # pragma: no cover @@ -493,8 +495,8 @@ def add_role_to_instance_profile(args, client): # pragma: no cover response = client.add_role_to_instance_profile(**kwargs) if response['ResponseMetadata']['HTTPStatusCode'] == 200: demisto.results( - "The Role: {0} was added to the Instance Profile: {1}".format(args.get('roleName'), - args.get('instanceProfileName')) + "The Role: {} was added to the Instance Profile: {}".format(args.get('roleName'), + args.get('instanceProfileName')) ) @@ -507,9 +509,9 @@ def remove_role_from_instance_profile(args, client): # pragma: no cover response = client.remove_role_from_instance_profile(**kwargs) if response['ResponseMetadata']['HTTPStatusCode'] == 200: demisto.results( - "The Role: {0} was removed from the Instance Profile: {1}".format(args.get('roleName'), - args.get( - 'instanceProfileName'))) + "The Role: {} was removed from the Instance Profile: {}".format(args.get('roleName'), + args.get( + 'instanceProfileName'))) def list_instance_profiles_for_role(args, client): # pragma: no cover @@ -575,7 +577,7 @@ def delete_role(args, client): # pragma: no cover response = client.delete_role(RoleName=args.get('roleName')) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - demisto.results("The Role: {0} was deleted".format(args.get('roleName'))) + demisto.results("The Role: {} was deleted".format(args.get('roleName'))) def create_role(args, client): # pragma: no cover @@ -635,7 +637,7 @@ def delete_policy(args, client): # pragma: no cover response = client.delete_policy(PolicyArn=args.get('policyArn')) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - demisto.results("The Policy: {0} was deleted".format(args.get('policyArn'))) + demisto.results("The Policy: {} was deleted".format(args.get('policyArn'))) def create_policy_version(args, client): # pragma: no cover @@ -644,7 +646,7 @@ def create_policy_version(args, client): # pragma: no cover 'PolicyDocument': json.dumps(json.loads(args.get('policyDocument'))) } if args.get('setAsDefault') is not None: - kwargs.update({'SetAsDefault': True if args.get('setAsDefault') == 'True' else False}) + kwargs.update({'SetAsDefault': args.get('setAsDefault') == 'True'}) response = client.create_policy_version(**kwargs) policy = response['PolicyVersion'] @@ -713,7 +715,7 @@ def set_default_policy_version(args, client): # pragma: no cover } response = client.set_default_policy_version(**kwargs) if response['ResponseMetadata']['HTTPStatusCode'] == 200: - demisto.results("The Default Policy Version was set to {0}".format(args.get('versionId'))) + demisto.results("The Default Policy Version was set to {}".format(args.get('versionId'))) def create_account_alias(args, client): # pragma: no cover @@ -752,24 +754,24 @@ def update_account_password_policy(args, client): # pragma: no cover if args.get('minimumPasswordLength'): kwargs.update({'MinimumPasswordLength': int(args.get('minimumPasswordLength'))}) if args.get('requireSymbols'): - kwargs.update({'RequireSymbols': True if args.get('requireSymbols') == 'True' else False}) + kwargs.update({'RequireSymbols': args.get('requireSymbols') == 'True'}) if args.get('requireNumbers'): - kwargs.update({'RequireNumbers': True if args.get('requireNumbers') == 'True' else False}) + kwargs.update({'RequireNumbers': args.get('requireNumbers') == 'True'}) if args.get('requireUppercaseCharacters'): kwargs.update( - {'RequireUppercaseCharacters': True if args.get('requireUppercaseCharacters') == 'True' else False}) + {'RequireUppercaseCharacters': args.get('requireUppercaseCharacters') == 'True'}) if args.get('requireLowercaseCharacters'): kwargs.update( - {'RequireLowercaseCharacters': True if args.get('requireLowercaseCharacters') == 'True' else False}) + {'RequireLowercaseCharacters': args.get('requireLowercaseCharacters') == 'True'}) if args.get('allowUsersToChangePassword'): kwargs.update( - {'AllowUsersToChangePassword': True if args.get('allowUsersToChangePassword') == 'True' else False}) + {'AllowUsersToChangePassword': args.get('allowUsersToChangePassword') == 'True'}) if args.get('maxPasswordAge'): kwargs.update({'MaxPasswordAge': int(args.get('maxPasswordAge'))}) if args.get('passwordReusePrevention'): kwargs.update({'PasswordReusePrevention': int(args.get('passwordReusePrevention'))}) if args.get('hardExpiry'): - kwargs.update({'HardExpiry': True if args.get('hardExpiry') == 'True' else False}) + kwargs.update({'HardExpiry': args.get('hardExpiry') == 'True'}) response = client.update_account_password_policy(**kwargs) if response['ResponseMetadata']['HTTPStatusCode'] == 200: demisto.results("The Account Password Policy was updated") @@ -850,9 +852,9 @@ def list_user_policies(args, client): if policy_data: ec = {'AWS.IAM.UserPolicies(val.PolicyName && val.UserName && val.PolicyName === obj.PolicyName && ' 'val.UserName === obj.UserName)': policy_data, - 'AWS.IAM.Users(val.UserName === \'{}\').InlinePoliciesMarker'.format(user_name): marker} + f'AWS.IAM.Users(val.UserName === \'{user_name}\').InlinePoliciesMarker': marker} - human_readable = tableToMarkdown('AWS IAM Policies for user {}'.format(user_name), + human_readable = tableToMarkdown(f'AWS IAM Policies for user {user_name}', headers=["PolicyNames"], headerTransform=pascalToSpace, t=data) @@ -888,9 +890,9 @@ def list_attached_user_policies(args, client): if policy_data: ec = {'AWS.IAM.AttachedUserPolicies(val.PolicyArn && val.UserName && val.PolicyArn === obj.PolicyArn && ' 'val.UserName === obj.UserName)': policy_data, - 'AWS.IAM.Users(val.UserName === \'{}\').AttachedPoliciesMarker'.format(user_name): marker} + f'AWS.IAM.Users(val.UserName === \'{user_name}\').AttachedPoliciesMarker': marker} - human_readable = tableToMarkdown('AWS IAM Attached Policies for user {}'.format(user_name), + human_readable = tableToMarkdown(f'AWS IAM Attached Policies for user {user_name}', headers=['PolicyName', 'PolicyArn'], headerTransform=pascalToSpace, t=data) @@ -927,9 +929,9 @@ def list_attached_group_policies(args, client): if policy_data: ec = {'AWS.IAM.AttachedGroupPolicies(val.PolicyArn && val.GroupName && val.PolicyArn === obj.PolicyArn && ' 'val.GroupName === obj.GroupName)': policy_data, - 'AWS.IAM.Groups(val.GroupName === \'{}\').AttachedPoliciesMarker'.format(group_name): marker} + f'AWS.IAM.Groups(val.GroupName === \'{group_name}\').AttachedPoliciesMarker': marker} - human_readable = tableToMarkdown('AWS IAM Attached Policies for group {}'.format(group_name), + human_readable = tableToMarkdown(f'AWS IAM Attached Policies for group {group_name}', headers=['PolicyName', 'PolicyArn'], headerTransform=pascalToSpace, t=data) @@ -957,7 +959,7 @@ def get_user_login_profile(args, client): ec = {'AWS.IAM.Users(val.UserName && val.UserName === obj.UserName)': data} - human_readable = tableToMarkdown('AWS IAM Login Profile for user {}'.format(user_name), + human_readable = tableToMarkdown(f'AWS IAM Login Profile for user {user_name}', t=data.get('LoginProfile'), headers=['CreateDate', 'PasswordResetRequired'], removeNull=True, @@ -967,7 +969,7 @@ def get_user_login_profile(args, client): return_outputs(human_readable, ec, response) except botocore.exceptions.ClientError as error: if error.response.get('ResponseMetadata', {}).get('HTTPStatusCode') == 404: - return_outputs(tableToMarkdown('AWS IAM Login Profile for user {}'.format(user_name), t={})) + return_outputs(tableToMarkdown(f'AWS IAM Login Profile for user {user_name}', t={})) else: raise error @@ -1326,7 +1328,7 @@ def main(): # pragma: no cover ) try: - LOG('Command being called is {command}'.format(command=command)) + LOG(f'Command being called is {command}') if command == 'test-module': test_function(client) elif command == 'aws-iam-create-user': diff --git a/Packs/AWS-IAM/Integrations/AWS-IAM/AWS-IAM.yml b/Packs/AWS-IAM/Integrations/AWS-IAM/AWS-IAM.yml index 9916d200e04a..40101869dfe3 100644 --- a/Packs/AWS-IAM/Integrations/AWS-IAM/AWS-IAM.yml +++ b/Packs/AWS-IAM/Integrations/AWS-IAM/AWS-IAM.yml @@ -1609,7 +1609,7 @@ script: required: false description: Deletes a virtual MFA device. name: aws-iam-delete-mfa-devices - dockerimage: demisto/boto3py3:1.0.0.115129 + dockerimage: demisto/boto3py3:1.0.0.1894954 runonce: false script: '-' subtype: python3 diff --git a/Packs/AWS-IAM/ReleaseNotes/1_1_68.md b/Packs/AWS-IAM/ReleaseNotes/1_1_68.md new file mode 100644 index 000000000000..a662687883e6 --- /dev/null +++ b/Packs/AWS-IAM/ReleaseNotes/1_1_68.md @@ -0,0 +1,5 @@ +#### Integrations + +##### AWS - Identity and Access Management +- Code functionality improvements. +- Updated the Docker image to: *demisto/boto3py3:1.0.0.1894954*. \ No newline at end of file diff --git a/Packs/AWS-IAM/pack_metadata.json b/Packs/AWS-IAM/pack_metadata.json index f9aeedcca98f..db4fe884bbeb 100644 --- a/Packs/AWS-IAM/pack_metadata.json +++ b/Packs/AWS-IAM/pack_metadata.json @@ -3,7 +3,7 @@ "description": "Amazon Web Services Identity and Access Management (IAM)", "support": "xsoar", "author": "Cortex XSOAR", - "currentVersion": "1.1.67", + "currentVersion": "1.1.68", "url": "https://www.paloaltonetworks.com/cortex", "email": "", "created": "2020-04-14T00:00:00Z", diff --git a/Packs/AWS-IAMIdentityCenter/ReleaseNotes/1_0_7.md b/Packs/AWS-IAMIdentityCenter/ReleaseNotes/1_0_7.md new file mode 100644 index 000000000000..20e02feea9c7 --- /dev/null +++ b/Packs/AWS-IAMIdentityCenter/ReleaseNotes/1_0_7.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - IAM Identity Center +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-IAMIdentityCenter/pack_metadata.json b/Packs/AWS-IAMIdentityCenter/pack_metadata.json index 222bc5c02b57..0263e2a3e47f 100644 --- a/Packs/AWS-IAMIdentityCenter/pack_metadata.json +++ b/Packs/AWS-IAMIdentityCenter/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - IAM Identity Center", "description": "AWS IAM Identity Center\n\nWith AWS IAM Identity Center (successor to AWS Single Sign-On), you can manage sign-in security for your workforce identities, also known as workforce users. IAM Identity Center provides one place where you can create or connect workforce users and manage their access centrally across all their AWS accounts and applications. IAM Identity Center is the recommended approach for workforce authentication and authorization in AWS, for organizations of any size and type.", "support": "xsoar", - "currentVersion": "1.0.6", + "currentVersion": "1.0.7", "author": "Cortex XSOAR", "url": "", "email": "", diff --git a/Packs/AWS-ILM/Integrations/AWSILM/AWSILM.py b/Packs/AWS-ILM/Integrations/AWSILM/AWSILM.py index f9fc318a24d8..6f85694f6072 100644 --- a/Packs/AWS-ILM/Integrations/AWSILM/AWSILM.py +++ b/Packs/AWS-ILM/Integrations/AWSILM/AWSILM.py @@ -2,6 +2,7 @@ from CommonServerPython import * import traceback import urllib3 +from requests import Response # Disable insecure warnings urllib3.disable_warnings() @@ -62,7 +63,7 @@ def build_body_request_for_update_user(old_user_data, new_user_data): operations = [] for key, value in new_user_data.items(): operation = { - 'op': 'replace' if key in old_user_data.keys() else 'add', + 'op': 'replace' if key in old_user_data else 'add', 'path': key, 'value': [value] if key in ('emails', 'phoneNumbers') and not isinstance(value, list) else value, } @@ -491,6 +492,7 @@ def create_group_command(client, args): def update_group_command(client, args): + res = Response() scim = safe_load_json(args.get('scim')) group_id = scim.get('id') diff --git a/Packs/AWS-ILM/Integrations/AWSILM/AWSILM.yml b/Packs/AWS-ILM/Integrations/AWSILM/AWSILM.yml index 32fa40157eeb..9bbbb03e6753 100644 --- a/Packs/AWS-ILM/Integrations/AWSILM/AWSILM.yml +++ b/Packs/AWS-ILM/Integrations/AWSILM/AWSILM.yml @@ -347,7 +347,7 @@ script: type: Unknown description: Permanently removes a group. execution: true - dockerimage: demisto/python3:3.11.10.115186 + dockerimage: demisto/python3:3.11.10.116949 runonce: false script: '-' subtype: python3 diff --git a/Packs/AWS-ILM/ReleaseNotes/1_0_27.md b/Packs/AWS-ILM/ReleaseNotes/1_0_27.md new file mode 100644 index 000000000000..fae9efb6ccd1 --- /dev/null +++ b/Packs/AWS-ILM/ReleaseNotes/1_0_27.md @@ -0,0 +1,5 @@ +#### Integrations + +##### AWS - IAM (user lifecycle management) +- Code functionality improvements. +- Updated the Docker image to: *demisto/python3:3.11.10.116949*. \ No newline at end of file diff --git a/Packs/AWS-ILM/pack_metadata.json b/Packs/AWS-ILM/pack_metadata.json index 3e78ce7d11dd..66295d9d3ca0 100644 --- a/Packs/AWS-ILM/pack_metadata.json +++ b/Packs/AWS-ILM/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS-ILM", "description": "IAM Integration for AWS-ILM. This pack handles user account auto-provisioning", "support": "xsoar", - "currentVersion": "1.0.26", + "currentVersion": "1.0.27", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-Lambda/ReleaseNotes/1_3_11.md b/Packs/AWS-Lambda/ReleaseNotes/1_3_11.md new file mode 100644 index 000000000000..7f4b21327009 --- /dev/null +++ b/Packs/AWS-Lambda/ReleaseNotes/1_3_11.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - Lambda +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-Lambda/pack_metadata.json b/Packs/AWS-Lambda/pack_metadata.json index 255df38fd346..72137fbd35fe 100644 --- a/Packs/AWS-Lambda/pack_metadata.json +++ b/Packs/AWS-Lambda/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - Lambda", "description": "Amazon Web Services Serverless Compute service (lambda)", "support": "xsoar", - "currentVersion": "1.3.10", + "currentVersion": "1.3.11", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-NetworkFirewall/Integrations/AWS-NetworkFirewall/AWS-NetworkFirewall.py b/Packs/AWS-NetworkFirewall/Integrations/AWS-NetworkFirewall/AWS-NetworkFirewall.py index a624dfdace91..2b7abe4e94cf 100644 --- a/Packs/AWS-NetworkFirewall/Integrations/AWS-NetworkFirewall/AWS-NetworkFirewall.py +++ b/Packs/AWS-NetworkFirewall/Integrations/AWS-NetworkFirewall/AWS-NetworkFirewall.py @@ -85,6 +85,7 @@ def parse_tag_field(tags_str): def aws_session(service='network-firewall', region=None, roleArn=None, roleSessionName=None, roleSessionDuration=None, rolePolicy=None): + client = None kwargs = {} if roleArn and roleSessionName is not None: kwargs.update({ @@ -1047,6 +1048,7 @@ def main(): # pragma: no cover args = demisto.args() human_readable = None outputs = None + response = None try: LOG('Command being called is {command}'.format( command=demisto.command())) diff --git a/Packs/AWS-NetworkFirewall/Integrations/AWS-NetworkFirewall/AWS-NetworkFirewall.yml b/Packs/AWS-NetworkFirewall/Integrations/AWS-NetworkFirewall/AWS-NetworkFirewall.yml index 84c998d64250..7bbaa009b0d9 100644 --- a/Packs/AWS-NetworkFirewall/Integrations/AWS-NetworkFirewall/AWS-NetworkFirewall.yml +++ b/Packs/AWS-NetworkFirewall/Integrations/AWS-NetworkFirewall/AWS-NetworkFirewall.yml @@ -1521,7 +1521,7 @@ script: - contextPath: AWS-NetworkFirewall.SubnetChangeProtection description: A setting indicating whether the firewall is protected against changes to the subnet associations. Use this setting to protect against accidentally modifying the subnet associations for a firewall that is in use. When you create a firewall, the operation initializes this setting to TRUE. type: Unknown - dockerimage: demisto/boto3py3:1.0.0.115129 + dockerimage: demisto/boto3py3:1.0.0.1894954 runonce: false script: '-' subtype: python3 diff --git a/Packs/AWS-NetworkFirewall/ReleaseNotes/1_0_9.md b/Packs/AWS-NetworkFirewall/ReleaseNotes/1_0_9.md new file mode 100644 index 000000000000..36f22dc20e38 --- /dev/null +++ b/Packs/AWS-NetworkFirewall/ReleaseNotes/1_0_9.md @@ -0,0 +1,5 @@ +#### Integrations + +##### AWS Network Firewall +- Code functionality improvements. +- Updated the Docker image to: *demisto/boto3py3:1.0.0.1894954*. \ No newline at end of file diff --git a/Packs/AWS-NetworkFirewall/pack_metadata.json b/Packs/AWS-NetworkFirewall/pack_metadata.json index e6086f7ebcd0..e4063bdb6b9f 100644 --- a/Packs/AWS-NetworkFirewall/pack_metadata.json +++ b/Packs/AWS-NetworkFirewall/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - Network Firewall", "description": "Amazon Web Services Network Firewall", "support": "xsoar", - "currentVersion": "1.0.8", + "currentVersion": "1.0.9", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-Organizations/ReleaseNotes/1_0_6.md b/Packs/AWS-Organizations/ReleaseNotes/1_0_6.md new file mode 100644 index 000000000000..849c213225d1 --- /dev/null +++ b/Packs/AWS-Organizations/ReleaseNotes/1_0_6.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - Organizations +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-Organizations/pack_metadata.json b/Packs/AWS-Organizations/pack_metadata.json index fa3671f75988..abc6f07b8ccb 100644 --- a/Packs/AWS-Organizations/pack_metadata.json +++ b/Packs/AWS-Organizations/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS Organizations", "description": "AWS Organizations offers policy-based management for multiple AWS accounts.", "support": "xsoar", - "currentVersion": "1.0.5", + "currentVersion": "1.0.6", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-Route53/ReleaseNotes/1_1_38.md b/Packs/AWS-Route53/ReleaseNotes/1_1_38.md new file mode 100644 index 000000000000..e7beeeeffda5 --- /dev/null +++ b/Packs/AWS-Route53/ReleaseNotes/1_1_38.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - Route53 +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-Route53/pack_metadata.json b/Packs/AWS-Route53/pack_metadata.json index 3810aefde91f..8d57e6fe3a4e 100644 --- a/Packs/AWS-Route53/pack_metadata.json +++ b/Packs/AWS-Route53/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - Route53", "description": "Amazon Web Services Managed Cloud DNS Service.", "support": "xsoar", - "currentVersion": "1.1.37", + "currentVersion": "1.1.38", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-S3/ReleaseNotes/1_2_29.md b/Packs/AWS-S3/ReleaseNotes/1_2_29.md new file mode 100644 index 000000000000..01bdee8a03b4 --- /dev/null +++ b/Packs/AWS-S3/ReleaseNotes/1_2_29.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - S3 +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-S3/pack_metadata.json b/Packs/AWS-S3/pack_metadata.json index f189c0c48b8d..e8266895ca70 100644 --- a/Packs/AWS-S3/pack_metadata.json +++ b/Packs/AWS-S3/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - S3", "description": "Amazon Web Services Simple Storage Service (S3)", "support": "xsoar", - "currentVersion": "1.2.28", + "currentVersion": "1.2.29", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-SNS/ReleaseNotes/1_0_20.md b/Packs/AWS-SNS/ReleaseNotes/1_0_20.md new file mode 100644 index 000000000000..48eabcfb90c2 --- /dev/null +++ b/Packs/AWS-SNS/ReleaseNotes/1_0_20.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - SNS +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-SNS/pack_metadata.json b/Packs/AWS-SNS/pack_metadata.json index b687c87f8b69..9bf3c3de9699 100644 --- a/Packs/AWS-SNS/pack_metadata.json +++ b/Packs/AWS-SNS/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - SNS", "description": "This is the integration content pack which can create or delete topic/subscription on AWS Simple Notification System and send the message via SNS as well.", "support": "xsoar", - "currentVersion": "1.0.19", + "currentVersion": "1.0.20", "author": "Jie Liau", "url": "", "email": "", diff --git a/Packs/AWS-SQS/ReleaseNotes/1_2_30.md b/Packs/AWS-SQS/ReleaseNotes/1_2_30.md new file mode 100644 index 000000000000..63ea408fa306 --- /dev/null +++ b/Packs/AWS-SQS/ReleaseNotes/1_2_30.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - SQS +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-SQS/pack_metadata.json b/Packs/AWS-SQS/pack_metadata.json index 9405d05c2ad8..07409efeeae5 100644 --- a/Packs/AWS-SQS/pack_metadata.json +++ b/Packs/AWS-SQS/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - SQS", "description": "Amazon Web Services Simple Queuing Service (SQS)", "support": "xsoar", - "currentVersion": "1.2.29", + "currentVersion": "1.2.30", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-SecurityHub/ReleaseNotes/1_3_41.md b/Packs/AWS-SecurityHub/ReleaseNotes/1_3_41.md new file mode 100644 index 000000000000..3256ad5386b1 --- /dev/null +++ b/Packs/AWS-SecurityHub/ReleaseNotes/1_3_41.md @@ -0,0 +1,7 @@ +#### Integrations + +##### AWS - Security Hub +Code functionality improvements. + +##### AWS Security Hub Event Collector +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-SecurityHub/pack_metadata.json b/Packs/AWS-SecurityHub/pack_metadata.json index a743b6ca992a..650702bf7504 100644 --- a/Packs/AWS-SecurityHub/pack_metadata.json +++ b/Packs/AWS-SecurityHub/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS - Security Hub", "description": "Amazon Web Services Security Hub Service.", "support": "xsoar", - "currentVersion": "1.3.40", + "currentVersion": "1.3.41", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS-SecurityLake/ReleaseNotes/1_0_13.md b/Packs/AWS-SecurityLake/ReleaseNotes/1_0_13.md new file mode 100644 index 000000000000..fab55b5e44cc --- /dev/null +++ b/Packs/AWS-SecurityLake/ReleaseNotes/1_0_13.md @@ -0,0 +1,4 @@ +#### Integrations + +##### Amazon Security Lake +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS-SecurityLake/pack_metadata.json b/Packs/AWS-SecurityLake/pack_metadata.json index be3ae8ccab0c..904ee21e397c 100644 --- a/Packs/AWS-SecurityLake/pack_metadata.json +++ b/Packs/AWS-SecurityLake/pack_metadata.json @@ -2,7 +2,7 @@ "name": "Amazon - Security Lake", "description": "Amazon Security Lake is a fully managed security data lake service.", "support": "xsoar", - "currentVersion": "1.0.12", + "currentVersion": "1.0.13", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS_DynamoDB/Integrations/AWS_DynamoDB/AWS_DynamoDB.py b/Packs/AWS_DynamoDB/Integrations/AWS_DynamoDB/AWS_DynamoDB.py index 1432ff6d62b4..4dde18d9c1d9 100644 --- a/Packs/AWS_DynamoDB/Integrations/AWS_DynamoDB/AWS_DynamoDB.py +++ b/Packs/AWS_DynamoDB/Integrations/AWS_DynamoDB/AWS_DynamoDB.py @@ -79,6 +79,7 @@ def parse_tag_field(tags_str): def aws_session(service='dynamodb', region=None, roleArn=None, roleSessionName=None, roleSessionDuration=None, rolePolicy=None): + client = None kwargs = {} if roleArn and roleSessionName is not None: kwargs.update({ diff --git a/Packs/AWS_DynamoDB/Integrations/AWS_DynamoDB/AWS_DynamoDB.yml b/Packs/AWS_DynamoDB/Integrations/AWS_DynamoDB/AWS_DynamoDB.yml index bcb70d025bdc..689952b166a6 100644 --- a/Packs/AWS_DynamoDB/Integrations/AWS_DynamoDB/AWS_DynamoDB.yml +++ b/Packs/AWS_DynamoDB/Integrations/AWS_DynamoDB/AWS_DynamoDB.yml @@ -2998,7 +2998,7 @@ script: description: The name of the TTL attribute used to store the expiration time for items in the table. - contextPath: AWS-DynamoDB.TimeToLiveSpecification description: Represents the output of an UpdateTimeToLive operation. - dockerimage: demisto/boto3py3:1.0.0.115129 + dockerimage: demisto/boto3py3:1.0.0.1894954 script: '' subtype: python3 type: python diff --git a/Packs/AWS_DynamoDB/ReleaseNotes/1_0_36.md b/Packs/AWS_DynamoDB/ReleaseNotes/1_0_36.md new file mode 100644 index 000000000000..17113cb788b5 --- /dev/null +++ b/Packs/AWS_DynamoDB/ReleaseNotes/1_0_36.md @@ -0,0 +1,5 @@ +#### Integrations + +##### Amazon DynamoDB +- Code functionality improvements. +- Updated the Docker image to: *demisto/boto3py3:1.0.0.1894954*. \ No newline at end of file diff --git a/Packs/AWS_DynamoDB/TestPlaybooks/playbook-AWS-DynamoDB-Test.yml b/Packs/AWS_DynamoDB/TestPlaybooks/playbook-AWS-DynamoDB-Test.yml index a3bcbcf49e03..365401e70ecb 100644 --- a/Packs/AWS_DynamoDB/TestPlaybooks/playbook-AWS-DynamoDB-Test.yml +++ b/Packs/AWS_DynamoDB/TestPlaybooks/playbook-AWS-DynamoDB-Test.yml @@ -381,7 +381,7 @@ tasks: brand: "" nexttasks: '#none#': - - "12" + - "24" scriptarguments: resource_arn: simple: ${TableArn} @@ -423,7 +423,7 @@ tasks: brand: "" nexttasks: '#none#': - - "16" + - "25" scriptarguments: resource_arn: simple: ${TableArn} @@ -435,7 +435,7 @@ tasks: { "position": { "x": 265, - "y": 2645 + "y": 2820 } } note: false @@ -472,7 +472,7 @@ tasks: { "position": { "x": 480, - "y": 2120 + "y": 2295 } } note: false @@ -517,7 +517,7 @@ tasks: { "position": { "x": 480, - "y": 2295 + "y": 2470 } } note: false @@ -561,7 +561,7 @@ tasks: { "position": { "x": 265, - "y": 2995 + "y": 3345 } } note: false @@ -633,7 +633,7 @@ tasks: { "position": { "x": 265, - "y": 2820 + "y": 3170 } } note: false @@ -670,7 +670,7 @@ tasks: { "position": { "x": 265, - "y": 2470 + "y": 2645 } } note: false @@ -697,7 +697,7 @@ tasks: { "position": { "x": 480, - "y": 3185 + "y": 3535 } } note: false @@ -729,7 +729,7 @@ tasks: { "position": { "x": 50, - "y": 3170 + "y": 3520 } } note: false @@ -761,7 +761,7 @@ tasks: { "position": { "x": 695, - "y": 2470 + "y": 2645 } } note: false @@ -866,15 +866,85 @@ tasks: brand: "" scriptarguments: message: - simple: In the TPB, we rely on a resource ARN (which most of the - times is number 12) which ends with 'c' but got another. + simple: In the TPB, we rely on a resource ARN (which most of the times is + number 12) which ends with 'c' but got another. separatecontext: false continueonerrortype: "" view: |- { "position": { - "x": 990, - "y": 1340 + "x": 910, + "y": 1245 + } + } + note: false + timertriggers: [] + ignoreworker: false + skipunavailable: false + quietmode: 0 + isoversize: false + isautoswitchedtoquietmode: false + "24": + id: "24" + taskid: 1e1bd75b-1824-4a7c-81dc-57c06b3244ef + type: regular + task: + id: 1e1bd75b-1824-4a7c-81dc-57c06b3244ef + version: -1 + name: sleep + description: Sleep for X seconds. + scriptName: Sleep + type: regular + iscommand: false + brand: "" + nexttasks: + '#none#': + - "12" + scriptarguments: + seconds: + simple: "5" + separatecontext: false + continueonerrortype: "" + view: |- + { + "position": { + "x": 480, + "y": 2120 + } + } + note: false + timertriggers: [] + ignoreworker: false + skipunavailable: false + quietmode: 0 + isoversize: false + isautoswitchedtoquietmode: false + "25": + id: "25" + taskid: 77a86692-ae6d-4193-89e0-38eb69c216f7 + type: regular + task: + id: 77a86692-ae6d-4193-89e0-38eb69c216f7 + version: -1 + name: sleep + description: Sleep for X seconds. + scriptName: Sleep + type: regular + iscommand: false + brand: "" + nexttasks: + '#none#': + - "16" + scriptarguments: + seconds: + simple: "5" + separatecontext: false + continueonerrortype: "" + view: |- + { + "position": { + "x": 265, + "y": 2995 } } note: false @@ -889,8 +959,8 @@ view: |- "linkLabelsPosition": {}, "paper": { "dimensions": { - "height": 3215, - "width": 1320, + "height": 3565, + "width": 1240, "x": 50, "y": 50 } @@ -898,5 +968,5 @@ view: |- } inputs: [] outputs: [] -fromversion: 5.0.0 -description: '' +dirtyInputs: true +fromversion: 5.0.0 \ No newline at end of file diff --git a/Packs/AWS_DynamoDB/pack_metadata.json b/Packs/AWS_DynamoDB/pack_metadata.json index 0aa2ac558ad4..2c73243a576e 100644 --- a/Packs/AWS_DynamoDB/pack_metadata.json +++ b/Packs/AWS_DynamoDB/pack_metadata.json @@ -2,7 +2,7 @@ "name": "Amazon DynamoDB", "description": "Amazon DynamoDB Amazon DynamoDB is a fully managed NoSQL database service that provides fast and predictable performance with seamless scalability. DynamoDB lets you offload the administrative burdens of operating and scaling a distributed database, so that you don't have to worry about hardware provisioning, setup and configuration, replication, software patching, or cluster scaling. With DynamoDB, you can create database tables that can store and retrieve any amount of data, and serve any level of request traffic. You can scale up or scale down your tables' throughput capacity without downtime or performance degradation, and use the AWS Management Console to monitor resource utilization and performance metrics. DynamoDB automatically spreads the data and traffic for your tables over a sufficient number of servers to handle your throughput and storage requirements, while maintaining consistent and fast performance. All of your data is stored on solid state disks (SSDs) and automatically replicated across multiple Availability Zones in an AWS region, providing built-in high availability and data durability. ", "support": "xsoar", - "currentVersion": "1.0.35", + "currentVersion": "1.0.36", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS_SystemManager/ReleaseNotes/1_0_9.md b/Packs/AWS_SystemManager/ReleaseNotes/1_0_9.md new file mode 100644 index 000000000000..e1e883003c3c --- /dev/null +++ b/Packs/AWS_SystemManager/ReleaseNotes/1_0_9.md @@ -0,0 +1,4 @@ +#### Integrations + +##### AWS - System Manager +Code functionality improvements. \ No newline at end of file diff --git a/Packs/AWS_SystemManager/pack_metadata.json b/Packs/AWS_SystemManager/pack_metadata.json index e17a092a28a7..57b1fe6f7d1f 100644 --- a/Packs/AWS_SystemManager/pack_metadata.json +++ b/Packs/AWS_SystemManager/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS Systems Manager", "description": "AWS Systems Manager is the operations hub for your AWS applications and resources and a secure end-to-end management solution for hybrid cloud environments that enables safe and secure operations at scale.", "support": "xsoar", - "currentVersion": "1.0.8", + "currentVersion": "1.0.9", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/AWS_WAF/Integrations/AWSWAF/AWSWAF.yml b/Packs/AWS_WAF/Integrations/AWSWAF/AWSWAF.yml index c878a1d16bde..0115fb3e41c3 100644 --- a/Packs/AWS_WAF/Integrations/AWSWAF/AWSWAF.yml +++ b/Packs/AWS_WAF/Integrations/AWSWAF/AWSWAF.yml @@ -1743,7 +1743,7 @@ script: script: '-' type: python subtype: python3 - dockerimage: demisto/boto3py3:1.0.0.1865449 + dockerimage: demisto/boto3py3:1.0.0.1894954 fromversion: 6.5.0 tests: - No tests (auto formatted) diff --git a/Packs/AWS_WAF/ReleaseNotes/1_0_12.md b/Packs/AWS_WAF/ReleaseNotes/1_0_12.md new file mode 100644 index 000000000000..0a6759dbbf39 --- /dev/null +++ b/Packs/AWS_WAF/ReleaseNotes/1_0_12.md @@ -0,0 +1,5 @@ +#### Integrations + +##### AWS-WAF +- Code functionality improvements. +- Updated the Docker image to: *demisto/boto3py3:1.0.0.1894954*. \ No newline at end of file diff --git a/Packs/AWS_WAF/pack_metadata.json b/Packs/AWS_WAF/pack_metadata.json index bb1667af7596..b253cdeebe13 100644 --- a/Packs/AWS_WAF/pack_metadata.json +++ b/Packs/AWS_WAF/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS WAF", "description": "Amazon Web Services Web Application Firewall (WAF)", "support": "xsoar", - "currentVersion": "1.0.11", + "currentVersion": "1.0.12", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/ApiModules/ReleaseNotes/2_2_37.md b/Packs/ApiModules/ReleaseNotes/2_2_37.md new file mode 100644 index 000000000000..3abf74cd7b3f --- /dev/null +++ b/Packs/ApiModules/ReleaseNotes/2_2_37.md @@ -0,0 +1,4 @@ +#### Scripts + +##### AWSApiModule +Code functionality improvements. \ No newline at end of file diff --git a/Packs/ApiModules/Scripts/AWSApiModule/AWSApiModule.py b/Packs/ApiModules/Scripts/AWSApiModule/AWSApiModule.py index 3391755913bf..e897c7c6e8b5 100644 --- a/Packs/ApiModules/Scripts/AWSApiModule/AWSApiModule.py +++ b/Packs/ApiModules/Scripts/AWSApiModule/AWSApiModule.py @@ -63,9 +63,9 @@ def __init__(self, aws_default_region, aws_role_arn, aws_role_session_name, aws_ self.config = Config( connect_timeout=connect_timeout, read_timeout=read_timeout, - retries=dict( - max_attempts=int(retries) - ), + retries={ + "max_attempts": int(retries) + }, proxies=proxies ) @@ -73,7 +73,7 @@ def update_config(self): command_config = {} retries = demisto.getArg('retries') # Supports retries and timeout parameters on the command execution level if retries is not None: - command_config['retries'] = dict(max_attempts=int(retries)) + command_config['retries'] = {"max_attempts": int(retries)} timeout = demisto.getArg('timeout') if timeout is not None: (read_timeout, connect_timeout) = AWSClient.get_timeout(timeout) @@ -86,6 +86,7 @@ def update_config(self): def aws_session(self, service, region=None, role_arn=None, role_session_name=None, role_session_duration=None, role_policy=None): kwargs = {} + client = None self.update_config() diff --git a/Packs/ApiModules/Scripts/AWSApiModule/AWSApiModule_test.py b/Packs/ApiModules/Scripts/AWSApiModule/AWSApiModule_test.py index ed42a3a83cbd..57519de3af99 100644 --- a/Packs/ApiModules/Scripts/AWSApiModule/AWSApiModule_test.py +++ b/Packs/ApiModules/Scripts/AWSApiModule/AWSApiModule_test.py @@ -95,15 +95,20 @@ def test_get_timeout(): - validates the logic of setting read_timeout and connect_timeout values """ (read, connect) = AWSClient.get_timeout(None) - assert read == 60 and connect == 10 + assert read == 60 + assert connect == 10 (read, connect) = AWSClient.get_timeout("100") - assert read == 100 and connect == 10 + assert read == 100 + assert connect == 10 (read, connect) = AWSClient.get_timeout("200,2") - assert read == 200 and connect == 2 + assert read == 200 + assert connect == 2 (read, connect) = AWSClient.get_timeout(60) - assert read == 60 and connect == 10 - (read, connect) = AWSClient.get_timeout(u"60, 10") # testing for unicode variable - assert read == 60 and connect == 10 + assert read == 60 + assert connect == 10 + (read, connect) = AWSClient.get_timeout("60, 10") # testing for unicode variable + assert read == 60 + assert connect == 10 def test_AWSClient_with_session_token(): diff --git a/Packs/ApiModules/pack_metadata.json b/Packs/ApiModules/pack_metadata.json index 6a085fcadaee..38a715c26d0a 100644 --- a/Packs/ApiModules/pack_metadata.json +++ b/Packs/ApiModules/pack_metadata.json @@ -2,7 +2,7 @@ "name": "ApiModules", "description": "API Modules", "support": "xsoar", - "currentVersion": "2.2.36", + "currentVersion": "2.2.37", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "", diff --git a/Packs/Aws-SecretsManager/ReleaseNotes/1_0_46.md b/Packs/Aws-SecretsManager/ReleaseNotes/1_0_46.md new file mode 100644 index 000000000000..a2ba6bb63fb4 --- /dev/null +++ b/Packs/Aws-SecretsManager/ReleaseNotes/1_0_46.md @@ -0,0 +1,4 @@ +#### Integrations + +##### Aws Secrets Manager +Code functionality improvements. \ No newline at end of file diff --git a/Packs/Aws-SecretsManager/pack_metadata.json b/Packs/Aws-SecretsManager/pack_metadata.json index 5babff98d583..0fb9312dac9d 100644 --- a/Packs/Aws-SecretsManager/pack_metadata.json +++ b/Packs/Aws-SecretsManager/pack_metadata.json @@ -2,7 +2,7 @@ "name": "AWS Secrets Manager", "description": "AWS Secrets Manager helps you to securely encrypt, store, and retrieve credentials for your databases and other services.", "support": "xsoar", - "currentVersion": "1.0.45", + "currentVersion": "1.0.46", "author": "Cortex XSOAR", "url": "https://www.paloaltonetworks.com/cortex", "email": "",