secator 0.5.2__py3-none-any.whl → 0.7.0__py3-none-any.whl

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.

Potentially problematic release.


This version of secator might be problematic. Click here for more details.

Files changed (84) hide show
  1. secator/celery.py +160 -185
  2. secator/celery_utils.py +268 -0
  3. secator/cli.py +327 -106
  4. secator/config.py +27 -11
  5. secator/configs/workflows/host_recon.yaml +5 -3
  6. secator/configs/workflows/port_scan.yaml +7 -3
  7. secator/configs/workflows/url_bypass.yaml +10 -0
  8. secator/configs/workflows/url_vuln.yaml +1 -1
  9. secator/decorators.py +169 -92
  10. secator/definitions.py +10 -3
  11. secator/exporters/__init__.py +7 -5
  12. secator/exporters/console.py +10 -0
  13. secator/exporters/csv.py +27 -19
  14. secator/exporters/gdrive.py +16 -11
  15. secator/exporters/json.py +3 -1
  16. secator/exporters/table.py +30 -2
  17. secator/exporters/txt.py +20 -16
  18. secator/hooks/gcs.py +53 -0
  19. secator/hooks/mongodb.py +54 -28
  20. secator/output_types/__init__.py +29 -11
  21. secator/output_types/_base.py +11 -1
  22. secator/output_types/error.py +36 -0
  23. secator/output_types/exploit.py +1 -1
  24. secator/output_types/info.py +24 -0
  25. secator/output_types/ip.py +7 -0
  26. secator/output_types/port.py +8 -1
  27. secator/output_types/progress.py +6 -1
  28. secator/output_types/record.py +3 -1
  29. secator/output_types/stat.py +33 -0
  30. secator/output_types/tag.py +6 -4
  31. secator/output_types/url.py +6 -3
  32. secator/output_types/vulnerability.py +3 -2
  33. secator/output_types/warning.py +24 -0
  34. secator/report.py +55 -23
  35. secator/rich.py +44 -39
  36. secator/runners/_base.py +622 -635
  37. secator/runners/_helpers.py +5 -91
  38. secator/runners/celery.py +18 -0
  39. secator/runners/command.py +364 -211
  40. secator/runners/scan.py +8 -24
  41. secator/runners/task.py +21 -55
  42. secator/runners/workflow.py +41 -40
  43. secator/scans/__init__.py +28 -0
  44. secator/serializers/dataclass.py +6 -0
  45. secator/serializers/json.py +10 -5
  46. secator/serializers/regex.py +12 -4
  47. secator/tasks/_categories.py +6 -3
  48. secator/tasks/bbot.py +293 -0
  49. secator/tasks/bup.py +98 -0
  50. secator/tasks/cariddi.py +38 -49
  51. secator/tasks/dalfox.py +3 -0
  52. secator/tasks/dirsearch.py +12 -23
  53. secator/tasks/dnsx.py +49 -30
  54. secator/tasks/dnsxbrute.py +2 -0
  55. secator/tasks/feroxbuster.py +8 -17
  56. secator/tasks/ffuf.py +3 -2
  57. secator/tasks/fping.py +3 -3
  58. secator/tasks/gau.py +5 -0
  59. secator/tasks/gf.py +2 -2
  60. secator/tasks/gospider.py +4 -0
  61. secator/tasks/grype.py +9 -9
  62. secator/tasks/h8mail.py +31 -41
  63. secator/tasks/httpx.py +58 -21
  64. secator/tasks/katana.py +18 -22
  65. secator/tasks/maigret.py +26 -24
  66. secator/tasks/mapcidr.py +2 -3
  67. secator/tasks/msfconsole.py +4 -16
  68. secator/tasks/naabu.py +3 -1
  69. secator/tasks/nmap.py +50 -35
  70. secator/tasks/nuclei.py +9 -2
  71. secator/tasks/searchsploit.py +17 -9
  72. secator/tasks/subfinder.py +5 -1
  73. secator/tasks/wpscan.py +79 -93
  74. secator/template.py +61 -45
  75. secator/thread.py +24 -0
  76. secator/utils.py +330 -80
  77. secator/utils_test.py +48 -23
  78. secator/workflows/__init__.py +28 -0
  79. {secator-0.5.2.dist-info → secator-0.7.0.dist-info}/METADATA +12 -6
  80. secator-0.7.0.dist-info/RECORD +115 -0
  81. {secator-0.5.2.dist-info → secator-0.7.0.dist-info}/WHEEL +1 -1
  82. secator-0.5.2.dist-info/RECORD +0 -101
  83. {secator-0.5.2.dist-info → secator-0.7.0.dist-info}/entry_points.txt +0 -0
  84. {secator-0.5.2.dist-info → secator-0.7.0.dist-info}/licenses/LICENSE +0 -0
secator/utils_test.py CHANGED
@@ -6,12 +6,13 @@ import unittest.mock
6
6
 
7
7
  from fp.fp import FreeProxy
8
8
 
9
- from secator.definitions import (CIDR_RANGE, DEBUG, DELAY, DEPTH, EMAIL,
9
+ from secator.definitions import (CIDR_RANGE, DELAY, DEPTH, EMAIL,
10
10
  FOLLOW_REDIRECT, HEADER, HOST, IP, MATCH_CODES,
11
11
  METHOD, PROXY, RATE_LIMIT, RETRIES,
12
12
  THREADS, TIMEOUT, URL, USER_AGENT, USERNAME)
13
13
  from secator.cli import ALL_WORKFLOWS, ALL_TASKS, ALL_SCANS
14
- from secator.output_types import OutputType
14
+ from secator.output_types import EXECUTION_TYPES, STAT_TYPES
15
+ from secator.runners import Command
15
16
  from secator.rich import console
16
17
  from secator.utils import load_fixture
17
18
 
@@ -88,8 +89,12 @@ META_OPTS = {
88
89
  USER_AGENT: 'Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1',
89
90
 
90
91
  # Individual tasks options
92
+ 'bup.mode': 'http_methods',
91
93
  'gf.pattern': 'xss',
92
94
  'nmap.output_path': load_fixture('nmap_output', FIXTURES_DIR, only_path=True, ext='.xml'), # nmap XML fixture
95
+ 'nmap.tcp_connect': True,
96
+ 'nmap.version_detection': True,
97
+ 'nmap.skip_host_discovery': True,
93
98
  'msfconsole.resource': load_fixture('msfconsole_input', FIXTURES_DIR, only_path=True),
94
99
  'dirsearch.output_path': load_fixture('dirsearch_output', FIXTURES_DIR, only_path=True),
95
100
  'maigret.output_path': load_fixture('maigret_output', FIXTURES_DIR, only_path=True),
@@ -104,6 +109,7 @@ def mock_subprocess_popen(output_list):
104
109
  mock_process = unittest.mock.MagicMock()
105
110
  mock_process.wait.return_value = 0
106
111
  mock_process.stdout.readline.side_effect = output_list
112
+ mock_process.pid = None
107
113
  mock_process.returncode = 0
108
114
 
109
115
  def mock_popen(*args, **kwargs):
@@ -113,7 +119,7 @@ def mock_subprocess_popen(output_list):
113
119
 
114
120
 
115
121
  @contextlib.contextmanager
116
- def mock_command(cls, targets=[], opts={}, fixture=None, method=''):
122
+ def mock_command(cls, inputs=[], opts={}, fixture=None, method=''):
117
123
  mocks = []
118
124
  if isinstance(fixture, dict):
119
125
  fixture = [fixture]
@@ -129,60 +135,79 @@ def mock_command(cls, targets=[], opts={}, fixture=None, method=''):
129
135
  mocks.append(fixture)
130
136
 
131
137
  with mock_subprocess_popen(mocks):
132
- command = cls(targets, **opts)
138
+ command = cls(inputs, **opts)
133
139
  if method == 'run':
134
- yield cls(targets, **opts).run()
140
+ yield cls(inputs, **opts).run()
135
141
  elif method == 'si':
136
- yield cls.si([], targets, **opts)
142
+ yield cls.si([], inputs, **opts)
137
143
  elif method in ['s', 'delay']:
138
- yield getattr(cls, method)(targets, **opts)
144
+ yield getattr(cls, method)(inputs, **opts)
139
145
  else:
140
146
  yield command
141
147
 
142
148
 
143
149
  class CommandOutputTester: # Mixin for unittest.TestCase
144
150
 
145
- def _test_task_output(
151
+ def _test_runner_output(
146
152
  self,
147
- results,
153
+ runner,
148
154
  expected_output_keys=[],
149
155
  expected_output_types=[],
150
156
  expected_results=[],
157
+ expected_status='SUCCESS',
151
158
  empty_results_allowed=False):
152
159
 
153
- if not isinstance(results, list):
154
- results = [results]
160
+ console.print(f'[dim]Testing {runner.config.type} {runner.name} ...[/]', end='')
161
+
162
+ if not runner.inputs:
163
+ console.print('[dim gold3] skipped (no inputs defined).[/]')
164
+ return
165
+
166
+ if not expected_results and not expected_output_keys:
167
+ console.print('[dim gold3] (no outputs defined).[/]', end='')
155
168
 
156
169
  try:
157
- if not empty_results_allowed:
158
- self.assertGreater(len(results), 0)
170
+ # Run runner
171
+ results = runner.run()
159
172
 
160
- for item in results:
173
+ # Add execution types to allowed output types
174
+ expected_output_types.extend(EXECUTION_TYPES + STAT_TYPES)
161
175
 
162
- if DEBUG > 2:
163
- console.log('\n', log_locals=True)
176
+ # Check return code
177
+ if isinstance(runner, Command):
178
+ if not runner.ignore_return_code:
179
+ self.assertEqual(runner.return_code, 0, f'{runner.name} should have a 0 return code')
164
180
 
165
- if DEBUG > 0 and isinstance(item, OutputType):
166
- print(repr(item))
181
+ # Check results not empty
182
+ if not empty_results_allowed:
183
+ self.assertGreater(len(results), 0, f'{runner.name} should return at least 1 result')
184
+
185
+ # Check status
186
+ self.assertEqual(runner.status, expected_status, f'{runner.name} should have the status {expected_status}')
187
+
188
+ # Check results
189
+ for item in results:
167
190
 
168
191
  if expected_output_types:
169
- self.assertIn(type(item), expected_output_types)
192
+ self.assertIn(type(item), expected_output_types, f'{runner.name}: item has an unexpected output type "{type(item)}"') # noqa: E501
170
193
 
171
194
  if expected_output_keys:
172
195
  keys = [k for k in list(item.keys()) if not k.startswith('_')]
173
196
  self.assertEqual(
174
197
  set(keys).difference(set(expected_output_keys)),
175
- set())
198
+ set(),
199
+ f'{runner.name}: item is missing expected keys {set(expected_output_keys)}')
176
200
 
201
+ # Check if runner results in expected results
177
202
  if expected_results:
178
203
  for result in expected_results:
179
- self.assertIn(result, results)
204
+ self.assertIn(result, results, f'{runner.name}: {result} should be in runner results')
180
205
 
181
206
  except Exception:
182
- console.print('[bold red] failed[/]')
207
+ console.print('[dim red] failed[/]')
183
208
  raise
184
209
 
185
- console.print('[bold green] ok[/]')
210
+ console.print('[dim green] ok[/]')
186
211
 
187
212
 
188
213
  def clear_modules():
@@ -0,0 +1,28 @@
1
+ from secator.cli import ALL_WORKFLOWS
2
+
3
+
4
+ def generate_class(config):
5
+ from secator.runners import Workflow
6
+
7
+ class workflow(Workflow):
8
+ def __init__(self, inputs=[], **run_opts):
9
+ hooks = run_opts.pop('hooks', {})
10
+ results = run_opts.pop('results', [])
11
+ context = run_opts.pop('context', {})
12
+ super().__init__(
13
+ config=config,
14
+ inputs=inputs,
15
+ results=results,
16
+ run_opts=run_opts,
17
+ hooks=hooks,
18
+ context=context)
19
+ return workflow, config.name
20
+
21
+
22
+ DYNAMIC_WORKFLOWS = {}
23
+ for workflow in ALL_WORKFLOWS:
24
+ cls, name = generate_class(workflow)
25
+ DYNAMIC_WORKFLOWS[name] = cls
26
+
27
+ globals().update(DYNAMIC_WORKFLOWS)
28
+ __all__ = list(DYNAMIC_WORKFLOWS)
@@ -1,11 +1,10 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: secator
3
- Version: 0.5.2
3
+ Version: 0.7.0
4
4
  Summary: The pentester's swiss knife.
5
5
  Project-URL: Homepage, https://github.com/freelabz/secator
6
6
  Project-URL: Issues, https://github.com/freelabz/secator/issues
7
7
  Author-email: FreeLabz <sales@freelabz.com>
8
- License-File: LICENSE
9
8
  Keywords: automation,cybersecurity,pentest,recon,vulnerability
10
9
  Classifier: Development Status :: 3 - Alpha
11
10
  Classifier: Intended Audience :: Developers
@@ -19,22 +18,26 @@ Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
21
20
  Requires-Python: >=3.8
22
- Requires-Dist: bs4<1
21
+ Requires-Dist: beautifulsoup4<=5
23
22
  Requires-Dist: celery<6
24
23
  Requires-Dist: cpe<2
25
24
  Requires-Dist: dotmap<2
26
25
  Requires-Dist: free-proxy<2
27
26
  Requires-Dist: furl<3
27
+ Requires-Dist: greenlet<4
28
28
  Requires-Dist: humanize<5
29
29
  Requires-Dist: ifaddr<1
30
30
  Requires-Dist: jinja2<4
31
31
  Requires-Dist: packaging<25
32
+ Requires-Dist: psutil<7
32
33
  Requires-Dist: pydantic<3
33
34
  Requires-Dist: python-dotenv<2
34
35
  Requires-Dist: pyyaml<7
35
36
  Requires-Dist: requests<3
37
+ Requires-Dist: retry<1
36
38
  Requires-Dist: rich-click<1.7
37
39
  Requires-Dist: rich<14
40
+ Requires-Dist: tldextract<6
38
41
  Requires-Dist: typing-extensions<5
39
42
  Requires-Dist: validators<1
40
43
  Requires-Dist: xmltodict<1
@@ -44,10 +47,13 @@ Provides-Extra: dev
44
47
  Requires-Dist: asciinema-automation<1; extra == 'dev'
45
48
  Requires-Dist: coverage<8; extra == 'dev'
46
49
  Requires-Dist: flake8<8; extra == 'dev'
50
+ Requires-Dist: pytest<9; extra == 'dev'
47
51
  Requires-Dist: watchdog<3; extra == 'dev'
48
- Provides-Extra: google
49
- Requires-Dist: google-api-python-client<3; extra == 'google'
50
- Requires-Dist: gspread<7; extra == 'google'
52
+ Provides-Extra: gcs
53
+ Requires-Dist: google-cloud-storage<3; extra == 'gcs'
54
+ Provides-Extra: gdrive
55
+ Requires-Dist: google-api-python-client<3; extra == 'gdrive'
56
+ Requires-Dist: gspread<7; extra == 'gdrive'
51
57
  Provides-Extra: mongodb
52
58
  Requires-Dist: pymongo<5; extra == 'mongodb'
53
59
  Provides-Extra: redis
@@ -0,0 +1,115 @@
1
+ secator/.gitignore,sha256=da8MUc3hdb6Mo0WjZu2upn5uZMbXcBGvhdhTQ1L89HI,3093
2
+ secator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ secator/celery.py,sha256=EL7jo2u1jK95l3FojEioaepCJvEm7DeDYGSOqC7wzBI,9550
4
+ secator/celery_utils.py,sha256=iIuCn_3YkPXCtpnbaYqpppU2TARzSDyTIYHkrRyt54s,7725
5
+ secator/cli.py,sha256=ZciDocC7iC4YNta1n9jz2B7oFntDB68Xz-CAIUHDHMw,43585
6
+ secator/config.py,sha256=OqeOtT4jQLx3Y0lVsPIXonQBFtJ4o7I8ZXFweewEfTg,18148
7
+ secator/decorators.py,sha256=rev97N8QISlE1rE0etNLWzzmfFd2-DzwQYBsQCPRTYw,13755
8
+ secator/definitions.py,sha256=DGf82z9YyiYFl38VcCd0eXRcCwmWGBZTRJa5pkZZ55A,3083
9
+ secator/installer.py,sha256=fpjf5fbA5M5zDQVP4Fdr51sLoMwtoGZTe3mXh7DvD6s,9466
10
+ secator/report.py,sha256=XzJVENb5UOTaR0uDPy6V9KhqChMIOG0XMo9JCdWcnrU,3582
11
+ secator/rich.py,sha256=3ugCkgai7UNylQGUuOVAd7ghYWDSc73aSomrfKgKVxo,3290
12
+ secator/template.py,sha256=bv6xgesdW1YYsEK5oJxUtY5wUqEBGLoJQSjKtzpOxnk,4314
13
+ secator/thread.py,sha256=rgRgEtcMgs2wyfLWVlCTUCLWeg6jsMo5iKpyyrON5rY,655
14
+ secator/utils.py,sha256=wTRFPo705s3kBQes9yoHpdYF_C_NnRs3cgOMI8j1qoI,19437
15
+ secator/utils_test.py,sha256=ArHwkWW89t0IDqxO4HjJWd_tm7tp1illP4pu3nLq5yo,6559
16
+ secator/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ secator/configs/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
+ secator/configs/profiles/aggressive.yaml,sha256=JilVySABlSCYEFMjH7V0Oc3dAVlkfHOh1odTGhtm7BQ,108
19
+ secator/configs/profiles/default.yaml,sha256=kDuOF1Qkpv4oz1GZ-OwDxbi5pptAqShsCqdzkBOxXfw,149
20
+ secator/configs/profiles/stealth.yaml,sha256=Ud3EMZ2yRj0AT6w-AfV7fWUBYib9VAFp46GPpof9YaU,107
21
+ secator/configs/scans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ secator/configs/scans/domain.yaml,sha256=Dkm5dU2NdUTInkWD5cmVczvhUH0soaKPtoESeg8BVsQ,265
23
+ secator/configs/scans/host.yaml,sha256=tobz6yGeYlVnGwLVI9RLJT6MDLnGmQVVj8EOwAdksfw,189
24
+ secator/configs/scans/network.yaml,sha256=ghlgIwkWhJKQeT6V5TE51dFL-VRszWJtm4qx4ImjEEY,252
25
+ secator/configs/scans/subdomain.yaml,sha256=I007b1V5Rmm_4R9mODp6jxonHNIjXkQT9sU-AOxLSIo,123
26
+ secator/configs/scans/url.yaml,sha256=zhRiqyHq7BZHtKsmjpMvp3vmt5DRNtmfqW44sZm1tWw,158
27
+ secator/configs/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ secator/configs/workflows/cidr_recon.yaml,sha256=u1QKDKGbpJEez5QqC20Yd_nBLZd_z4nA-XFRQV7pVI4,558
29
+ secator/configs/workflows/code_scan.yaml,sha256=3H8H55NVskiDbBwNueVF8FUYkquEQn2C6evnid9zhB4,207
30
+ secator/configs/workflows/host_recon.yaml,sha256=9ypKWRbcGRmMgzuyrCjQ2EAbJO9q8HN_A-hlTKkypVg,1095
31
+ secator/configs/workflows/port_scan.yaml,sha256=JKbT01_q4CaOKZYjVspl8PjMefUtsiJmDbUlHcGc8vw,921
32
+ secator/configs/workflows/subdomain_recon.yaml,sha256=qMvvKj0rWO1xzMiaT6VZMysXYGJFrGgGHP0weYEhs2g,798
33
+ secator/configs/workflows/url_bypass.yaml,sha256=_uBzDhevJ2DOD9UkE25n7ZrmnjjfdU3lV3mnUudgdU0,180
34
+ secator/configs/workflows/url_crawl.yaml,sha256=h74dvDBNLuY1EHc9FMby3ydr34VH1qFJHQKUaIIYpcw,573
35
+ secator/configs/workflows/url_dirsearch.yaml,sha256=6UiQNge1WkryetOxwqzERra0xmNG0U8Y8CWKFLTyUUQ,677
36
+ secator/configs/workflows/url_fuzz.yaml,sha256=K1RkplXrgc7q2YJVv5A6B5MMkAzIIv31HInhRCKMpyI,774
37
+ secator/configs/workflows/url_nuclei.yaml,sha256=Qigz-hJzM7GeNA_UD46dThVIoqbWlBgiYb_i5fSyJiI,265
38
+ secator/configs/workflows/url_vuln.yaml,sha256=_nX_D96NbD8fHU4wXov7ZHD1cmiFgKc86Mh0enWGS7s,1354
39
+ secator/configs/workflows/user_hunt.yaml,sha256=e5b-CkkjhOPE8Yh5LUh0K60GKmxTgn4s-Joo7m9jKrk,180
40
+ secator/configs/workflows/wordpress.yaml,sha256=QgBUNi8Gav_efbmczUGfzlByWsmogTmGtu1MwAlvQts,279
41
+ secator/exporters/__init__.py,sha256=PnT9Ra4ArHt9VQTK5Cpc4CPY89XRwLLUGtZ8nUcknm0,415
42
+ secator/exporters/_base.py,sha256=-RrrwO_qp0ETLLHSta4T-zKtMbWdiEmz1Cw5mNo6USU,77
43
+ secator/exporters/console.py,sha256=idVotf9B0LnYZ4JQJHrgMtVfE26XkRDuvbCyJvCY2hU,249
44
+ secator/exporters/csv.py,sha256=gvwS0dgYhUKjjyNX-jal8SvKQrkjiUEwzDzC4zN8UO4,1068
45
+ secator/exporters/gdrive.py,sha256=6Nj9RTOhraBOalm2H8Fp1tItD2ZrSfgtY4SiXViefcQ,4201
46
+ secator/exporters/json.py,sha256=1ZtDf8RksPO_V0zIvnwDUxMUb630DCElAMM8_RQvyAo,474
47
+ secator/exporters/table.py,sha256=RY7Tct5kowEx8Oza8QMXFx6fKBARYfLxEbbvjKiE3eQ,1113
48
+ secator/exporters/txt.py,sha256=oMtr22di6cqyE_5yJoiWP-KElrI5QgvK1cOUrj7H7js,730
49
+ secator/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
+ secator/hooks/gcs.py,sha256=MIhntyWYz9BZdTXhWl5JznaczSq1_7fl3TVqPufuTSo,1490
51
+ secator/hooks/mongodb.py,sha256=HyjtpJSoxvSZ6aG8uBf1RFLNKGXCBDQL5eEh4xzDonA,7545
52
+ secator/output_types/__init__.py,sha256=LxCW0K1f2vdgUapc4pIEsUpBfC0TQVvqo7T57rGuZGk,1159
53
+ secator/output_types/_base.py,sha256=OgS6ICt66TzPsqo1JZwRIIwbng2HRX1i_u5qbUECgNk,2820
54
+ secator/output_types/error.py,sha256=aIBUZsAQ_ZL-zufhXLWYxmw86mCR3JxsQQF5LLZhD9E,1200
55
+ secator/output_types/exploit.py,sha256=evoqw1thYsR2qemuB5PgfmSkRc3XRI9zbBZa6z5BHNg,1615
56
+ secator/output_types/info.py,sha256=CajP35MMxHKU73IibCe6IEcHdN9RGb2ibhtC77iT5Fw,811
57
+ secator/output_types/ip.py,sha256=IIMxIJKWhudZXOy5g9xjvi5JngZEdpvwE1UBKwD4Awg,1126
58
+ secator/output_types/port.py,sha256=nG-hZ_R2zpzBMyHmBEORsAuPb1JXeOKzoVKHsWFVRrk,1876
59
+ secator/output_types/progress.py,sha256=MIbmnrLHNodLL42UgiaqLHL0OG5-w6mtUrhn0ZhksjA,1343
60
+ secator/output_types/record.py,sha256=wWBer0VemNLLSWTIVVgvLkqrP6rOXRez-24ClzcyR3s,1220
61
+ secator/output_types/stat.py,sha256=tjUDRCkirwmEcqs9B6GCpi6RKR26gBfwT3vdgMdqTf0,1127
62
+ secator/output_types/subdomain.py,sha256=lmCoK7_8I4FXWgl9kToRvDn3gr3E3uBTaQzFAOHbswE,1343
63
+ secator/output_types/tag.py,sha256=hkTuCJIJMs8ibsNO0ahGkIlD2e4euRfbo4mILmLnWNQ,1439
64
+ secator/output_types/target.py,sha256=gJWzzqhal34Cnl9oAKf0m1MSaGxRtUGdA2XbkhD_yd0,848
65
+ secator/output_types/url.py,sha256=ljfVQ8MXSo9p18vvV_x-0VxacvbvUm7AJVObozpAnos,2865
66
+ secator/output_types/user_account.py,sha256=EiT2BFl2LTCdqHF1meoMEKVhjKGroyf8-JoWHPuBOTc,1378
67
+ secator/output_types/vulnerability.py,sha256=mFDEyN-oc0rCErOQG1nTnpgfQDvA_GEHOiKmVqmvDuw,2800
68
+ secator/output_types/warning.py,sha256=2mVnmcpuFI_DPWSAnuNJ5FUo6IuVr8k1qhuo1KsTu_0,827
69
+ secator/runners/__init__.py,sha256=EBbOk37vkBy9p8Hhrbi-2VtM_rTwQ3b-0ggTyiD22cE,290
70
+ secator/runners/_base.py,sha256=cOAPaGSC-JG4Lrjpj_pvc8Go6YGERkP4qWK2gq9Nw7Y,28723
71
+ secator/runners/_helpers.py,sha256=FGogmmdHfCWmIyq7wRprwU1oOSxesOu3Y0N4GyAgiGw,2000
72
+ secator/runners/celery.py,sha256=bqvDTTdoHiGRCt0FRvlgFHQ_nsjKMP5P0PzGbwfCj_0,425
73
+ secator/runners/command.py,sha256=mlgNOlUXGGGIlNBgk7u3gU2N6EOZeNzjn3A5yMJfDA0,23693
74
+ secator/runners/scan.py,sha256=tuPuqwL6fIS4UbCoy5WPKthYWm_LL-vCPRD2qK58HZE,1232
75
+ secator/runners/task.py,sha256=JXlwo3DyQnu69RbQ8xvJnXu6y0rDYN-3iT4q4gy39tI,2004
76
+ secator/runners/workflow.py,sha256=vry_MZFx6dRrorTrdsUqvhMZGOLPCdzpxkvN6fnt62w,3783
77
+ secator/scans/__init__.py,sha256=nlNLiRl7Vu--c_iXClFFcagMd_b_OWKitq8tX1-1krQ,641
78
+ secator/serializers/__init__.py,sha256=OP5cmFl77ovgSCW_IDcZ21St2mUt5UK4QHfrsK2KvH8,248
79
+ secator/serializers/dataclass.py,sha256=RqICpfsYWGjHAACAA2h2jZ_69CFHim4VZwcBqowGMcQ,1010
80
+ secator/serializers/json.py,sha256=UJwAymRzjF-yBKOgz1MTOyBhQcdQg7fOKRXgmHIu8fo,411
81
+ secator/serializers/regex.py,sha256=fh-fE0RGvKSGKByFtwmKsWriRpZR9PXZQsY9JybHBWI,489
82
+ secator/tasks/__init__.py,sha256=yRIZf9E47aS7o6rpgAJLgJUpX2cug1ofZeq8QsxgyjU,192
83
+ secator/tasks/_categories.py,sha256=z3STC1BXOptlcJkHu02U1aAK9yAWl5x6e4Y5MWH_44M,10510
84
+ secator/tasks/bbot.py,sha256=RMgi-I4LA3d_Mxhe275po49PmfobN-l9-c4LPyu8yt8,6830
85
+ secator/tasks/bup.py,sha256=IjZ30Xmu3BrdKbpPgkR8QnBw8vHbPTyWG2u-S98o4_s,3009
86
+ secator/tasks/cariddi.py,sha256=7S92pp7tvihoz9fAiMpmcfPzEvxEJKMlk-IqAvVDISA,2906
87
+ secator/tasks/dalfox.py,sha256=hHQgYuZ7AGQCQtcN8hSM9uPnzeq1DSr_cpOxnn7-660,1850
88
+ secator/tasks/dirsearch.py,sha256=3HqIbefKarG-RwfI5E2Q9GdNou2NhN283JvWT1JmJz8,2169
89
+ secator/tasks/dnsx.py,sha256=nK14_DeyX0QTpAMdIP0LSSEOEu5_tQemyFW0XPjA2f8,2266
90
+ secator/tasks/dnsxbrute.py,sha256=5Bq7ND6hnAzL1ADcVikma70xnrdq7J-xlw1BHd1XbxQ,1330
91
+ secator/tasks/feroxbuster.py,sha256=oIItVKcFQ0bmz1bnPOOvnuHw7haPgj66UW-sc-yRN-g,2731
92
+ secator/tasks/ffuf.py,sha256=VGrtjFgSX6Q1I8h1wjPO5XwBFCfZXmn0DQsn9gxEUXc,2468
93
+ secator/tasks/fping.py,sha256=krBGH3tYjRUYaAaXARhnwWJB8rbhVgC2kBnFcd7Om18,1127
94
+ secator/tasks/gau.py,sha256=MzgnImbkRjB_wI-7YPUnTgyMYbyKcderLagTO_20gPw,1602
95
+ secator/tasks/gf.py,sha256=y8Fc0sRLGqNuwUjTBgLk3HEw3ZOnh09nB_GTufGErNA,962
96
+ secator/tasks/gospider.py,sha256=KGINm9kxrq546xi1yN8_OwNCNDxSW9vVRYDAlvNajBs,2303
97
+ secator/tasks/grype.py,sha256=vKE0yLHV68UYbIlmPvo_MM3JJvWkwIS57lXPGVdwliE,2450
98
+ secator/tasks/h8mail.py,sha256=9vWCPteF87vToylQoiItOduqre1LHfvt_iuAgB92cs0,1911
99
+ secator/tasks/httpx.py,sha256=5oI8vK7w94nsQlKs9Ve4yZsCmogbsiB5PqGarR3eIIM,5854
100
+ secator/tasks/katana.py,sha256=U9gqw1RHnZ3d-abCQ6JpRBEHc737V4y8goKtwd29OH8,5246
101
+ secator/tasks/maigret.py,sha256=J_APAVEk1lsZBoJRKTDm0l9k1RjEV1tAJunRkP9vaUo,2129
102
+ secator/tasks/mapcidr.py,sha256=zYIlbjJadQY_g2X8hS5vK_789O_XfI2mkIH-Cs8y6hk,944
103
+ secator/tasks/msfconsole.py,sha256=fGbez7YYk5PP7V4I7e_UURzbyS4jHXX-ZLlDnrYOoeA,5796
104
+ secator/tasks/naabu.py,sha256=-wv2thzRx4IcM1hHK1KooX8dLoixlnMjngk1k80n16I,1691
105
+ secator/tasks/nmap.py,sha256=cA4ZEkaAFOX6pmlEfEOrATVwQfGIUwogWNB0IZ-64P8,12208
106
+ secator/tasks/nuclei.py,sha256=kN-9niw2hfA_IYYHGNtvtI_BbXpT4VxCiE40jAJJWAY,4221
107
+ secator/tasks/searchsploit.py,sha256=Oi8KMK5H5m5Up53i1B9EN0MFCYT7IvGlI9ZtIAXnLeg,3183
108
+ secator/tasks/subfinder.py,sha256=C6W5NnXT92OUB1aSS9IYseqdI3wDMAz70TOEl8X-o3U,1213
109
+ secator/tasks/wpscan.py,sha256=Htab_M7XxufrZal5fKewLRMTTM3Tpfix1jTrrX1AE8w,5188
110
+ secator/workflows/__init__.py,sha256=ivpZHiYYlj4JqlXLRmB9cmAPUGdk8QcUrCRL34hIqEA,665
111
+ secator-0.7.0.dist-info/METADATA,sha256=rVggAy4Yyc1KbhA2KVO5qNAwfrr-3QmExdVn2PvRyaY,14300
112
+ secator-0.7.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
113
+ secator-0.7.0.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
114
+ secator-0.7.0.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
115
+ secator-0.7.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.24.2
2
+ Generator: hatchling 1.26.3
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,101 +0,0 @@
1
- secator/.gitignore,sha256=da8MUc3hdb6Mo0WjZu2upn5uZMbXcBGvhdhTQ1L89HI,3093
2
- secator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- secator/celery.py,sha256=8BPgxnxBWe018tZL6-0WaZQdzHV8rdKS_cxYGuPStiw,10999
4
- secator/cli.py,sha256=f959ENOt4C107hcnG_z4bEVgnNS4y6VqkyybtNk356c,35996
5
- secator/config.py,sha256=Yzb7429RweDCB9Qz88710FKnHiFvg9o0tU2Gu_JFzyE,17534
6
- secator/decorators.py,sha256=SIS_32SbeN9iTx82mvy9F9vLpjofRYspOOLCXytIO2g,10764
7
- secator/definitions.py,sha256=Spr62Nc0TweBAa84iRGSwNkIvXlKofPxtIi795gqTjc,3047
8
- secator/installer.py,sha256=fpjf5fbA5M5zDQVP4Fdr51sLoMwtoGZTe3mXh7DvD6s,9466
9
- secator/report.py,sha256=RCNowMcGDalB51hCoB0aO1adTmDrcnVbKZnpZPjfCCo,2615
10
- secator/rich.py,sha256=W4PipeZfIVnERfW3ySeWSvnZ90jhCFiABBoERYy_6kM,3177
11
- secator/template.py,sha256=MRCzvn8FJ7D4n8V4ceBwAjPsdLhTWjDRu5VLefmLb6M,3705
12
- secator/utils.py,sha256=cN1xi1hB_Wmi30TUgx_HztsC5hosS327cf1szGAzkgU,11681
13
- secator/utils_test.py,sha256=95KNjEePk39SrDPL9XXV_L1GAdkf_LwBKU02Vuj-tZA,5387
14
- secator/configs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- secator/configs/profiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- secator/configs/profiles/aggressive.yaml,sha256=JilVySABlSCYEFMjH7V0Oc3dAVlkfHOh1odTGhtm7BQ,108
17
- secator/configs/profiles/default.yaml,sha256=kDuOF1Qkpv4oz1GZ-OwDxbi5pptAqShsCqdzkBOxXfw,149
18
- secator/configs/profiles/stealth.yaml,sha256=Ud3EMZ2yRj0AT6w-AfV7fWUBYib9VAFp46GPpof9YaU,107
19
- secator/configs/scans/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- secator/configs/scans/domain.yaml,sha256=Dkm5dU2NdUTInkWD5cmVczvhUH0soaKPtoESeg8BVsQ,265
21
- secator/configs/scans/host.yaml,sha256=tobz6yGeYlVnGwLVI9RLJT6MDLnGmQVVj8EOwAdksfw,189
22
- secator/configs/scans/network.yaml,sha256=ghlgIwkWhJKQeT6V5TE51dFL-VRszWJtm4qx4ImjEEY,252
23
- secator/configs/scans/subdomain.yaml,sha256=I007b1V5Rmm_4R9mODp6jxonHNIjXkQT9sU-AOxLSIo,123
24
- secator/configs/scans/url.yaml,sha256=zhRiqyHq7BZHtKsmjpMvp3vmt5DRNtmfqW44sZm1tWw,158
25
- secator/configs/workflows/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- secator/configs/workflows/cidr_recon.yaml,sha256=u1QKDKGbpJEez5QqC20Yd_nBLZd_z4nA-XFRQV7pVI4,558
27
- secator/configs/workflows/code_scan.yaml,sha256=3H8H55NVskiDbBwNueVF8FUYkquEQn2C6evnid9zhB4,207
28
- secator/configs/workflows/host_recon.yaml,sha256=wHXMycHQpWq8gVc8YSr6Kv-_0CtIfmkr6j7AY6Lah2w,1018
29
- secator/configs/workflows/port_scan.yaml,sha256=DPXL8m96h3oFdk7Lw_6dP1j0pl_qzi_kWszZvaId5f0,796
30
- secator/configs/workflows/subdomain_recon.yaml,sha256=qMvvKj0rWO1xzMiaT6VZMysXYGJFrGgGHP0weYEhs2g,798
31
- secator/configs/workflows/url_crawl.yaml,sha256=h74dvDBNLuY1EHc9FMby3ydr34VH1qFJHQKUaIIYpcw,573
32
- secator/configs/workflows/url_dirsearch.yaml,sha256=6UiQNge1WkryetOxwqzERra0xmNG0U8Y8CWKFLTyUUQ,677
33
- secator/configs/workflows/url_fuzz.yaml,sha256=K1RkplXrgc7q2YJVv5A6B5MMkAzIIv31HInhRCKMpyI,774
34
- secator/configs/workflows/url_nuclei.yaml,sha256=Qigz-hJzM7GeNA_UD46dThVIoqbWlBgiYb_i5fSyJiI,265
35
- secator/configs/workflows/url_vuln.yaml,sha256=RNeS6o1wworxCznvnAgrfzVnMayD-9hFQ0-W0NbqMJY,1345
36
- secator/configs/workflows/user_hunt.yaml,sha256=e5b-CkkjhOPE8Yh5LUh0K60GKmxTgn4s-Joo7m9jKrk,180
37
- secator/configs/workflows/wordpress.yaml,sha256=QgBUNi8Gav_efbmczUGfzlByWsmogTmGtu1MwAlvQts,279
38
- secator/exporters/__init__.py,sha256=2nBPOOas9Fp4nmo9pjSw3mvklZNHL8BmH88w_i-eaJc,356
39
- secator/exporters/_base.py,sha256=-RrrwO_qp0ETLLHSta4T-zKtMbWdiEmz1Cw5mNo6USU,77
40
- secator/exporters/csv.py,sha256=xsPMljzJhoTc8lcfxWBIKH2niK6KeYL7Bx2NzpdsYw0,982
41
- secator/exporters/gdrive.py,sha256=hq6PtCVejeqp9cipcAkH5ZsijBWB_SXIcW9uctYJAYM,4143
42
- secator/exporters/json.py,sha256=cWkDugUdy-lbcPFKNgBrRFxHspiFhjVbJfdDABjJ9uk,431
43
- secator/exporters/table.py,sha256=RHQoaFeeyeoBGNucJgrlk2KtmVqe9BGNtAAYee7xJ8Y,210
44
- secator/exporters/txt.py,sha256=QbiwWYGgHpITGw1sL2TX-S3AfmBdJ-VOWkPJzuBvOu4,785
45
- secator/hooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- secator/hooks/mongodb.py,sha256=PGcM6hkTl4bt46-cPlFgcY-PfNWmHpz_eiv77XeV0-A,7036
47
- secator/output_types/__init__.py,sha256=uj6AXDeorECPwhwekNVGjQbGv41jHG_8udkuoc4XzW0,854
48
- secator/output_types/_base.py,sha256=bld1ED0pN1hOvwBV2canrlKrfBCgawzWKPDH6F3jVQE,2469
49
- secator/output_types/exploit.py,sha256=tMQcEr4kAZ-na4F6sU2WpVH6Pa6r0oPumXOrxptTrbY,1621
50
- secator/output_types/ip.py,sha256=ySEqH3Gs7U41I1kS8olZ_p3Mk7JryEbXHLyexqlBQNA,995
51
- secator/output_types/port.py,sha256=1ZmV4FDvwk1dvFXySnz5yIp13hbaRhnunxnETm66Os0,1607
52
- secator/output_types/progress.py,sha256=u_-4IiECTSCJf-X_RkFOoFyb8mrff2rMcm8GGqLZ8hs,1231
53
- secator/output_types/record.py,sha256=WnI0yvwzrO2Wt7OWciHMOuIRRLbuSOAJczdNshV7tYU,1192
54
- secator/output_types/subdomain.py,sha256=lmCoK7_8I4FXWgl9kToRvDn3gr3E3uBTaQzFAOHbswE,1343
55
- secator/output_types/tag.py,sha256=8AlT0VigsYP04GN8sPCTM07IlL5uMUmFgsNa9IDCoyY,1431
56
- secator/output_types/target.py,sha256=gJWzzqhal34Cnl9oAKf0m1MSaGxRtUGdA2XbkhD_yd0,848
57
- secator/output_types/url.py,sha256=G_28pWwwLe52rWQGz58GH5vTYYN9sTpv-1AgqmCHECw,2693
58
- secator/output_types/user_account.py,sha256=EiT2BFl2LTCdqHF1meoMEKVhjKGroyf8-JoWHPuBOTc,1378
59
- secator/output_types/vulnerability.py,sha256=cWaz6zzClnrKQmdXr4gOcudcWqnvlp-6SxOLPpO29Z8,2712
60
- secator/runners/__init__.py,sha256=EBbOk37vkBy9p8Hhrbi-2VtM_rTwQ3b-0ggTyiD22cE,290
61
- secator/runners/_base.py,sha256=Xmcq-WsIsSgNv9zavXixXDTt9qmRO4eyU-Hh1EAn1-k,28602
62
- secator/runners/_helpers.py,sha256=kxXfxP4LOCz49p5Y-OKuUqvVAmRPtAoK2O9PHoUxCX0,3947
63
- secator/runners/command.py,sha256=F6Eg5hLisk6KLXKSBgNIURu2A67heNzmkVF_OYF_Xdo,18688
64
- secator/runners/scan.py,sha256=ZN6bgb3yqu5wemq_VVqul5VTU64TtYUl_0wkcW1aXRU,1647
65
- secator/runners/task.py,sha256=c038lkkQ2H1GpLcHp46PEmSSXsIIRA5jnDgw6x8rEAY,2826
66
- secator/runners/workflow.py,sha256=i2s-lJYIMJfHrxdVwglG9bkCGKu90yUNAM2lfwT6RIA,3689
67
- secator/serializers/__init__.py,sha256=OP5cmFl77ovgSCW_IDcZ21St2mUt5UK4QHfrsK2KvH8,248
68
- secator/serializers/dataclass.py,sha256=g5gMT4NwndjhGcGbFuYEs07AZW_Q_m9orov_edVEGlI,792
69
- secator/serializers/json.py,sha256=XwuSQOBwrOAs16F5HtY-Q-rAGAxfNvlq3z-Nb2gwigE,304
70
- secator/serializers/regex.py,sha256=hGJ_1JSOv9xPtfn_umHlsjnR_alnsDFv-UmjYCC3vwU,314
71
- secator/tasks/__init__.py,sha256=yRIZf9E47aS7o6rpgAJLgJUpX2cug1ofZeq8QsxgyjU,192
72
- secator/tasks/_categories.py,sha256=2cUsZOdYHA-YXJwryU2FTTT4Y4xXzmDJ92F8ud-MDJQ,10402
73
- secator/tasks/cariddi.py,sha256=GKVJ8nWtJu9fB_FhAVYA2TX3fMdKYdbMpH2IhCkj_no,3155
74
- secator/tasks/dalfox.py,sha256=nrLkIbTNz_J7LgUy_3kBgzhTUbQi3RmiSJhc9HWa05c,1744
75
- secator/tasks/dirsearch.py,sha256=2hJeJZJwaAl3-UAjBwlmjW1w9bxjVWxxwfcaTTxqClc,2387
76
- secator/tasks/dnsx.py,sha256=H_3z87KAK-ndAQgCwS8TRWaUX_Hh54qEeuKQCS4rjBw,1771
77
- secator/tasks/dnsxbrute.py,sha256=TT1wEU6BSS0VVwk7c5cFRKEnPji3HeK_tLrWtLJBSvk,1245
78
- secator/tasks/feroxbuster.py,sha256=9QQpd8T0CSMfXf_BMmCX4LeIogyvsc_ccXFJnEocxVo,3011
79
- secator/tasks/ffuf.py,sha256=eJyXY912hg8e_8sibzo7X7704QM4vI4C0o317bcTV-c,2428
80
- secator/tasks/fping.py,sha256=P2EAPUGgwEC4Geh2zUbBPKF9bdqrlrdDg-R_TYLTFng,1127
81
- secator/tasks/gau.py,sha256=Sq5l277cGxpT2bB5s1RqrggP804RKbC6xxgLDZZzLFs,1391
82
- secator/tasks/gf.py,sha256=WlhoEyL6xE79w6nE5XNSXHs-jVeO10njqJxBF8w20sA,945
83
- secator/tasks/gospider.py,sha256=_UlTb9G5Ss8D68NT53s0_rI6TnG00Ph0yxWyHic7cKs,2172
84
- secator/tasks/grype.py,sha256=n60Zs9d1NWJFHQ0DwIZib5wu3xH-tV2RzgLYwuQSTo4,2413
85
- secator/tasks/h8mail.py,sha256=hZBpfV6M1mbpD_PbDHxLI5HMvqAvTeY_W0lbkq3Hugo,2037
86
- secator/tasks/httpx.py,sha256=O4jkee6So9MSyHTb7n_owFiL3OMO0697uxDq7ULbq5s,4108
87
- secator/tasks/katana.py,sha256=edsjIVj8sh5_ubCB5AFjANwute0Uv4Vdry0XB10xE1Q,4677
88
- secator/tasks/maigret.py,sha256=PZDTICJ4LZF3joKe-dXu2alffakD_1sxBuNEUBtJDm4,2098
89
- secator/tasks/mapcidr.py,sha256=7aa2WXQATWgIQo5oA12URjAg80L6MFMGdxScxls8DuA,980
90
- secator/tasks/msfconsole.py,sha256=Cm0vzOFff17C4M1YjkgU6T7Jc5-ClBK0Qi_529qVRb0,6065
91
- secator/tasks/naabu.py,sha256=RNs4NCZXgKhPqzR78l6l61tau0mGHuj6C3If7fimpgs,1594
92
- secator/tasks/nmap.py,sha256=bzxFSijOjBIky_6jIPgiD-Rham0bmdeBoI2nY0uHJks,11422
93
- secator/tasks/nuclei.py,sha256=lKZYPVcnCYomd830-ZCOz4fyc8xAKjNDuKayyz0BPek,3507
94
- secator/tasks/searchsploit.py,sha256=tIqCwYFIyHIgJbtcTL56PXqd-MCvoXOpvSDgoK_dxzc,2953
95
- secator/tasks/subfinder.py,sha256=cpFyFCpVaDZ3QAjNId26ezOwntn3CA5Uk-AC2l0mo0E,1087
96
- secator/tasks/wpscan.py,sha256=UVWnBPOQ1RDB2wzMswWR6vc6cucYgHtuJ8pLZoqCM40,5434
97
- secator-0.5.2.dist-info/METADATA,sha256=ZMQMB3C0AM0JpSqfAwOHOMYvUJPytL6pJvOg60ozofg,14095
98
- secator-0.5.2.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
99
- secator-0.5.2.dist-info/entry_points.txt,sha256=lPgsqqUXWgiuGSfKy-se5gHdQlAXIwS_A46NYq7Acic,44
100
- secator-0.5.2.dist-info/licenses/LICENSE,sha256=19W5Jsy4WTctNkqmZIqLRV1gTDOp01S3LDj9iSgWaJ0,2867
101
- secator-0.5.2.dist-info/RECORD,,