prelude-cli-beta 1399__tar.gz → 1400__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.

Potentially problematic release.


This version of prelude-cli-beta might be problematic. Click here for more details.

Files changed (30) hide show
  1. {prelude_cli_beta-1399/prelude_cli_beta.egg-info → prelude_cli_beta-1400}/PKG-INFO +2 -2
  2. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/cli.py +10 -10
  3. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/auth.py +1 -1
  4. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/build.py +4 -4
  5. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/detect.py +4 -4
  6. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/generate.py +3 -3
  7. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/iam.py +3 -3
  8. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/jobs.py +3 -3
  9. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/partner.py +3 -3
  10. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/scm.py +137 -6
  11. {prelude_cli_beta-1399 → prelude_cli_beta-1400/prelude_cli_beta.egg-info}/PKG-INFO +2 -2
  12. prelude_cli_beta-1400/prelude_cli_beta.egg-info/SOURCES.txt +25 -0
  13. {prelude_cli_beta-1399 → prelude_cli_beta-1400}/prelude_cli_beta.egg-info/requires.txt +1 -1
  14. prelude_cli_beta-1400/prelude_cli_beta.egg-info/top_level.txt +1 -0
  15. {prelude_cli_beta-1399 → prelude_cli_beta-1400}/setup.cfg +2 -2
  16. prelude_cli_beta-1399/prelude_cli/templates/README.md +0 -28
  17. prelude_cli_beta-1399/prelude_cli/templates/template.go +0 -24
  18. prelude_cli_beta-1399/prelude_cli_beta.egg-info/SOURCES.txt +0 -27
  19. prelude_cli_beta-1399/prelude_cli_beta.egg-info/top_level.txt +0 -1
  20. {prelude_cli_beta-1399 → prelude_cli_beta-1400}/LICENSE +0 -0
  21. {prelude_cli_beta-1399 → prelude_cli_beta-1400}/MANIFEST.in +0 -0
  22. {prelude_cli_beta-1399 → prelude_cli_beta-1400}/README.md +0 -0
  23. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/__init__.py +0 -0
  24. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/templates/__init__.py +0 -0
  25. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/__init__.py +0 -0
  26. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/configure.py +0 -0
  27. {prelude_cli_beta-1399/prelude_cli → prelude_cli_beta-1400/prelude_cli_beta}/views/shared.py +0 -0
  28. {prelude_cli_beta-1399 → prelude_cli_beta-1400}/prelude_cli_beta.egg-info/dependency_links.txt +0 -0
  29. {prelude_cli_beta-1399 → prelude_cli_beta-1400}/prelude_cli_beta.egg-info/entry_points.txt +0 -0
  30. {prelude_cli_beta-1399 → prelude_cli_beta-1400}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prelude-cli-beta
3
- Version: 1399
3
+ Version: 1400
4
4
  Summary: For interacting with the Prelude SDK
5
5
  Home-page: https://github.com/preludeorg
6
6
  Author: Prelude Research
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: prelude-sdk==2.6.13a1399
14
+ Requires-Dist: prelude-sdk-beta==1400
15
15
  Requires-Dist: click>8
16
16
  Requires-Dist: rich
17
17
  Requires-Dist: python-dateutil
@@ -1,15 +1,15 @@
1
1
  import click
2
2
 
3
- from prelude_cli.views.auth import auth
4
- from prelude_cli.views.build import build
5
- from prelude_cli.views.configure import configure
6
- from prelude_cli.views.detect import detect
7
- from prelude_cli.views.generate import generate
8
- from prelude_cli.views.iam import iam
9
- from prelude_cli.views.jobs import jobs
10
- from prelude_cli.views.partner import partner
11
- from prelude_cli.views.scm import scm
12
- from prelude_sdk.models.account import Account, Keychain
3
+ from prelude_cli_beta.views.auth import auth
4
+ from prelude_cli_beta.views.build import build
5
+ from prelude_cli_beta.views.configure import configure
6
+ from prelude_cli_beta.views.detect import detect
7
+ from prelude_cli_beta.views.generate import generate
8
+ from prelude_cli_beta.views.iam import iam
9
+ from prelude_cli_beta.views.jobs import jobs
10
+ from prelude_cli_beta.views.partner import partner
11
+ from prelude_cli_beta.views.scm import scm
12
+ from prelude_sdk_beta.models.account import Account, Keychain
13
13
 
14
14
 
15
15
  def complete_profile(ctx, param, incomplete):
@@ -1,7 +1,7 @@
1
1
  import click
2
2
  import webbrowser
3
3
 
4
- from prelude_cli.views.shared import Spinner, pretty_print
4
+ from prelude_cli_beta.views.shared import Spinner, pretty_print
5
5
 
6
6
 
7
7
  @click.group()
@@ -8,10 +8,10 @@ from pathlib import Path, PurePath
8
8
 
9
9
  import click
10
10
 
11
- import prelude_cli.templates as templates
12
- from prelude_cli.views.shared import Spinner, pretty_print
13
- from prelude_sdk.controllers.build_controller import BuildController
14
- from prelude_sdk.models.codes import Control, EDRResponse
11
+ import prelude_cli_beta.templates as templates
12
+ from prelude_cli_beta.views.shared import Spinner, pretty_print
13
+ from prelude_sdk_beta.controllers.build_controller import BuildController
14
+ from prelude_sdk_beta.models.codes import Control, EDRResponse
15
15
 
16
16
 
17
17
  UUID = re.compile(
@@ -6,10 +6,10 @@ from datetime import datetime, time, timedelta, timezone
6
6
  from dateutil.parser import parse
7
7
  from pathlib import Path, PurePath
8
8
 
9
- from prelude_cli.views.shared import Spinner, pretty_print
10
- from prelude_sdk.controllers.detect_controller import DetectController
11
- from prelude_sdk.controllers.iam_controller import IAMAccountController
12
- from prelude_sdk.models.codes import Control, RunCode
9
+ from prelude_cli_beta.views.shared import Spinner, pretty_print
10
+ from prelude_sdk_beta.controllers.detect_controller import DetectController
11
+ from prelude_sdk_beta.controllers.iam_controller import IAMAccountController
12
+ from prelude_sdk_beta.models.codes import Control, RunCode
13
13
 
14
14
 
15
15
  @click.group()
@@ -3,9 +3,9 @@ import os
3
3
 
4
4
  import click
5
5
 
6
- from prelude_cli.views.shared import Spinner, pretty_print
7
- from prelude_sdk.controllers.generate_controller import GenerateController
8
- from prelude_sdk.models.codes import Control
6
+ from prelude_cli_beta.views.shared import Spinner, pretty_print
7
+ from prelude_sdk_beta.controllers.generate_controller import GenerateController
8
+ from prelude_sdk_beta.models.codes import Control
9
9
 
10
10
 
11
11
  @click.group()
@@ -1,11 +1,11 @@
1
1
  import click
2
2
 
3
- from prelude_cli.views.shared import Spinner, pretty_print
4
- from prelude_sdk.controllers.iam_controller import (
3
+ from prelude_cli_beta.views.shared import Spinner, pretty_print
4
+ from prelude_sdk_beta.controllers.iam_controller import (
5
5
  IAMAccountController,
6
6
  IAMUserController,
7
7
  )
8
- from prelude_sdk.models.codes import Mode, Permission
8
+ from prelude_sdk_beta.models.codes import Mode, Permission
9
9
 
10
10
 
11
11
  @click.group()
@@ -1,8 +1,8 @@
1
1
  import click
2
2
 
3
- from prelude_cli.views.shared import Spinner, pretty_print
4
- from prelude_sdk.controllers.jobs_controller import JobsController
5
- from prelude_sdk.models.codes import BackgroundJobTypes
3
+ from prelude_cli_beta.views.shared import Spinner, pretty_print
4
+ from prelude_sdk_beta.controllers.jobs_controller import JobsController
5
+ from prelude_sdk_beta.models.codes import BackgroundJobTypes
6
6
 
7
7
 
8
8
  @click.group()
@@ -1,8 +1,8 @@
1
1
  import click
2
2
 
3
- from prelude_cli.views.shared import Spinner, pretty_print
4
- from prelude_sdk.controllers.partner_controller import PartnerController
5
- from prelude_sdk.models.codes import Control
3
+ from prelude_cli_beta.views.shared import Spinner, pretty_print
4
+ from prelude_sdk_beta.controllers.partner_controller import PartnerController
5
+ from prelude_sdk_beta.models.codes import Control
6
6
 
7
7
 
8
8
  @click.group()
@@ -2,11 +2,11 @@ import click
2
2
  import requests
3
3
  from time import sleep
4
4
 
5
- from prelude_cli.views.shared import Spinner, pretty_print
6
- from prelude_sdk.controllers.export_controller import ExportController
7
- from prelude_sdk.controllers.jobs_controller import JobsController
8
- from prelude_sdk.controllers.scm_controller import ScmController
9
- from prelude_sdk.models.codes import (
5
+ from prelude_cli_beta.views.shared import Spinner, pretty_print
6
+ from prelude_sdk_beta.controllers.export_controller import ExportController
7
+ from prelude_sdk_beta.controllers.jobs_controller import JobsController
8
+ from prelude_sdk_beta.controllers.scm_controller import ScmController
9
+ from prelude_sdk_beta.models.codes import (
10
10
  Control,
11
11
  ControlCategory,
12
12
  PartnerEvents,
@@ -355,8 +355,131 @@ def parse_from_partner_advisory(controller, partner, advisory_id):
355
355
  partner=Control[partner], advisory_id=advisory_id
356
356
  )
357
357
 
358
+ @scm.command("list-policy-exceptions")
359
+ @click.pass_obj
360
+ @pretty_print
361
+ def list_policy_exceptions(controller):
362
+ """List all policy exceptions"""
363
+ with Spinner(description="Querying Policy exceptions"):
364
+ return controller.list_policy_exceptions()
358
365
 
359
- @scm.command("list-notifications")
366
+ @scm.command("update-policy-exception")
367
+ @click.argument(
368
+ "partner",
369
+ type=click.Choice(
370
+ [c.name for c in Control if c != Control.INVALID], case_sensitive=False
371
+ ),
372
+ )
373
+ @click.option("-e", "--expires", help="Expiry Date (YYYY-MM-DD hh:mm:ss ([+-]hh:mm))", default=None, type=str)
374
+ @click.option("-i", "--instance_id", required=True, help="instance ID of the partner")
375
+ @click.option("-p", "--policy_id", required=True, help="ID of the policy to update")
376
+ @click.option("-s", "--settings", required=True, help="Comma separated list of all setting names to be excluded")
377
+ @click.pass_obj
378
+ @pretty_print
379
+ def update_policy_exception(controller, partner, expires, instance_id, policy_id, settings):
380
+ """Update policy exception"""
381
+ with Spinner(description=f"Updating Policy exception"):
382
+ return controller.put_policy_exceptions(
383
+ partner=Control[partner],
384
+ expires=expires,
385
+ instance_id=instance_id,
386
+ policy_id=policy_id,
387
+ setting_names=settings.split(",") if settings else None
388
+ )
389
+
390
+ @scm.command("create-policy-exception")
391
+ @click.argument(
392
+ "partner",
393
+ type=click.Choice(
394
+ [c.name for c in Control if c != Control.INVALID], case_sensitive=False
395
+ ),
396
+ )
397
+ @click.option("-e", "--expires", help="Expiry Date (YYYY-MM-DD hh:mm:ss ([+-]hh:mm))", default=None, type=str)
398
+ @click.option("-i", "--instance_id", required=True, help="instance ID of the partner")
399
+ @click.option("-p", "--policy_id", required=True, help="ID of the policy to create")
400
+ @click.option("-s", "--settings", required=True, help="Comma separated list of all setting names to be excluded")
401
+ @click.pass_obj
402
+ @pretty_print
403
+ def create_policy_exception(controller, partner, expires, instance_id, policy_id, settings):
404
+ """Create policy exception"""
405
+ with Spinner(description=f"Creating Policy exception"):
406
+ return controller.put_policy_exceptions(
407
+ partner=Control[partner],
408
+ expires=expires,
409
+ instance_id=instance_id,
410
+ policy_id=policy_id,
411
+ setting_names=settings.split(",") if settings else None
412
+ )
413
+
414
+
415
+ @scm.command("delete-policy-exception")
416
+ @click.argument(
417
+ "partner",
418
+ type=click.Choice(
419
+ [c.name for c in Control if c != Control.INVALID], case_sensitive=False
420
+ ),
421
+ )
422
+ @click.option("-i", "--instance_id", required=True, help="instance ID of the partner")
423
+ @click.option("-p", "--policy_id", required=True, help="ID of the policy to be deleted")
424
+ @click.confirmation_option(prompt="Are you sure?")
425
+ @click.pass_obj
426
+ @pretty_print
427
+ def delete_policy_exception(controller, partner, instance_id, policy_id):
428
+ """Delete policy exception removes all exceptions in a policy"""
429
+ with Spinner(description=f"deleting Policy exception"):
430
+ return controller.put_policy_exceptions(
431
+ partner=Control[partner],
432
+ expires=None,
433
+ instance_id=instance_id,
434
+ policy_id=policy_id,
435
+ setting_names=[]
436
+ )
437
+
438
+ @scm.command("list-object-exceptions")
439
+ @click.pass_obj
440
+ @pretty_print
441
+ def list_object_exceptions(controller):
442
+ """List all object exceptions"""
443
+ with Spinner(description="Querying Object exceptions"):
444
+ return controller.list_object_exceptions()
445
+
446
+
447
+ @scm.command("create-object-exception")
448
+ @click.argument("category", type=click.Choice([c.name for c in ControlCategory if c not in [ControlCategory.NONE, ControlCategory.INVALID, ControlCategory.PRIVATE_REPO]], case_sensitive=False))
449
+ @click.option("-n", "--name", help="Exception Name", default=None, type=str)
450
+ @click.option("-f", "--filter", help="OData filter string", default=None, required=True, type=str)
451
+ @click.option("-e", "--expires", help="Expiry Date (YYYY-MM-DD hh:mm:ss ([+-]hh:mm))", default=None, type=str)
452
+ @click.pass_obj
453
+ @pretty_print
454
+ def create_object_exception(controller, category, filter, name, expires):
455
+ """Create object exception"""
456
+ with Spinner(description=f"Creating Object exception"):
457
+ return controller.create_object_exception(category=ControlCategory[category], filter=filter, name=name, expires=expires)
458
+
459
+ @scm.command("update-object-exception")
460
+ @click.option("-i", "--id", help="ID of the exception to update", default=None, type=str)
461
+ @click.option("-n", "--name", help="Exception Name", default=None, type=str)
462
+ @click.option("-f", "--filter", help="OData filter string", default=None, required=True, type=str)
463
+ @click.option("-e", "--expires", help="Expiry Date (YYYY-MM-DD hh:mm:ss ([+-]hh:mm))", default=None, type=str)
464
+ @click.pass_obj
465
+ @pretty_print
466
+ def update_object_exception(controller, id, filter, name, expires):
467
+ """Update object exception"""
468
+ with Spinner(description=f"Updating Object exception"):
469
+ return controller.update_object_exception(exception_id=id, filter=filter, name=name, expires=expires)
470
+
471
+ @scm.command("delete-object-exception")
472
+ @click.option("-i", "--id", help="ID of the exception to delete", default=None, type=str)
473
+ @click.confirmation_option(prompt="Are you sure?")
474
+ @click.pass_obj
475
+ @pretty_print
476
+ def delete_object_exception(controller, id):
477
+ """Delete object exception"""
478
+ with Spinner(description=f"Delete Object exception"):
479
+ return controller.delete_object_exception(exception_id=id)
480
+
481
+
482
+ @scm.command("notifications")
360
483
  @click.pass_obj
361
484
  @pretty_print
362
485
  def list_notifications(controller):
@@ -469,3 +592,11 @@ def upsert_notification(
469
592
  teams_urls=teams_urls.split(",") if teams_urls else None,
470
593
  title=title,
471
594
  )
595
+
596
+ @scm.command("notations")
597
+ @click.pass_obj
598
+ @pretty_print
599
+ def list_notations(controller):
600
+ """List all notations"""
601
+ with Spinner("Fetching notations"):
602
+ return controller.list_notations()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prelude-cli-beta
3
- Version: 1399
3
+ Version: 1400
4
4
  Summary: For interacting with the Prelude SDK
5
5
  Home-page: https://github.com/preludeorg
6
6
  Author: Prelude Research
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: prelude-sdk==2.6.13a1399
14
+ Requires-Dist: prelude-sdk-beta==1400
15
15
  Requires-Dist: click>8
16
16
  Requires-Dist: rich
17
17
  Requires-Dist: python-dateutil
@@ -0,0 +1,25 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ setup.cfg
6
+ prelude_cli_beta/__init__.py
7
+ prelude_cli_beta/cli.py
8
+ prelude_cli_beta.egg-info/PKG-INFO
9
+ prelude_cli_beta.egg-info/SOURCES.txt
10
+ prelude_cli_beta.egg-info/dependency_links.txt
11
+ prelude_cli_beta.egg-info/entry_points.txt
12
+ prelude_cli_beta.egg-info/requires.txt
13
+ prelude_cli_beta.egg-info/top_level.txt
14
+ prelude_cli_beta/templates/__init__.py
15
+ prelude_cli_beta/views/__init__.py
16
+ prelude_cli_beta/views/auth.py
17
+ prelude_cli_beta/views/build.py
18
+ prelude_cli_beta/views/configure.py
19
+ prelude_cli_beta/views/detect.py
20
+ prelude_cli_beta/views/generate.py
21
+ prelude_cli_beta/views/iam.py
22
+ prelude_cli_beta/views/jobs.py
23
+ prelude_cli_beta/views/partner.py
24
+ prelude_cli_beta/views/scm.py
25
+ prelude_cli_beta/views/shared.py
@@ -1,4 +1,4 @@
1
- prelude-sdk==2.6.13a1399
1
+ prelude-sdk-beta==1400
2
2
  click>8
3
3
  rich
4
4
  python-dateutil
@@ -0,0 +1 @@
1
+ prelude_cli_beta
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = prelude-cli-beta
3
- version = 1399
3
+ version = 1400
4
4
  author = Prelude Research
5
5
  author_email = support@preludesecurity.com
6
6
  description = For interacting with the Prelude SDK
@@ -17,7 +17,7 @@ packages = find:
17
17
  include_package_data = True
18
18
  python_requires = >=3.10
19
19
  install_requires =
20
- prelude-sdk == 2.6.13a1399
20
+ prelude-sdk-beta == 1400
21
21
  click > 8
22
22
  rich
23
23
  python-dateutil
@@ -1,28 +0,0 @@
1
- # $NAME
2
-
3
- This section should describe the test, provide some background information (such as historical in-the-wild usage by threat actors or APTs), and briefly illustrate the test's intention, objective, and techniques utilized to achieve them. This section should NOT be too technical or overly long; a small paragraph should be sufficient.
4
-
5
- ## How
6
-
7
- > Safety: This section should contain an advisory statement that positively declares that the VST does not negatively affect the tested system in any way.
8
-
9
- Steps:
10
-
11
- 1. This section enumerates the individual, atomic steps by which ...
12
- 2. ... the probe attempts to achieve the intended effect of the test ...
13
- 3. ... and thereby perform evaluation of any resident security solutions.
14
-
15
- Example Output:
16
- ```bash
17
- [$ID] Starting test at: $TIME
18
- [$ID] Host is vulnerable, continuing with technique execution
19
- [$ID] Completed with code: 101
20
- [$ID] Ending test at: $TIME
21
- ```
22
-
23
- ## Resolution
24
-
25
- If this test fails:
26
-
27
- * Bulleted list of recommendations that the testing organization SHOULD consider ...
28
- * ... based upon the nature of the test, as well as the point of failure.
@@ -1,24 +0,0 @@
1
- /*
2
- ID: $ID
3
- NAME: $NAME
4
- TECHNIQUE: $TECHNIQUE
5
- UNIT: $UNIT
6
- CREATED: $TIME
7
- */
8
- package main
9
-
10
- import (
11
- Endpoint "github.com/preludeorg/libraries/go/tests/endpoint"
12
- )
13
-
14
- func test() {
15
- Endpoint.Stop(Endpoint.TestCompletedNormally)
16
- }
17
-
18
- func clean() {
19
- Endpoint.Say("Cleaning up")
20
- }
21
-
22
- func main() {
23
- Endpoint.Start(test, clean)
24
- }
@@ -1,27 +0,0 @@
1
- LICENSE
2
- MANIFEST.in
3
- README.md
4
- pyproject.toml
5
- setup.cfg
6
- prelude_cli/__init__.py
7
- prelude_cli/cli.py
8
- prelude_cli/templates/README.md
9
- prelude_cli/templates/__init__.py
10
- prelude_cli/templates/template.go
11
- prelude_cli/views/__init__.py
12
- prelude_cli/views/auth.py
13
- prelude_cli/views/build.py
14
- prelude_cli/views/configure.py
15
- prelude_cli/views/detect.py
16
- prelude_cli/views/generate.py
17
- prelude_cli/views/iam.py
18
- prelude_cli/views/jobs.py
19
- prelude_cli/views/partner.py
20
- prelude_cli/views/scm.py
21
- prelude_cli/views/shared.py
22
- prelude_cli_beta.egg-info/PKG-INFO
23
- prelude_cli_beta.egg-info/SOURCES.txt
24
- prelude_cli_beta.egg-info/dependency_links.txt
25
- prelude_cli_beta.egg-info/entry_points.txt
26
- prelude_cli_beta.egg-info/requires.txt
27
- prelude_cli_beta.egg-info/top_level.txt
@@ -1 +0,0 @@
1
- prelude_cli
File without changes