intelmq-extensions 1.8.1__tar.gz → 1.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/PKG-INFO +29 -12
  2. intelmq_extensions-1.9.0/README.md +47 -0
  3. intelmq_extensions-1.9.0/intelmq_extensions/bots/experts/replace_in_dict/expert.py +42 -0
  4. intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/experts/replace_in_dict/test_expert.py +92 -0
  5. intelmq_extensions-1.9.0/intelmq_extensions/tests/cli/__init__.py +0 -0
  6. intelmq_extensions-1.9.0/intelmq_extensions/tests/lib/__init__.py +0 -0
  7. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions.egg-info/PKG-INFO +29 -12
  8. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions.egg-info/SOURCES.txt +4 -0
  9. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions.egg-info/entry_points.txt +2 -0
  10. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/pyproject.toml +2 -2
  11. intelmq_extensions-1.8.1/README.md +0 -30
  12. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/LICENSE +0 -0
  13. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/__init__.py +0 -0
  14. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/__init__.py +0 -0
  15. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/collectors/blackkite/__init__.py +0 -0
  16. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/collectors/blackkite/_client.py +0 -0
  17. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/collectors/blackkite/collector.py +0 -0
  18. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/collectors/disp/__init__.py +0 -0
  19. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/collectors/disp/_client.py +0 -0
  20. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/collectors/disp/collector.py +0 -0
  21. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/collectors/xmpp/__init__.py +0 -0
  22. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/collectors/xmpp/collector.py +0 -0
  23. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/__init__.py +0 -0
  24. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/certat_contact_intern/__init__.py +0 -0
  25. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/certat_contact_intern/expert.py +0 -0
  26. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/copy_extra/__init__.py +0 -0
  27. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/copy_extra/expert.py +0 -0
  28. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/event_group_splitter/__init__.py +0 -0
  29. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/event_group_splitter/expert.py +0 -0
  30. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/event_splitter/__init__.py +0 -0
  31. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/event_splitter/expert.py +0 -0
  32. {intelmq_extensions-1.8.1/intelmq_extensions/bots/experts/squelcher → intelmq_extensions-1.9.0/intelmq_extensions/bots/experts/replace_in_dict}/__init__.py +0 -0
  33. {intelmq_extensions-1.8.1/intelmq_extensions/bots/experts/vulnerability_lookup → intelmq_extensions-1.9.0/intelmq_extensions/bots/experts/squelcher}/__init__.py +0 -0
  34. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/squelcher/expert.py +0 -0
  35. {intelmq_extensions-1.8.1/intelmq_extensions/bots/outputs → intelmq_extensions-1.9.0/intelmq_extensions/bots/experts/vulnerability_lookup}/__init__.py +0 -0
  36. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/experts/vulnerability_lookup/expert.py +0 -0
  37. {intelmq_extensions-1.8.1/intelmq_extensions/bots/outputs/mattermost → intelmq_extensions-1.9.0/intelmq_extensions/bots/outputs}/__init__.py +0 -0
  38. {intelmq_extensions-1.8.1/intelmq_extensions/bots/outputs/to_logs → intelmq_extensions-1.9.0/intelmq_extensions/bots/outputs/mattermost}/__init__.py +0 -0
  39. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/outputs/mattermost/output.py +0 -0
  40. {intelmq_extensions-1.8.1/intelmq_extensions/bots/outputs/xmpp → intelmq_extensions-1.9.0/intelmq_extensions/bots/outputs/to_logs}/__init__.py +0 -0
  41. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/outputs/to_logs/output.py +0 -0
  42. {intelmq_extensions-1.8.1/intelmq_extensions/bots/parsers → intelmq_extensions-1.9.0/intelmq_extensions/bots/outputs/xmpp}/__init__.py +0 -0
  43. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/outputs/xmpp/output.py +0 -0
  44. {intelmq_extensions-1.8.1/intelmq_extensions/bots/parsers/blackkite → intelmq_extensions-1.9.0/intelmq_extensions/bots/parsers}/__init__.py +0 -0
  45. {intelmq_extensions-1.8.1/intelmq_extensions/bots/parsers/disp → intelmq_extensions-1.9.0/intelmq_extensions/bots/parsers/blackkite}/__init__.py +0 -0
  46. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/parsers/blackkite/_transformers.py +0 -0
  47. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/parsers/blackkite/parser.py +0 -0
  48. {intelmq_extensions-1.8.1/intelmq_extensions/bots/parsers/malwaredomains → intelmq_extensions-1.9.0/intelmq_extensions/bots/parsers/disp}/__init__.py +0 -0
  49. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/parsers/disp/parser.py +0 -0
  50. {intelmq_extensions-1.8.1/intelmq_extensions/cli → intelmq_extensions-1.9.0/intelmq_extensions/bots/parsers/malwaredomains}/__init__.py +0 -0
  51. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/bots/parsers/malwaredomains/parser.py +0 -0
  52. {intelmq_extensions-1.8.1/intelmq_extensions/lib → intelmq_extensions-1.9.0/intelmq_extensions/cli}/__init__.py +0 -0
  53. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/cli/create_reports.py +0 -0
  54. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/cli/intelmqcli.py +0 -0
  55. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/cli/lib.py +0 -0
  56. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/cli/utils.py +0 -0
  57. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/etc/harmonization.conf +0 -0
  58. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/etc/squelcher.conf +0 -0
  59. {intelmq_extensions-1.8.1/intelmq_extensions/tests → intelmq_extensions-1.9.0/intelmq_extensions/lib}/__init__.py +0 -0
  60. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/lib/api_helpers.py +0 -0
  61. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/lib/blackkite.py +0 -0
  62. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots → intelmq_extensions-1.9.0/intelmq_extensions/tests}/__init__.py +0 -0
  63. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/base.py +0 -0
  64. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/collectors → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots}/__init__.py +0 -0
  65. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/collectors/blackkite → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/collectors}/__init__.py +0 -0
  66. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/collectors/disp → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/collectors/blackkite}/__init__.py +0 -0
  67. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/collectors/blackkite/base.py +0 -0
  68. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/collectors/blackkite/test_client.py +0 -0
  69. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/collectors/blackkite/test_collector.py +0 -0
  70. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/collectors/xmpp → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/collectors/disp}/__init__.py +0 -0
  71. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/collectors/disp/base.py +0 -0
  72. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/collectors/disp/test_client.py +0 -0
  73. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/collectors/disp/test_collector.py +0 -0
  74. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/experts → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/collectors/xmpp}/__init__.py +0 -0
  75. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/collectors/xmpp/test_collector.py +0 -0
  76. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/experts/certat_contact_intern → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/experts}/__init__.py +0 -0
  77. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/experts/copy_extra → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/experts/certat_contact_intern}/__init__.py +0 -0
  78. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/experts/certat_contact_intern/test_expert.py +0 -0
  79. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/experts/event_group_splitter → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/experts/copy_extra}/__init__.py +0 -0
  80. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/experts/copy_extra/test_expert.py +0 -0
  81. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/experts/event_splitter → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/experts/event_group_splitter}/__init__.py +0 -0
  82. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/experts/event_group_splitter/test_expert.py +0 -0
  83. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/experts/squelcher → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/experts/event_splitter}/__init__.py +0 -0
  84. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/experts/event_splitter/test_expert.py +0 -0
  85. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/experts/vulnerability_lookup → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/experts/replace_in_dict}/__init__.py +0 -0
  86. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/outputs → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/experts/squelcher}/__init__.py +0 -0
  87. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/experts/squelcher/test_expert.py +0 -0
  88. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/outputs/mattermost → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/experts/vulnerability_lookup}/__init__.py +0 -0
  89. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/experts/vulnerability_lookup/test_expert.py +0 -0
  90. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/outputs/xmpp → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/outputs}/__init__.py +0 -0
  91. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/parsers → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/outputs/mattermost}/__init__.py +0 -0
  92. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/outputs/mattermost/test_output.py +0 -0
  93. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/parsers/blackkite → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/outputs/xmpp}/__init__.py +0 -0
  94. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/outputs/xmpp/test_output.py +0 -0
  95. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/parsers/disp → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/parsers}/__init__.py +0 -0
  96. {intelmq_extensions-1.8.1/intelmq_extensions/tests/bots/parsers/malwaredomains → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/parsers/blackkite}/__init__.py +0 -0
  97. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/parsers/blackkite/data.py +0 -0
  98. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/parsers/blackkite/test_parser.py +0 -0
  99. {intelmq_extensions-1.8.1/intelmq_extensions/tests/cli → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/parsers/disp}/__init__.py +0 -0
  100. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/parsers/disp/test_parser.py +0 -0
  101. {intelmq_extensions-1.8.1/intelmq_extensions/tests/lib → intelmq_extensions-1.9.0/intelmq_extensions/tests/bots/parsers/malwaredomains}/__init__.py +0 -0
  102. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/bots/parsers/malwaredomains/test_parser.py +0 -0
  103. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/cli/test_create_reports.py +0 -0
  104. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/cli/test_intelmqcli.py +0 -0
  105. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/lib/base.py +0 -0
  106. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions/tests/lib/test_api_helpers.py +0 -0
  107. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions.egg-info/dependency_links.txt +0 -0
  108. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions.egg-info/requires.txt +6 -6
  109. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/intelmq_extensions.egg-info/top_level.txt +0 -0
  110. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/setup.cfg +0 -0
  111. {intelmq_extensions-1.8.1 → intelmq_extensions-1.9.0}/setup.py +0 -0
@@ -1,25 +1,25 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intelmq_extensions
3
- Version: 1.8.1
3
+ Version: 1.9.0
4
4
  Summary: Additional bots for IntelMQ
5
5
  Author: CERT.at Data & Development Team
6
6
  License: AGPLv3
7
7
  Project-URL: Repository, https://github.com/certat/intelmq-extensions
8
8
  Classifier: Programming Language :: Python :: 3
9
- Requires-Python: >=3.7
9
+ Requires-Python: >=3.9
10
10
  Description-Content-Type: text/markdown
11
11
  License-File: LICENSE
12
12
  Requires-Dist: rt<3.0.0,>=1.0.9
13
- Requires-Dist: netaddr>=0.7.14
14
- Requires-Dist: psycopg2-binary>=2.5.5
15
- Requires-Dist: mergedeep
16
- Requires-Dist: intelmq
17
13
  Requires-Dist: slixmpp
18
- Requires-Dist: tabulate>=0.7.5
19
- Requires-Dist: psycopg2-binary
20
- Requires-Dist: netaddr>=0.7.14
21
14
  Requires-Dist: python-termstyle>=0.1.10
15
+ Requires-Dist: mergedeep
22
16
  Requires-Dist: importlib_metadata; python_version < "3.8"
17
+ Requires-Dist: psycopg2-binary>=2.5.5
18
+ Requires-Dist: psycopg2-binary
19
+ Requires-Dist: netaddr>=0.7.14
20
+ Requires-Dist: netaddr>=0.7.14
21
+ Requires-Dist: intelmq
22
+ Requires-Dist: tabulate>=0.7.5
23
23
  Provides-Extra: dev
24
24
  Requires-Dist: pytest; extra == "dev"
25
25
  Requires-Dist: tox>=4; extra == "dev"
@@ -33,14 +33,25 @@ Dynamic: requires-dist
33
33
 
34
34
  # IntelMQ Extensions
35
35
 
36
- This project collects customized bots used primary by CERT.at.
36
+ [![Running tests](https://github.com/certat/intelmq-extensions/actions/workflows/ci.yml/badge.svg)](https://github.com/certat/intelmq-extensions/actions/workflows/ci.yml)
37
+
38
+ This project collects customized bots and some helper scripts for
39
+ [IntelMQ](https://github.com/certtools/intelmq) used primary by CERT.at.
40
+
41
+ It's a combination of customization previously available in [certat/intelmq](https://github.com/certat/intelmq)
42
+ as well as newer solutions.
37
43
 
38
44
  ## Usage
39
45
 
40
- Install the package on the machine. Then, it's enough to just declare the bot's module
41
- pointing to this package, e.g. `intelmq_extensions.bots.collectors.xmpp`
46
+ Install the package on the machine or virtualenv, where you have the IntelMQ, using
47
+ `pip install intelmq-extensions`. Then, the bots will be available as any other IntelMQ
48
+ bot in the Manager as well to import using `intelmq.bots.*.certat` namespace, e.g.
49
+ `intelmq.bots.experts.certat.vulnerability_lookup.expert`
42
50
 
51
+ ## Documentation
43
52
 
53
+ There is a limited documentation available. Consult bot Python code to see information
54
+ about the usage and available configuration.
44
55
 
45
56
  ## Running tests
46
57
 
@@ -61,3 +72,9 @@ This package comes with test runners configured using `tox`. To use them:
61
72
  tox -efull-with-docker -- intelmq_extensions/tests/bots/experts/squelcher/test_expert.py::TestSquelcherExpertBot::test_address_match1
62
73
 
63
74
  ```
75
+
76
+ ---
77
+
78
+ Part of the development was financed by the European Union.
79
+
80
+ ![CEF-Logo](https://github.com/certat/intelmq-extensions/blob/main/docs/cef_logo.png?raw=true)
@@ -0,0 +1,47 @@
1
+ # IntelMQ Extensions
2
+
3
+ [![Running tests](https://github.com/certat/intelmq-extensions/actions/workflows/ci.yml/badge.svg)](https://github.com/certat/intelmq-extensions/actions/workflows/ci.yml)
4
+
5
+ This project collects customized bots and some helper scripts for
6
+ [IntelMQ](https://github.com/certtools/intelmq) used primary by CERT.at.
7
+
8
+ It's a combination of customization previously available in [certat/intelmq](https://github.com/certat/intelmq)
9
+ as well as newer solutions.
10
+
11
+ ## Usage
12
+
13
+ Install the package on the machine or virtualenv, where you have the IntelMQ, using
14
+ `pip install intelmq-extensions`. Then, the bots will be available as any other IntelMQ
15
+ bot in the Manager as well to import using `intelmq.bots.*.certat` namespace, e.g.
16
+ `intelmq.bots.experts.certat.vulnerability_lookup.expert`
17
+
18
+ ## Documentation
19
+
20
+ There is a limited documentation available. Consult bot Python code to see information
21
+ about the usage and available configuration.
22
+
23
+ ## Running tests
24
+
25
+ This package comes with test runners configured using `tox`. To use them:
26
+
27
+ ```bash
28
+
29
+ tox -elint # run code style checks
30
+ tox -epy310 # run simple unittests against Python 3.10
31
+
32
+ # For running all unittests, including connecting to external services / database
33
+ # use on of the following:
34
+ tox -efull # assuming you run redis, postgres etc. on your own
35
+ tox -efull-with-docker # this will use docker compose to provision services for tests;
36
+ # please note it uses default ports
37
+
38
+ # You can pass arguments to the pytest, e.g. to run a specific test:
39
+ tox -efull-with-docker -- intelmq_extensions/tests/bots/experts/squelcher/test_expert.py::TestSquelcherExpertBot::test_address_match1
40
+
41
+ ```
42
+
43
+ ---
44
+
45
+ Part of the development was financed by the European Union.
46
+
47
+ ![CEF-Logo](https://github.com/certat/intelmq-extensions/blob/main/docs/cef_logo.png?raw=true)
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ ReplaceInDict allow replacing pattern in any text field in a dict field(s)
4
+ """
5
+
6
+ from intelmq.lib.bot import ExpertBot
7
+ from intelmq.lib.exceptions import ConfigurationError, KeyNotExists
8
+
9
+
10
+ class ReplaceInDictExpertBot(ExpertBot):
11
+ old_value: str = None
12
+ new_value: str = None
13
+ fields: str = None # actually str | list on newer Python
14
+
15
+ def init(self):
16
+ if isinstance(self.fields, str):
17
+ self.fields = self.fields.split(",")
18
+ for field in self.fields:
19
+ definition = self.harmonization["event"][field]
20
+ if definition["type"] != "JSONDict":
21
+ raise ConfigurationError("Field is not a JSONDict", field)
22
+
23
+ def process(self):
24
+ event = self.receive_message()
25
+
26
+ for field in self.fields:
27
+ for name, value in event.finditems(f"{field}."):
28
+ if isinstance(value, str):
29
+ try:
30
+ event.change(
31
+ name, value.replace(self.old_value, self.new_value)
32
+ )
33
+ except KeyNotExists:
34
+ # Safeguard for an edge case if we would get default value
35
+ # of an non-existing field
36
+ pass
37
+
38
+ self.send_message(event)
39
+ self.acknowledge_message()
40
+
41
+
42
+ BOT = ReplaceInDictExpertBot
@@ -0,0 +1,92 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Testing ReplaceInDictExpertBot.
4
+ """
5
+
6
+ import copy
7
+ import unittest
8
+
9
+ from intelmq.lib.exceptions import ConfigurationError
10
+
11
+ from intelmq_extensions.bots.experts.replace_in_dict.expert import (
12
+ ReplaceInDictExpertBot,
13
+ )
14
+
15
+ from ....base import BotTestCase
16
+
17
+
18
+ class TestReplaceInDictExpertBot(BotTestCase, unittest.TestCase):
19
+ """
20
+ A TestCase for ReplaceInDictExpertBot.
21
+ """
22
+
23
+ @classmethod
24
+ def set_bot(cls):
25
+ cls.bot_reference = ReplaceInDictExpertBot
26
+ cls.sysconfig = {
27
+ "old_value": "\\u0000",
28
+ "new_value": "[nullbyte]",
29
+ "fields": "extra",
30
+ }
31
+ cls.default_input_message = {"__type": "Event"}
32
+
33
+ def test_event_no_changes(self):
34
+ message = {
35
+ "__type": "Event",
36
+ "time.observation": "2015-01-01T00:00:00+00:00",
37
+ "extra.payload": "foo",
38
+ "extra.name": "bar",
39
+ "extra.firmwarerev": 1,
40
+ }
41
+ self.input_message = copy.deepcopy(message)
42
+ self.run_bot()
43
+ self.assertMessageEqual(0, message)
44
+
45
+ def test_event_no_extra(self):
46
+ message = {
47
+ "__type": "Event",
48
+ "time.observation": "2015-01-01T00:00:00+00:00",
49
+ "feed.code": "foo",
50
+ }
51
+ self.input_message = copy.deepcopy(message)
52
+ self.run_bot()
53
+ self.assertMessageEqual(0, message)
54
+
55
+ def test_event_changes_one_dict(self):
56
+ message = {
57
+ "__type": "Event",
58
+ "time.observation": "2015-01-01T00:00:00+00:00",
59
+ "extra.payload": "foo\\u0000bar\\u0000",
60
+ "extra.name": "bar ok \\u0001 and not ok \\\\u0000",
61
+ "extra.firmwarerev": 1,
62
+ "feed.code": "foo",
63
+ }
64
+ self.input_message = copy.deepcopy(message)
65
+ self.run_bot()
66
+
67
+ message["extra.payload"] = "foo[nullbyte]bar[nullbyte]"
68
+ message["extra.name"] = "bar ok \\u0001 and not ok \\[nullbyte]"
69
+ self.assertMessageEqual(0, message)
70
+
71
+ def test_event_multiple_dict_fail_if_not_jsondict(self):
72
+ with self.assertRaises(ConfigurationError):
73
+ self.run_bot(
74
+ parameters={
75
+ "fields": "extra,output",
76
+ }
77
+ )
78
+
79
+ def test_event_other_fields_not_modified(self):
80
+ message = {
81
+ "__type": "Event",
82
+ "time.observation": "2015-01-01T00:00:00+00:00",
83
+ "feed.code": "foo\\u0000",
84
+ }
85
+ self.input_message = copy.deepcopy(message)
86
+ self.run_bot()
87
+
88
+ self.assertMessageEqual(0, message)
89
+
90
+
91
+ if __name__ == "__main__":
92
+ unittest.main()
@@ -1,25 +1,25 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intelmq_extensions
3
- Version: 1.8.1
3
+ Version: 1.9.0
4
4
  Summary: Additional bots for IntelMQ
5
5
  Author: CERT.at Data & Development Team
6
6
  License: AGPLv3
7
7
  Project-URL: Repository, https://github.com/certat/intelmq-extensions
8
8
  Classifier: Programming Language :: Python :: 3
9
- Requires-Python: >=3.7
9
+ Requires-Python: >=3.9
10
10
  Description-Content-Type: text/markdown
11
11
  License-File: LICENSE
12
12
  Requires-Dist: rt<3.0.0,>=1.0.9
13
- Requires-Dist: netaddr>=0.7.14
14
- Requires-Dist: psycopg2-binary>=2.5.5
15
- Requires-Dist: mergedeep
16
- Requires-Dist: intelmq
17
13
  Requires-Dist: slixmpp
18
- Requires-Dist: tabulate>=0.7.5
19
- Requires-Dist: psycopg2-binary
20
- Requires-Dist: netaddr>=0.7.14
21
14
  Requires-Dist: python-termstyle>=0.1.10
15
+ Requires-Dist: mergedeep
22
16
  Requires-Dist: importlib_metadata; python_version < "3.8"
17
+ Requires-Dist: psycopg2-binary>=2.5.5
18
+ Requires-Dist: psycopg2-binary
19
+ Requires-Dist: netaddr>=0.7.14
20
+ Requires-Dist: netaddr>=0.7.14
21
+ Requires-Dist: intelmq
22
+ Requires-Dist: tabulate>=0.7.5
23
23
  Provides-Extra: dev
24
24
  Requires-Dist: pytest; extra == "dev"
25
25
  Requires-Dist: tox>=4; extra == "dev"
@@ -33,14 +33,25 @@ Dynamic: requires-dist
33
33
 
34
34
  # IntelMQ Extensions
35
35
 
36
- This project collects customized bots used primary by CERT.at.
36
+ [![Running tests](https://github.com/certat/intelmq-extensions/actions/workflows/ci.yml/badge.svg)](https://github.com/certat/intelmq-extensions/actions/workflows/ci.yml)
37
+
38
+ This project collects customized bots and some helper scripts for
39
+ [IntelMQ](https://github.com/certtools/intelmq) used primary by CERT.at.
40
+
41
+ It's a combination of customization previously available in [certat/intelmq](https://github.com/certat/intelmq)
42
+ as well as newer solutions.
37
43
 
38
44
  ## Usage
39
45
 
40
- Install the package on the machine. Then, it's enough to just declare the bot's module
41
- pointing to this package, e.g. `intelmq_extensions.bots.collectors.xmpp`
46
+ Install the package on the machine or virtualenv, where you have the IntelMQ, using
47
+ `pip install intelmq-extensions`. Then, the bots will be available as any other IntelMQ
48
+ bot in the Manager as well to import using `intelmq.bots.*.certat` namespace, e.g.
49
+ `intelmq.bots.experts.certat.vulnerability_lookup.expert`
42
50
 
51
+ ## Documentation
43
52
 
53
+ There is a limited documentation available. Consult bot Python code to see information
54
+ about the usage and available configuration.
44
55
 
45
56
  ## Running tests
46
57
 
@@ -61,3 +72,9 @@ This package comes with test runners configured using `tox`. To use them:
61
72
  tox -efull-with-docker -- intelmq_extensions/tests/bots/experts/squelcher/test_expert.py::TestSquelcherExpertBot::test_address_match1
62
73
 
63
74
  ```
75
+
76
+ ---
77
+
78
+ Part of the development was financed by the European Union.
79
+
80
+ ![CEF-Logo](https://github.com/certat/intelmq-extensions/blob/main/docs/cef_logo.png?raw=true)
@@ -27,6 +27,8 @@ intelmq_extensions/bots/experts/event_group_splitter/__init__.py
27
27
  intelmq_extensions/bots/experts/event_group_splitter/expert.py
28
28
  intelmq_extensions/bots/experts/event_splitter/__init__.py
29
29
  intelmq_extensions/bots/experts/event_splitter/expert.py
30
+ intelmq_extensions/bots/experts/replace_in_dict/__init__.py
31
+ intelmq_extensions/bots/experts/replace_in_dict/expert.py
30
32
  intelmq_extensions/bots/experts/squelcher/__init__.py
31
33
  intelmq_extensions/bots/experts/squelcher/expert.py
32
34
  intelmq_extensions/bots/experts/vulnerability_lookup/__init__.py
@@ -79,6 +81,8 @@ intelmq_extensions/tests/bots/experts/event_group_splitter/__init__.py
79
81
  intelmq_extensions/tests/bots/experts/event_group_splitter/test_expert.py
80
82
  intelmq_extensions/tests/bots/experts/event_splitter/__init__.py
81
83
  intelmq_extensions/tests/bots/experts/event_splitter/test_expert.py
84
+ intelmq_extensions/tests/bots/experts/replace_in_dict/__init__.py
85
+ intelmq_extensions/tests/bots/experts/replace_in_dict/test_expert.py
82
86
  intelmq_extensions/tests/bots/experts/squelcher/__init__.py
83
87
  intelmq_extensions/tests/bots/experts/squelcher/test_expert.py
84
88
  intelmq_extensions/tests/bots/experts/vulnerability_lookup/__init__.py
@@ -6,6 +6,7 @@ intelmq.bots.experts.certat.certat_contact_intern.expert = intelmq_extensions.bo
6
6
  intelmq.bots.experts.certat.copy_extra.expert = intelmq_extensions.bots.experts.copy_extra.expert:BOT.run
7
7
  intelmq.bots.experts.certat.event_group_splitter.expert = intelmq_extensions.bots.experts.event_group_splitter.expert:BOT.run
8
8
  intelmq.bots.experts.certat.event_splitter.expert = intelmq_extensions.bots.experts.event_splitter.expert:BOT.run
9
+ intelmq.bots.experts.certat.replace_in_dict.expert = intelmq_extensions.bots.experts.replace_in_dict.expert:BOT.run
9
10
  intelmq.bots.experts.certat.squelcher.expert = intelmq_extensions.bots.experts.squelcher.expert:BOT.run
10
11
  intelmq.bots.experts.certat.vulnerability_lookup.expert = intelmq_extensions.bots.experts.vulnerability_lookup.expert:BOT.run
11
12
  intelmq.bots.outputs.certat.mattermost.output = intelmq_extensions.bots.outputs.mattermost.output:BOT.run
@@ -21,6 +22,7 @@ intelmq_extensions.bots.experts.certat_contact_intern.expert = intelmq_extension
21
22
  intelmq_extensions.bots.experts.copy_extra.expert = intelmq_extensions.bots.experts.copy_extra.expert:BOT.run
22
23
  intelmq_extensions.bots.experts.event_group_splitter.expert = intelmq_extensions.bots.experts.event_group_splitter.expert:BOT.run
23
24
  intelmq_extensions.bots.experts.event_splitter.expert = intelmq_extensions.bots.experts.event_splitter.expert:BOT.run
25
+ intelmq_extensions.bots.experts.replace_in_dict.expert = intelmq_extensions.bots.experts.replace_in_dict.expert:BOT.run
24
26
  intelmq_extensions.bots.experts.squelcher.expert = intelmq_extensions.bots.experts.squelcher.expert:BOT.run
25
27
  intelmq_extensions.bots.experts.vulnerability_lookup.expert = intelmq_extensions.bots.experts.vulnerability_lookup.expert:BOT.run
26
28
  intelmq_extensions.bots.outputs.mattermost.output = intelmq_extensions.bots.outputs.mattermost.output:BOT.run
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "intelmq_extensions"
7
- version = "1.8.1"
7
+ version = "1.9.0"
8
8
  description = "Additional bots for IntelMQ"
9
9
  readme = "README.md"
10
- requires-python = ">=3.7"
10
+ requires-python = ">=3.9"
11
11
  dynamic = ["entry-points", "dependencies", "scripts"]
12
12
 
13
13
  classifiers = ["Programming Language :: Python :: 3"]
@@ -1,30 +0,0 @@
1
- # IntelMQ Extensions
2
-
3
- This project collects customized bots used primary by CERT.at.
4
-
5
- ## Usage
6
-
7
- Install the package on the machine. Then, it's enough to just declare the bot's module
8
- pointing to this package, e.g. `intelmq_extensions.bots.collectors.xmpp`
9
-
10
-
11
-
12
- ## Running tests
13
-
14
- This package comes with test runners configured using `tox`. To use them:
15
-
16
- ```bash
17
-
18
- tox -elint # run code style checks
19
- tox -epy310 # run simple unittests against Python 3.10
20
-
21
- # For running all unittests, including connecting to external services / database
22
- # use on of the following:
23
- tox -efull # assuming you run redis, postgres etc. on your own
24
- tox -efull-with-docker # this will use docker compose to provision services for tests;
25
- # please note it uses default ports
26
-
27
- # You can pass arguments to the pytest, e.g. to run a specific test:
28
- tox -efull-with-docker -- intelmq_extensions/tests/bots/experts/squelcher/test_expert.py::TestSquelcherExpertBot::test_address_match1
29
-
30
- ```
@@ -1,13 +1,13 @@
1
1
  rt<3.0.0,>=1.0.9
2
- netaddr>=0.7.14
3
- psycopg2-binary>=2.5.5
4
- mergedeep
5
- intelmq
6
2
  slixmpp
7
- tabulate>=0.7.5
3
+ python-termstyle>=0.1.10
4
+ mergedeep
5
+ psycopg2-binary>=2.5.5
8
6
  psycopg2-binary
9
7
  netaddr>=0.7.14
10
- python-termstyle>=0.1.10
8
+ netaddr>=0.7.14
9
+ intelmq
10
+ tabulate>=0.7.5
11
11
 
12
12
  [:python_version < "3.8"]
13
13
  importlib_metadata