exploitfarm 2.1.0__tar.gz → 2.2.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 (57) hide show
  1. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/PKG-INFO +9 -9
  2. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/__init__.py +1 -1
  3. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/enums.py +10 -0
  4. exploitfarm-2.2.0/exploitfarm/models/submitter.py +66 -0
  5. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm.egg-info/PKG-INFO +9 -9
  6. exploitfarm-2.2.0/exploitfarm.egg-info/requires.txt +15 -0
  7. exploitfarm-2.2.0/requirements.txt +16 -0
  8. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/setup.py +1 -1
  9. exploitfarm-2.1.0/exploitfarm/models/submitter.py +0 -27
  10. exploitfarm-2.1.0/exploitfarm.egg-info/requires.txt +0 -15
  11. exploitfarm-2.1.0/requirements.txt +0 -16
  12. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/MANIFEST.in +0 -0
  13. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/README.md +0 -0
  14. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/__main__.py +0 -0
  15. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/_init_exposed.py +0 -0
  16. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/attack_storage.py +0 -0
  17. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/autotune.py +0 -0
  18. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/connection.py +0 -0
  19. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/core_orchestration.py +0 -0
  20. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/local_executor.py +0 -0
  21. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/__init__.py +0 -0
  22. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/client.py +0 -0
  23. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/dbtypes.py +0 -0
  24. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/exploit.py +0 -0
  25. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/exploit_template.py +0 -0
  26. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/flags.py +0 -0
  27. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/groups.py +0 -0
  28. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/response.py +0 -0
  29. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/service.py +0 -0
  30. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/models/teams.py +0 -0
  31. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/team_provider.py +0 -0
  32. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/__init__.py +0 -0
  33. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/config.py +0 -0
  34. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/exploitdownload.py +0 -0
  35. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/exploitinit.py +0 -0
  36. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/group_prejoin.py +0 -0
  37. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/group_select.py +0 -0
  38. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/login.py +0 -0
  39. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/shared_attack_group.py +0 -0
  40. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/startxploit.py +0 -0
  41. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/tui/template.py +0 -0
  42. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/utils/__init__.py +0 -0
  43. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/utils/cmd.py +0 -0
  44. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/utils/config.py +0 -0
  45. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/utils/exploit.py +0 -0
  46. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/utils/paths.py +0 -0
  47. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/utils/reqs.py +0 -0
  48. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/utils/templates.py +0 -0
  49. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/utils/threadpool.py +0 -0
  50. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/utils/windows_close_fix.py +0 -0
  51. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/xfarm.py +0 -0
  52. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm/xploit.py +0 -0
  53. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm.egg-info/SOURCES.txt +0 -0
  54. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm.egg-info/dependency_links.txt +0 -0
  55. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/exploitfarm.egg-info/top_level.txt +0 -0
  56. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/setup.cfg +0 -0
  57. {exploitfarm-2.1.0 → exploitfarm-2.2.0}/xfarm +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: exploitfarm
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Exploit Farm client
5
5
  Home-page: https://github.com/pwnzer0tt1/exploitfarm
6
6
  Author: Pwnzer0tt1
@@ -10,21 +10,21 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (G
10
10
  Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
- Requires-Dist: requests>=2.32.5
14
- Requires-Dist: urllib3>=2.5.0
13
+ Requires-Dist: requests>=2.34.2
14
+ Requires-Dist: urllib3>=2.7.0
15
15
  Requires-Dist: python-dateutil>=2.9.0.post0
16
16
  Requires-Dist: pydantic>=2
17
- Requires-Dist: typing-extensions>=4.7.1
17
+ Requires-Dist: typing-extensions>=4.16.0
18
18
  Requires-Dist: fasteners>=0.20
19
19
  Requires-Dist: toml>=0.10.2
20
20
  Requires-Dist: psutil>=7.2.2
21
21
  Requires-Dist: dirhash>=0.5.0
22
22
  Requires-Dist: requests-toolbelt>=1.0.0
23
- Requires-Dist: python-socketio[asyncio_client]>=5.14.1
24
- Requires-Dist: aiohttp>=3.9.0
25
- Requires-Dist: textual>=3.0.0
26
- Requires-Dist: typer>=0.16
27
- Requires-Dist: platformdirs>=4.0
23
+ Requires-Dist: python-socketio[asyncio_client]>=5.16.4
24
+ Requires-Dist: aiohttp>=3.14.3
25
+ Requires-Dist: textual>=8.2.8
26
+ Requires-Dist: typer>=0.27.2
27
+ Requires-Dist: platformdirs>=4.11.7
28
28
  Dynamic: author
29
29
  Dynamic: author-email
30
30
  Dynamic: classifier
@@ -1,5 +1,5 @@
1
1
  def _get_version():
2
- v = "2.1.0" if "{" not in "2.1.0" else "0.0.0"
2
+ v = "2.2.0" if "{" not in "2.2.0" else "0.0.0"
3
3
  if v == "0.0.0":
4
4
  import os
5
5
  env_v = os.getenv("EXPLOITFARM_VERSION")
@@ -60,6 +60,16 @@ class AttackMode(Enum):
60
60
  LOOP_DELAY = "loop-delay"
61
61
  RND_TICK = "rnd-tick"
62
62
 
63
+ class SubmitterEnvStatus(Enum):
64
+ """State of a submitter's isolated dependency environment (see backend/utils/submitter_env.py)."""
65
+ not_required = "not-required" # the submitter declares no requirements
66
+ absent = "absent" # requirements are declared but nothing was installed yet
67
+ installing = "installing" # an installation is currently running
68
+ stale = "stale" # installed, but the requirements changed since
69
+ ready = "ready" # installed and matching the declared requirements
70
+ failed = "failed" # the last installation attempt failed
71
+ cancelled = "cancelled" # the last installation was stopped by the user
72
+
63
73
  class SetupStatus(Enum):
64
74
  SETUP = "setup"
65
75
  RUNNING = "running"
@@ -0,0 +1,66 @@
1
+ from typing import Any, Dict, List
2
+ from pydantic import BaseModel, Field, AwareDatetime
3
+ from exploitfarm.models.dbtypes import SubmitterID
4
+ from exploitfarm.models.enums import SubmitterEnvStatus
5
+
6
+ ###-- Submitter Models --###
7
+
8
+ SubmitterKargs = Dict[str, Dict[str, Any]]
9
+
10
+ class SubmitterDTO(BaseModel):
11
+ id: SubmitterID
12
+ name: str
13
+ code: str
14
+ kargs: SubmitterKargs = {}
15
+ # requirements.txt-style block installed in the submitter's isolated environment
16
+ requirements: str = ""
17
+ created_at: AwareDatetime
18
+
19
+ class SubmitterAddForm(BaseModel):
20
+ name: str = Field("", min_length=1)
21
+ code: str
22
+ kargs: Dict[str, Any]|None = None
23
+ requirements: str|None = None
24
+
25
+ class SubmitterInfoForm(BaseModel):
26
+ code: str
27
+
28
+ class SubmitterEditForm(BaseModel):
29
+ code: str|None = None
30
+ name: str|None = Field(None, min_length=1)
31
+ kargs: Dict[str, Any]|None = None
32
+ requirements: str|None = None
33
+
34
+ class SubmitterCodeInfo(BaseModel):
35
+ """Result of the static analysis of a submitter's code (see POST /submitters/check)."""
36
+ kargs: SubmitterKargs = {}
37
+ # Requirements declared inside the code itself (PEP 723 block or __requirements__)
38
+ inline_requirements: List[str] = []
39
+
40
+ ###-- Submitter Environment Models --###
41
+
42
+ class SubmitterEnvPackage(BaseModel):
43
+ name: str
44
+ version: str
45
+
46
+ class SubmitterEnvDTO(BaseModel):
47
+ """State of the isolated dependency environment of a submitter."""
48
+ submitter_id: SubmitterID
49
+ status: SubmitterEnvStatus
50
+ # Requirements the environment *should* contain (explicit + inline, merged)
51
+ requirements: List[str] = []
52
+ # Requirements the last installation actually ran with
53
+ installed_requirements: List[str] = []
54
+ hash: str
55
+ installed_hash: str|None = None
56
+ installed_at: str|None = None
57
+ started_at: str|None = None
58
+ duration: float|None = None
59
+ error: str|None = None
60
+ packages: List[SubmitterEnvPackage] = []
61
+ path: str
62
+ log: str = ""
63
+
64
+ class SubmitterEnvInstallForm(BaseModel):
65
+ # Rebuild the environment even if it already matches the declared requirements
66
+ force: bool = False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: exploitfarm
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Exploit Farm client
5
5
  Home-page: https://github.com/pwnzer0tt1/exploitfarm
6
6
  Author: Pwnzer0tt1
@@ -10,21 +10,21 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (G
10
10
  Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
- Requires-Dist: requests>=2.32.5
14
- Requires-Dist: urllib3>=2.5.0
13
+ Requires-Dist: requests>=2.34.2
14
+ Requires-Dist: urllib3>=2.7.0
15
15
  Requires-Dist: python-dateutil>=2.9.0.post0
16
16
  Requires-Dist: pydantic>=2
17
- Requires-Dist: typing-extensions>=4.7.1
17
+ Requires-Dist: typing-extensions>=4.16.0
18
18
  Requires-Dist: fasteners>=0.20
19
19
  Requires-Dist: toml>=0.10.2
20
20
  Requires-Dist: psutil>=7.2.2
21
21
  Requires-Dist: dirhash>=0.5.0
22
22
  Requires-Dist: requests-toolbelt>=1.0.0
23
- Requires-Dist: python-socketio[asyncio_client]>=5.14.1
24
- Requires-Dist: aiohttp>=3.9.0
25
- Requires-Dist: textual>=3.0.0
26
- Requires-Dist: typer>=0.16
27
- Requires-Dist: platformdirs>=4.0
23
+ Requires-Dist: python-socketio[asyncio_client]>=5.16.4
24
+ Requires-Dist: aiohttp>=3.14.3
25
+ Requires-Dist: textual>=8.2.8
26
+ Requires-Dist: typer>=0.27.2
27
+ Requires-Dist: platformdirs>=4.11.7
28
28
  Dynamic: author
29
29
  Dynamic: author-email
30
30
  Dynamic: classifier
@@ -0,0 +1,15 @@
1
+ requests>=2.34.2
2
+ urllib3>=2.7.0
3
+ python-dateutil>=2.9.0.post0
4
+ pydantic>=2
5
+ typing-extensions>=4.16.0
6
+ fasteners>=0.20
7
+ toml>=0.10.2
8
+ psutil>=7.2.2
9
+ dirhash>=0.5.0
10
+ requests-toolbelt>=1.0.0
11
+ python-socketio[asyncio_client]>=5.16.4
12
+ aiohttp>=3.14.3
13
+ textual>=8.2.8
14
+ typer>=0.27.2
15
+ platformdirs>=4.11.7
@@ -0,0 +1,16 @@
1
+ requests>=2.34.2
2
+ urllib3>=2.7.0
3
+ python-dateutil>=2.9.0.post0
4
+ pydantic>=2
5
+ typing-extensions>=4.16.0
6
+ fasteners>=0.20
7
+ toml>=0.10.2
8
+ psutil>=7.2.2
9
+ dirhash>=0.5.0
10
+ requests-toolbelt>=1.0.0
11
+ python-socketio[asyncio_client]>=5.16.4
12
+ aiohttp>=3.14.3
13
+ textual>=8.2.8
14
+ typer>=0.27.2
15
+ platformdirs>=4.11.7
16
+
@@ -10,7 +10,7 @@ with open("requirements.txt", "r", encoding="utf-8") as f:
10
10
  if not ele.strip().startswith("#") and ele.strip() != ""
11
11
  ]
12
12
 
13
- VERSION = "2.1.0"
13
+ VERSION = "2.2.0"
14
14
 
15
15
  setuptools.setup(
16
16
  name="exploitfarm",
@@ -1,27 +0,0 @@
1
- from typing import Any, Dict
2
- from pydantic import BaseModel, Field, AwareDatetime
3
- from exploitfarm.models.dbtypes import SubmitterID
4
-
5
- ###-- Submitter Models --###
6
-
7
- SubmitterKargs = Dict[str, Dict[str, Any]]
8
-
9
- class SubmitterDTO(BaseModel):
10
- id: SubmitterID
11
- name: str
12
- code: str
13
- kargs: SubmitterKargs = {}
14
- created_at: AwareDatetime
15
-
16
- class SubmitterAddForm(BaseModel):
17
- name: str = Field("", min_length=1)
18
- code: str
19
- kargs: Dict[str, Any]|None = None
20
-
21
- class SubmitterInfoForm(BaseModel):
22
- code: str
23
-
24
- class SubmitterEditForm(BaseModel):
25
- code: str|None = None
26
- name: str|None = Field(None, min_length=1)
27
- kargs: Dict[str, Any]|None = None
@@ -1,15 +0,0 @@
1
- requests>=2.32.5
2
- urllib3>=2.5.0
3
- python-dateutil>=2.9.0.post0
4
- pydantic>=2
5
- typing-extensions>=4.7.1
6
- fasteners>=0.20
7
- toml>=0.10.2
8
- psutil>=7.2.2
9
- dirhash>=0.5.0
10
- requests-toolbelt>=1.0.0
11
- python-socketio[asyncio_client]>=5.14.1
12
- aiohttp>=3.9.0
13
- textual>=3.0.0
14
- typer>=0.16
15
- platformdirs>=4.0
@@ -1,16 +0,0 @@
1
- requests>=2.32.5
2
- urllib3>=2.5.0
3
- python-dateutil>=2.9.0.post0
4
- pydantic>=2
5
- typing-extensions>=4.7.1
6
- fasteners>=0.20
7
- toml>=0.10.2
8
- psutil>=7.2.2
9
- dirhash>=0.5.0
10
- requests-toolbelt>=1.0.0
11
- python-socketio[asyncio_client]>=5.14.1
12
- aiohttp>=3.9.0
13
- textual>=3.0.0
14
- typer>=0.16
15
- platformdirs>=4.0
16
-
File without changes
File without changes
File without changes
File without changes