Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update scripts in CommonScripts to support python3 #20999

Merged
merged 80 commits into from Sep 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
b248f98
convert from python2 to python3
michal-dagan Sep 6, 2022
55f7bcf
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 6, 2022
8eef06a
fix file
michal-dagan Sep 6, 2022
a6e13f9
Convert from python2 to python3
michal-dagan Sep 7, 2022
8c7d2f6
delete the previous files
michal-dagan Sep 7, 2022
e5c5991
update the dockerimage and test to support python3
michal-dagan Sep 7, 2022
5f60dcf
convert to python3
michal-dagan Sep 7, 2022
92fc653
Merge remote-tracking branch 'origin/master' into SendEmailOnSLABreach
michal-dagan Sep 7, 2022
2b47d11
update releaseNote
michal-dagan Sep 7, 2022
71b3e7d
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 7, 2022
faa3ba7
update test and ReleaseNote
michal-dagan Sep 7, 2022
b949adf
Merge remote-tracking branch 'origin/master' into ResolveShortenedURL
michal-dagan Sep 7, 2022
501dfb3
update test
michal-dagan Sep 7, 2022
322ec70
Merge branch 'master' into FileToBase64List
michal-dagan Sep 7, 2022
aec31dd
Merge branch 'master' into MaliciousRatioReputation
michal-dagan Sep 7, 2022
0ebc0ee
Merge branch 'master' into SendEmailOnSLABreach
michal-dagan Sep 7, 2022
13db387
convert from python2 to python3
michal-dagan Sep 7, 2022
f5c385b
Merge remote-tracking branch 'origin/master' into DisplayHTML
michal-dagan Sep 7, 2022
ea3d685
update dockerimage
michal-dagan Sep 7, 2022
58af20e
Merge branch 'master' into FileToBase64List
michal-dagan Sep 7, 2022
c5de2e7
Merge branch 'master' into MaliciousRatioReputation
michal-dagan Sep 7, 2022
bd585ea
update to requests library from urllib.request
michal-dagan Sep 7, 2022
0236e89
Merge remote-tracking branch 'origin/master' into FileToBase64List
michal-dagan Sep 8, 2022
2823447
fix decode()
michal-dagan Sep 8, 2022
aacd3db
update releaseNotes
michal-dagan Sep 8, 2022
55d7374
Merge remote-tracking branch 'origin/FileToBase64List' into FileToBas…
michal-dagan Sep 8, 2022
fbbc802
Merge remote-tracking branch 'origin/master' into ResolveShortenedURL
michal-dagan Sep 8, 2022
de5d288
add verify argument
michal-dagan Sep 8, 2022
9ac373a
add insecure argument
michal-dagan Sep 8, 2022
7caaa4f
Merge branch 'master' into FileToBase64List
michal-dagan Sep 8, 2022
5433b7b
add defaultValue
michal-dagan Sep 8, 2022
d991538
Merge branch 'master' into MaliciousRatioReputation
michal-dagan Sep 8, 2022
cf3f765
Merge branch 'master' into DisplayHTML
michal-dagan Sep 8, 2022
425c1b3
Merge remote-tracking branch 'origin/master' into DisplayHTML
michal-dagan Sep 11, 2022
a1568de
update release note
michal-dagan Sep 11, 2022
a282303
Merge remote-tracking branch 'origin/DisplayHTML' into DisplayHTML
michal-dagan Sep 11, 2022
274ce95
Merge remote-tracking branch 'origin/master' into SendEmailOnSLABreach
michal-dagan Sep 11, 2022
3ae2750
Merge remote-tracking branch 'origin/SendEmailOnSLABreach' into SendE…
michal-dagan Sep 11, 2022
927d83f
update release note
michal-dagan Sep 11, 2022
88b79b7
Merge remote-tracking branch 'origin/master' into FileToBase64List
michal-dagan Sep 11, 2022
a7295a6
update release note
michal-dagan Sep 11, 2022
fc7628d
Merge remote-tracking branch 'origin/FileToBase64List' into FileToBas…
michal-dagan Sep 11, 2022
61f42bf
Merge remote-tracking branch 'origin/master' into ResolveShortenedURL
michal-dagan Sep 11, 2022
a4166c9
update release note
michal-dagan Sep 11, 2022
609e776
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 11, 2022
5446158
update release note
michal-dagan Sep 11, 2022
8212911
Merge remote-tracking branch 'origin/MaliciousRatioReputation' into M…
michal-dagan Sep 11, 2022
a931767
Merge branch 'master' into MaliciousRatioReputation
michal-dagan Sep 11, 2022
37e23db
Merge remote-tracking branch 'origin/master' into DisplayHTML
michal-dagan Sep 11, 2022
7e89f8f
fix lint
michal-dagan Sep 11, 2022
1681818
Merge branch 'master' into FileToBase64List
michal-dagan Sep 11, 2022
35fc266
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 12, 2022
15d4bdc
update tests
michal-dagan Sep 12, 2022
afe95d5
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 13, 2022
205d9ad
update dockerimage
michal-dagan Sep 13, 2022
89090dc
Merge remote-tracking branch 'origin/master' into FileToBase64List
michal-dagan Sep 13, 2022
745ce42
update dockerimage
michal-dagan Sep 13, 2022
60b4bea
Merge remote-tracking branch 'origin/FileToBase64List' into FileToBas…
michal-dagan Sep 13, 2022
f35253c
Merge branch 'DisplayHTML' into MaliciousRatioReputation
michal-dagan Sep 13, 2022
e71b91c
Merge branch 'SendEmailOnSLABreach' into MaliciousRatioReputation
michal-dagan Sep 13, 2022
7ca54c9
Merge branch 'ResolveShortenedURL' into MaliciousRatioReputation
michal-dagan Sep 13, 2022
3411eb4
merge branches and update dockerimages
michal-dagan Sep 13, 2022
7aacbd3
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 13, 2022
9ef6c04
revert changes
michal-dagan Sep 13, 2022
c41bbb5
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 13, 2022
3052dcd
update version
michal-dagan Sep 13, 2022
32a23b8
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 13, 2022
94d3993
fix type
michal-dagan Sep 13, 2022
31e244d
fix type
michal-dagan Sep 13, 2022
0923528
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 13, 2022
b52a69f
Merge remote-tracking branch 'origin/MaliciousRatioReputation' into M…
michal-dagan Sep 13, 2022
e3f5042
Merge branch 'master' into MaliciousRatioReputation
michal-dagan Sep 14, 2022
57b5e7a
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 21, 2022
147bf2a
update ReleaseNotes
michal-dagan Sep 21, 2022
a73a699
Merge remote-tracking branch 'origin/MaliciousRatioReputation' into M…
michal-dagan Sep 21, 2022
2a65f22
Merge branch 'master' into MaliciousRatioReputation
michal-dagan Sep 21, 2022
e03e6f3
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 21, 2022
a294ab0
update ReleaseNotes
michal-dagan Sep 21, 2022
bb508c0
Merge remote-tracking branch 'origin/master' into MaliciousRatioReput…
michal-dagan Sep 22, 2022
d91a208
Update currentVersion
michal-dagan Sep 22, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
17 changes: 17 additions & 0 deletions Packs/CommonScripts/ReleaseNotes/1_7_65.md
@@ -0,0 +1,17 @@

#### Scripts
##### MaliciousRatioReputation
- Updated the Docker image to: *demisto/python3:3.10.7.33922*.

##### DisplayHTML
- Updated the Docker image to: *demisto/python3:3.10.7.33922*.

##### SendEmailOnSLABreach
- Updated the Docker image to: *demisto/python3:3.10.7.33922*.

##### ResolveShortenedURL
- Updated the Docker image to: *demisto/python3:3.10.7.33922*.
- Added support for the *insecure* argument.

##### FileToBase64List
- Updated the Docker image to: *demisto/python3:3.10.7.33922*.
23 changes: 23 additions & 0 deletions Packs/CommonScripts/Scripts/DisplayHTML/DisplayHTML.py
@@ -0,0 +1,23 @@
import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401


def main():
html = demisto.args().get("html")
note = demisto.args().get("markAsNote")
header = demisto.args().get("header")

note = True if note and note.lower() == "true" else False
if header:
html = "<h1>{0}</h1></br>{1}".format(header, html)

demisto.results({
'ContentsFormat': formats['html'],
'Type': entryTypes['note'],
'Contents': html,
'Note': note
})


if __name__ == "__builtin__" or __name__ == "builtins":
main()
28 changes: 28 additions & 0 deletions Packs/CommonScripts/Scripts/DisplayHTML/DisplayHTML.yml
@@ -0,0 +1,28 @@
commonfields:
id: DisplayHTML
version: -1
name: DisplayHTML
script: ''
type: python
subtype: python3
tags: []
comment: Display HTML in the War Room.
system: true
args:
- name: html
required: true
description: The HTML to display
- name: markAsNote
auto: PREDEFINED
predefined:
- "true"
- "false"
description: Should the entry be marked as a note?
- name: header
description: Add a header text to the output
scripttarget: 0
runonce: false
fromversion: 6.5.0
dockerimage: demisto/python3:3.10.7.33922
tests:
- No tests (auto formatted)
23 changes: 23 additions & 0 deletions Packs/CommonScripts/Scripts/DisplayHTML/DisplayHTML_test.py
@@ -0,0 +1,23 @@
import demistomock as demisto
from CommonServerPython import *


def test_DisplayHTML(mocker):
"""
Given:
- The script args.
When:
- Running the DisplayHTML script.
Then:
- Validating the results after manipulating the given data.
"""
from DisplayHTML import main
mocker.patch.object(demisto, 'args', return_value={'html': 'html', 'markAsNote': 'True', "header": "header"})
results_mock = mocker.patch.object(demisto, 'results')
main()
results_mock.assert_called_once()
results = results_mock.call_args[0][0]
assert results == {'Contents': '<h1>header</h1></br>html',
'ContentsFormat': 'html',
'Note': True,
'Type': EntryType.NOTE}
Expand Up @@ -11,7 +11,7 @@ def get_file_data(file_path, zip=False):
if zip:
data = zlib.compress(data)

return base64.b64encode(data)
return base64.b64encode(data).decode('utf-8')


def main():
Expand Down Expand Up @@ -42,5 +42,5 @@ def main():
}


if __name__ == "__builtin__" or __name__ == '__main__':
if __name__ in ('__main__', '__builtin__', 'builtins'):
demisto.results(main())
Expand Up @@ -36,10 +36,10 @@ tags:
- list
timeout: '0'
type: python
subtype: python2
subtype: python3
runas: DBotWeakRole
runonce: true
tests:
- No Test
fromversion: 5.0.0
dockerimage: demisto/python:2.7.18.27799
dockerimage: demisto/python3:3.10.7.33922
Expand Up @@ -38,6 +38,6 @@ def test_file_to_base64_list(mocker):

def test_get_file_data(mocker):
data = get_file_data(TEST_FILE_PATH)
assert base64.b64decode(data).strip() == "this is a test file"
assert base64.b64decode(data).strip() == b"this is a test file"
data = get_file_data(TEST_FILE_PATH, True)
assert zlib.decompress(base64.b64decode(data)).strip() == "this is a test file"
assert zlib.decompress(base64.b64decode(data)).strip() == b"this is a test file"
@@ -0,0 +1,48 @@
import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401


def get_indicator_from_value(indicator_value):
try:
res = demisto.executeCommand("findIndicators", {'value': indicator_value})
indicator = res[0]['Contents'][0]
return indicator
except Exception:
pass


def get_indicator_result(indicator):
res = demisto.executeCommand("maliciousRatio", {'value': indicator['value']})

mr_score = res[0]['Contents'][0]['maliciousRatio']
if mr_score > float(demisto.args()['threshold']):
ec = {}
ec['DBotScore'] = {
'Type': indicator['indicator_type'].lower(),
'Score': 2, # suspicious
'Vendor': 'DBot-MaliciousRatio',
'Indicator': indicator['value']
}
entry = {
'Type': entryTypes['note'],
'EntryContext': ec,
'Contents': ec['DBotScore']['Score'],
'ContentsFormat': formats['text'],
'HumanReadable': 'Malicious ratio for %s is %.2f' % (indicator['value'], mr_score),
'ReadableContentsFormat': formats['markdown']
}
return entry


def main():
indicator_value = demisto.args().get('input')
indicator = get_indicator_from_value(indicator_value)
if indicator:
try:
demisto.results(get_indicator_result(indicator))
except Exception:
pass


if __name__ == "__builtin__" or __name__ == "builtins":
main()
@@ -0,0 +1,25 @@
commonfields:
id: MaliciousRatioReputation
version: -1
name: MaliciousRatioReputation
fromversion: "6.5.0"
script: ''
type: python
subtype: python3
tags:
- reputation
comment: |-
Set indicator reputation to "suspicious" when malicious ratio is above threshold.
Malicious ratio is the ration between number of "bad" incidents to total number of incidents the indicator appears in.
enabled: true
args:
- name: input
description: Value of the indicator.
- name: threshold
description: 'Malicious ratio threshold to set indicator as suspicious. '
defaultValue: "0.3"
scripttarget: 0
runonce: false
dockerimage: demisto/python3:3.10.7.33922
tests:
- No tests (auto formatted)
@@ -0,0 +1,87 @@
import demistomock as demisto


def test_main_malicious_ratio_reputation(mocker):
"""
Given:
- The script args.
When:
- Running the main with valid indicator.
Then:
- Validating after calling the helper functions the results is as expected.
"""
import MaliciousRatioReputation
args = {'input': 'value_a', 'threshold': '-2'}
mocker.patch.object(demisto, 'args', return_value=args)
mocker.patch.object(MaliciousRatioReputation, 'get_indicator_from_value',
return_value={'value': 'value_a', 'indicator_type': 'IP'})
res_get_indicator_result = {'Type': 1, 'EntryContext': {'DBotScore': {'Type': 'ip',
'Score': 2, 'Vendor': 'DBot-MaliciousRatio',
'Indicator': 'value_a'}},
'Contents': 2,
'ContentsFormat': 'text',
'HumanReadable': 'Malicious ratio for value_a is -1.00',
'ReadableContentsFormat': 'markdown'}
mocker.patch.object(MaliciousRatioReputation, 'get_indicator_result',
return_value=res_get_indicator_result)
res_mock = mocker.patch.object(demisto, 'results')
MaliciousRatioReputation.main()
assert res_mock.call_count == 1
assert res_mock.call_args[0][0] == res_get_indicator_result


def test_get_indicator_result(mocker):
"""
Given:
- The script args and indicator with mr_score > given threshold.
When:
- Running the get_indicator_result function.
Then:
- Validating that the function returns entry to the context.
"""
from MaliciousRatioReputation import get_indicator_result
args = {'input': '8.8.8.8', 'threshold': '-2'}
mocker.patch.object(demisto, 'args', return_value=args)
indicator = {'value': '8.8.8.8', 'indicator_type': 'IP'}
execute_command_res = [{'Contents': [{'maliciousRatio': -1}]}]
execute_mock = mocker.patch.object(demisto, 'executeCommand', return_value=execute_command_res)
entry = get_indicator_result(indicator)
assert execute_mock.call_count == 1
assert len(entry['EntryContext']) > 0


def test_get_indicator_result_with_smaller_mr_score(mocker):
"""
Given:
- The script args and indicator with mr_score < given threshold.
When:
- Running the get_indicator_result function.
Then:
- Validating that the function doesn't return entry.
"""
from MaliciousRatioReputation import get_indicator_result
mocker.patch.object(demisto, 'args', return_value={'input': '8.8.8.8', 'threshold': '0.3'})
indicator = {'value': '8.8.8.8', 'indicator_type': 'IP'}
execute_command_res = [{'Contents': [{'maliciousRatio': -1}]}]
execute_mock = mocker.patch.object(demisto, 'executeCommand', return_value=execute_command_res)
assert get_indicator_result(indicator) is None
assert execute_mock.call_count == 1


def test_get_indicator_from_value(mocker):
"""
Given:
- The function args.
When:
- Running the get_indicator_from_value function.
Then:
- Validating that the return value after calling to "findIndicators" command is as expected.
"""
from MaliciousRatioReputation import get_indicator_from_value

execute_command_res = [{'Contents': [{'id': 'a', 'investigationIDs': ['1', '2', '10'], 'value': 'value_a',
'indicator_type': 'File'}], 'Type': 'note'}]
execute_mock = mocker.patch.object(demisto, 'executeCommand', return_value=execute_command_res)
indicator = get_indicator_from_value('value_a')
assert execute_mock.call_count == 1
assert indicator == execute_command_res[0]['Contents'][0]
Expand Up @@ -11,9 +11,10 @@ Resolves the original URL from the given shortened URL and places it in both, as
## Inputs
---

| **Argument Name** | **Description** |
| --- | --- |
| url | The URL to resolve. |
| **Argument Name** | **Description** |
| --- |---------------------------------------------------------|
| url | The URL to resolve. |
| insecure | Trust any certificate (not secure) |

## Outputs
---
Expand Down
@@ -0,0 +1,44 @@
import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401
import requests
# disable insecure warnings
requests.packages.urllib3.disable_warnings()

headers = {
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'
}


def main():
url = demisto.args().get('url')
verify = not argToBoolean(demisto.args().get('insecure', False))
req = requests.get('https://unshorten.me/json/' + url, headers=headers, verify=verify)
content = req.json()
if content['success']:
resolvedUrl = content['resolved_url']
shortenedUrl = content['requested_url']
usageCount = content['usage_count']
ec = {}
ec['URL.Data'] = [resolvedUrl]
demisto.results({
'Type': entryTypes['note'],
'Contents': [resolvedUrl],
'ContentsFormat': formats['json'],
'HumanReadable': tableToMarkdown('Shorten URL results', [{
'Shortened URL': shortenedUrl,
'Resolved URL': resolvedUrl,
'Usage count': usageCount
}]),
'EntryContext': ec
})
else:
demisto.results('Provided URL could not be un-shortened')


if __name__ == "__builtin__" or __name__ == "builtins":
main()
@@ -0,0 +1,29 @@
commonfields:
id: ResolveShortenedURL
version: -1
name: ResolveShortenedURL
script: ''
type: python
subtype: python3
tags:
- Utility
comment: Resolve the original URL from the given shortened URL and place it in both as output and in the context of a playbook. (https://unshorten.me/api)
enabled: true
args:
- name: url
required: true
default: true
description: URL to resolve
- name: insecure
required: false
type: Boolean
defaultValue: "false"
description: Trust any certificate (not secure)
outputs:
- contextPath: URL.Data
description: Shortened URL
scripttarget: 0
tests:
- "No test"
fromversion: 6.5.0
dockerimage: demisto/python3:3.10.7.33922