praetorian-cli 2.2.11__py3-none-any.whl → 2.2.12__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.
@@ -1,5 +1,5 @@
1
1
  from praetorian_cli.sdk.model.globals import Kind
2
- from praetorian_cli.sdk.model.query import Relationship, Node, Query, risk_of_key, ASSET_NODE, ATTRIBUTE_NODE, Filter
2
+ from praetorian_cli.sdk.model.query import Relationship, Node, Query, risk_of_key, ASSET_NODE, PORT_NODE, Filter, WEBPAGE_NODE
3
3
 
4
4
 
5
5
  class Risks:
@@ -132,7 +132,7 @@ class Risks:
132
132
  Get all assets affected by a risk.
133
133
 
134
134
  This method finds assets that are directly linked to the risk via HAS_VULNERABILITY
135
- relationships, as well as assets indirectly linked via attributes that have the risk.
135
+ relationships, as well as assets indirectly linked via ports that have the risk.
136
136
 
137
137
  :param key: The key of the risk to get affected assets for
138
138
  :type key: str
@@ -144,11 +144,18 @@ class Risks:
144
144
  query = Query(Node(ASSET_NODE, relationships=[to_this]))
145
145
  assets, _ = self.api.search.by_query(query)
146
146
 
147
- # assets indirectly linked to the risk via an attribute
148
- attributes = Node(ATTRIBUTE_NODE, relationships=[to_this])
149
- to_attributes = Relationship(Relationship.Label.HAS_ATTRIBUTE, target=attributes)
150
- query = Query(Node(ASSET_NODE, relationships=[to_attributes]))
147
+ # assets indirectly linked to the risk via a port
148
+ ports = Node(PORT_NODE, relationships=[to_this])
149
+ to_ports = Relationship(Relationship.Label.HAS_PORT, target=ports)
150
+ query = Query(Node(ASSET_NODE, relationships=[to_ports]))
151
151
  indirect_assets, _ = self.api.search.by_query(query)
152
152
 
153
+ # webpages linked to the risk
154
+ webpages = Node(WEBPAGE_NODE, relationships=[to_this])
155
+ to_webpages = Relationship(Relationship.Label.HAS_WEBPAGE, target=webpages)
156
+ query = Query(Node(ASSET_NODE, relationships=[to_webpages]))
157
+ web_assets, _ = self.api.search.by_query(query)
158
+
153
159
  assets.extend(indirect_assets)
160
+ assets.extend(web_assets)
154
161
  return assets
@@ -126,7 +126,7 @@ class Webpage:
126
126
  urlFilter = Filter(field=Filter.Field.KEY, operator=Filter.Operator.CONTAINS, value=filter)
127
127
  filters.append(urlFilter)
128
128
  node = Node(labels=[Node.Label.WEBPAGE], filters=filters, relationships=relationships)
129
- query = Query(node=node, page=offset, limit=pages)
129
+ query = Query(node=node, page=offset)
130
130
  return self.api.search.by_query(query, pages)
131
131
 
132
132
  def delete(self, key):
@@ -110,6 +110,7 @@ class Kind(Enum):
110
110
  OTHERS = 'others'
111
111
  WEBAPPLICATION = 'webapplication'
112
112
  WEBPAGE = 'webpage'
113
+ PORT = 'port'
113
114
 
114
115
  EXACT_FLAG = {'exact': 'true'}
115
116
  DESCENDING_FLAG = {'desc': 'true'}
@@ -68,6 +68,7 @@ class Relationship:
68
68
  DISCOVERED = 'DISCOVERED'
69
69
  HAS_ATTRIBUTE = 'HAS_ATTRIBUTE'
70
70
  HAS_WEBPAGE = 'HAS_WEBPAGE'
71
+ HAS_PORT = 'HAS_PORT'
71
72
 
72
73
  def __init__(self, label: Label, source: 'Node' = None, target: 'Node' = None, optional: bool = False, length: int = 0):
73
74
  self.label = label
@@ -97,6 +98,7 @@ class Node:
97
98
  ADDOMAIN = 'ADDomain'
98
99
  ATTRIBUTE = 'Attribute'
99
100
  RISK = 'Risk'
101
+ PORT = 'Port'
100
102
  PRESEED = 'Preseed'
101
103
  SEED = 'Seed'
102
104
  TTL = 'TTL'
@@ -152,11 +154,15 @@ class Query:
152
154
  ASSET_NODE = [Node.Label.ASSET]
153
155
  RISK_NODE = [Node.Label.RISK]
154
156
  ATTRIBUTE_NODE = [Node.Label.ATTRIBUTE]
157
+ PORT_NODE = [Node.Label.PORT]
158
+ WEBAPPLICATION_NODE = [Node.Label.WEBAPPLICATION]
159
+ WEBPAGE_NODE = [Node.Label.WEBPAGE]
155
160
 
156
161
  KIND_TO_LABEL = {
157
162
  Kind.ASSET.value: Node.Label.ASSET,
158
163
  Kind.RISK.value: Node.Label.RISK,
159
164
  Kind.ATTRIBUTE.value: Node.Label.ATTRIBUTE,
165
+ Kind.PORT.value: Node.Label.PORT,
160
166
  Kind.SEED.value: Node.Label.SEED,
161
167
  Kind.PRESEED.value: Node.Label.PRESEED,
162
168
  Kind.REPOSITORY.value: Node.Label.REPOSITORY,
@@ -102,7 +102,7 @@ class TestZCli:
102
102
  self.verify(f'update risk "{o.risk_key}" -s {Risk.OPEN_LOW.value}')
103
103
  self.verify(f'get risk "{o.risk_key}"', [o.risk_key, f'"status": "{Risk.OPEN_LOW.value}"'])
104
104
 
105
- self.verify(f'delete risk "{o.risk_key}"')
105
+ self.verify(f'delete risk "{o.risk_key}" -s {Risk.DELETED_OTHER_LOW.value}')
106
106
  self.verify(f'get risk "{o.risk_key}"', [
107
107
  o.risk_key, f'"status": "{Risk.DELETED_OTHER_LOW.value}"',
108
108
  f'"to": "{Risk.DELETED_OTHER_LOW.value}"'])
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: praetorian-cli
3
- Version: 2.2.11
3
+ Version: 2.2.12
4
4
  Summary: For interacting with the Chariot API
5
5
  Home-page: https://github.com/praetorian-inc/praetorian-cli
6
6
  Author: Praetorian
@@ -43,7 +43,7 @@ praetorian_cli/sdk/entities/integrations.py,sha256=NVaW_dWbnMkMIs-EYr2W7QAeamPVw
43
43
  praetorian_cli/sdk/entities/jobs.py,sha256=JBkNgFzQEtV0XJSuKtAzCHOYa9rcVxgTkp-tAuS6CP0,8181
44
44
  praetorian_cli/sdk/entities/keys.py,sha256=PgoGa3xyLMzWrIIQ8zgi7bfZiUFFumPtMDo64GjhdjE,6089
45
45
  praetorian_cli/sdk/entities/preseeds.py,sha256=SeSY4K6diJMQzsjCBxYK3N9Lz0fUz3B_LMBOAAcBSLg,8890
46
- praetorian_cli/sdk/entities/risks.py,sha256=THNcPoCAGIqNhnH_AZvrQN7tdiOtF6n5V1tgeSomBpw,6317
46
+ praetorian_cli/sdk/entities/risks.py,sha256=7WcAGiehoGuLlugIujxQC2FcA1ndOh7s_ooEGERpWM4,6630
47
47
  praetorian_cli/sdk/entities/scanners.py,sha256=QCr5QlBy4jfBh8HRvZt9CoZTgNqLNnKNrI4sdfJf0jE,423
48
48
  praetorian_cli/sdk/entities/schema.py,sha256=CPVws1CdRHyOAI7oT9A20WGOCZozTFqZnfo5ox3v0HQ,807
49
49
  praetorian_cli/sdk/entities/search.py,sha256=9vTy9HZY2BTlqf5Zwpdl8HCRIfSEvWDRij2_-rAp2Ng,16938
@@ -51,11 +51,11 @@ praetorian_cli/sdk/entities/seeds.py,sha256=eYDFtfgzIX_o9c5wuPiz9I2xDfTz7k9PZPzL
51
51
  praetorian_cli/sdk/entities/settings.py,sha256=F-pRCA6UvbdtnjHOLpEG2lN9ws8dcnBNcep-DFlXeTY,2750
52
52
  praetorian_cli/sdk/entities/statistics.py,sha256=gtX-NN7r_RsNjDjlQ-zspmzG_0bzBqBFarCuM4NO-EA,7085
53
53
  praetorian_cli/sdk/entities/webhook.py,sha256=7Bqt20GlJFbZTlmQwYTuUadsUQvydym6S4kGn9zYa50,6220
54
- praetorian_cli/sdk/entities/webpage.py,sha256=FBS3HzuUJnQR9Blm_cBCd9efYAdc2wA2tUFY-cpLj4k,6787
54
+ praetorian_cli/sdk/entities/webpage.py,sha256=YVwWd_xAYqJb_ZjmKdp8kJ0Q1S9EbUyEttCHes6DhOQ,6774
55
55
  praetorian_cli/sdk/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  praetorian_cli/sdk/model/aegis.py,sha256=KNeynkCJtaR5bIhv3-VNirjxq4i-6JhCZGTb5rmxkQ4,5344
57
- praetorian_cli/sdk/model/globals.py,sha256=8nQjs4KD3BR0CWAyE4YAgSCwse4Mtj4wADIGx1avf8M,2990
58
- praetorian_cli/sdk/model/query.py,sha256=MUzFaJ7FGvKgxm6_P-fLfCG9L3-qKPoOB5mJ59WwKNc,6526
57
+ praetorian_cli/sdk/model/globals.py,sha256=OGZSPnOsIS9ZZvb-74uL-JyyUB_NBRZRiEN7YWnqZO8,3008
58
+ praetorian_cli/sdk/model/query.py,sha256=NVuuoW8y7b1SNHbJJV2KSV2Sl5NH39XoDW0oMMzFENI,6732
59
59
  praetorian_cli/sdk/model/utils.py,sha256=G8cU7K2uG0-J0GanjcCrzDuUtKzDOucFWF6hGtfOsTM,781
60
60
  praetorian_cli/sdk/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
61
61
  praetorian_cli/sdk/test/pytest.ini,sha256=uM552lJOoxWRplXtonIeo2v7M2kHZmJKis7OgnvoLxg,213
@@ -79,7 +79,7 @@ praetorian_cli/sdk/test/test_seed.py,sha256=WfnEPZwMXHFtt4jyVT-1JitIW1zTrl7rwlX8
79
79
  praetorian_cli/sdk/test/test_setting.py,sha256=hdPQj71rjSYxa-PODG2D-kJd8C9gkAg1jQXnqYU4P6A,1326
80
80
  praetorian_cli/sdk/test/test_webhook.py,sha256=FQJY76QQ6Yg2iLCGpxgKiXGI8TtmB4zTpMIM2SpYKCc,2228
81
81
  praetorian_cli/sdk/test/test_webpage.py,sha256=jgKrsobD3ONibDIbbOT-yy7V_NmC5-LwEZmEYdYu0LI,1779
82
- praetorian_cli/sdk/test/test_z_cli.py,sha256=LKYYAcxTA06AXgVTF9pM_BXgMHVSC5srXd-qdUSuiMU,20669
82
+ praetorian_cli/sdk/test/test_z_cli.py,sha256=jhpv65p0JRJU-_uSSbVo9SznKm_2iAhOlSPkx8E4Oq4,20703
83
83
  praetorian_cli/sdk/test/ui_mocks.py,sha256=kiqAPxaM-_T0NQ-HgOZupNiUoJa5mE2CsyK2cXWiPws,4146
84
84
  praetorian_cli/sdk/test/utils.py,sha256=svxMpzlaW4FRCij05cPgJFrTUEELVdt8G7SPKEdsgPo,3526
85
85
  praetorian_cli/ui/__init__.py,sha256=wEgkrgIaoOguH1VVp2FndaGIxWmZ5CfAynXtNtZ6iTo,81
@@ -96,9 +96,9 @@ praetorian_cli/ui/aegis/commands/set.py,sha256=WJ0Qt30fBa_hyWEaawyA3h3rSeWHFPbJS
96
96
  praetorian_cli/ui/aegis/commands/ssh.py,sha256=KGsNlN0i-Cwp6gWyr-cjML9_L13oE7xFenysF2pC8Rc,3045
97
97
  praetorian_cli/ui/conversation/__init__.py,sha256=sNhNN_ZG1Va_7OLTaoXlIFL6ageKHWdufFVYw6F_aV8,90
98
98
  praetorian_cli/ui/conversation/textual_chat.py,sha256=gGgEs7HhNAto9rTVrGbz62mG10OqmtArI-aKxFLSfVs,24405
99
- praetorian_cli-2.2.11.dist-info/licenses/LICENSE,sha256=Zv97QripiVALv-WokW_Elsiz9vtOfbtNt1aLZhhk67I,1067
100
- praetorian_cli-2.2.11.dist-info/METADATA,sha256=S38eZTVQ_ckoHoD6gFKzDanvXEcyOFjyJEWcIuFFZnU,7752
101
- praetorian_cli-2.2.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
102
- praetorian_cli-2.2.11.dist-info/entry_points.txt,sha256=uJbDvZdkYaLiCh2DMvXPUGKFm2p5ZfzJCizUK3-PUEE,56
103
- praetorian_cli-2.2.11.dist-info/top_level.txt,sha256=QbUdRPGEj_TyHO-E7AD5BxFfR8ore37i273jP4Gn43c,15
104
- praetorian_cli-2.2.11.dist-info/RECORD,,
99
+ praetorian_cli-2.2.12.dist-info/licenses/LICENSE,sha256=Zv97QripiVALv-WokW_Elsiz9vtOfbtNt1aLZhhk67I,1067
100
+ praetorian_cli-2.2.12.dist-info/METADATA,sha256=aIbQ6Ja1jh4-tjOUg517OjA95Jr-r_7UVklzZOBBPpI,7752
101
+ praetorian_cli-2.2.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
102
+ praetorian_cli-2.2.12.dist-info/entry_points.txt,sha256=uJbDvZdkYaLiCh2DMvXPUGKFm2p5ZfzJCizUK3-PUEE,56
103
+ praetorian_cli-2.2.12.dist-info/top_level.txt,sha256=QbUdRPGEj_TyHO-E7AD5BxFfR8ore37i273jP4Gn43c,15
104
+ praetorian_cli-2.2.12.dist-info/RECORD,,