prelude-sdk-beta 1406__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 prelude-sdk-beta might be problematic. Click here for more details.
- prelude_sdk_beta/__init__.py +0 -0
- prelude_sdk_beta/controllers/__init__.py +0 -0
- prelude_sdk_beta/controllers/build_controller.py +309 -0
- prelude_sdk_beta/controllers/detect_controller.py +243 -0
- prelude_sdk_beta/controllers/export_controller.py +31 -0
- prelude_sdk_beta/controllers/generate_controller.py +40 -0
- prelude_sdk_beta/controllers/http_controller.py +63 -0
- prelude_sdk_beta/controllers/iam_controller.py +278 -0
- prelude_sdk_beta/controllers/jobs_controller.py +26 -0
- prelude_sdk_beta/controllers/partner_controller.py +166 -0
- prelude_sdk_beta/controllers/probe_controller.py +14 -0
- prelude_sdk_beta/controllers/scm_controller.py +424 -0
- prelude_sdk_beta/models/__init__.py +0 -0
- prelude_sdk_beta/models/account.py +264 -0
- prelude_sdk_beta/models/codes.py +446 -0
- prelude_sdk_beta-1406.dist-info/METADATA +46 -0
- prelude_sdk_beta-1406.dist-info/RECORD +20 -0
- prelude_sdk_beta-1406.dist-info/WHEEL +5 -0
- prelude_sdk_beta-1406.dist-info/licenses/LICENSE +9 -0
- prelude_sdk_beta-1406.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from enum import Enum, EnumMeta
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class MissingItem(EnumMeta):
|
|
7
|
+
def __getitem__(cls, name):
|
|
8
|
+
try:
|
|
9
|
+
return super().__getitem__(name.upper())
|
|
10
|
+
except (AttributeError, KeyError):
|
|
11
|
+
try:
|
|
12
|
+
return cls(int(name))
|
|
13
|
+
except ValueError:
|
|
14
|
+
return cls(name)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class RunCode(Enum, metaclass=MissingItem):
|
|
18
|
+
INVALID = -1
|
|
19
|
+
DAILY = 1
|
|
20
|
+
WEEKLY = 2
|
|
21
|
+
MONTHLY = 3
|
|
22
|
+
SMART = 4
|
|
23
|
+
DEBUG = 5
|
|
24
|
+
RUN_ONCE = 6
|
|
25
|
+
MONDAY = 10
|
|
26
|
+
TUESDAY = 11
|
|
27
|
+
WEDNESDAY = 12
|
|
28
|
+
THURSDAY = 13
|
|
29
|
+
FRIDAY = 14
|
|
30
|
+
SATURDAY = 15
|
|
31
|
+
SUNDAY = 16
|
|
32
|
+
MONTH_1 = 20
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def _missing_(cls, value):
|
|
36
|
+
return RunCode.DAILY
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class Mode(Enum, metaclass=MissingItem):
|
|
40
|
+
MANUAL = 0
|
|
41
|
+
FROZEN = 1
|
|
42
|
+
AUTOPILOT = 2
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def _missing_(cls, value):
|
|
46
|
+
return Mode.MANUAL
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class Permission(Enum, metaclass=MissingItem):
|
|
50
|
+
INVALID = -1
|
|
51
|
+
ADMIN = 0
|
|
52
|
+
EXECUTIVE = 1
|
|
53
|
+
BUILD = 2
|
|
54
|
+
SERVICE = 3
|
|
55
|
+
SUPPORT = 5
|
|
56
|
+
|
|
57
|
+
@classmethod
|
|
58
|
+
def _missing_(cls, value):
|
|
59
|
+
return Permission.INVALID
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ExitCode(Enum):
|
|
63
|
+
MISSING = -1
|
|
64
|
+
UNKNOWN_ERROR = 1
|
|
65
|
+
MALFORMED_TEST = 2
|
|
66
|
+
UNREPORTED = 3
|
|
67
|
+
PROCESS_BLOCKED = 9
|
|
68
|
+
PROCESS_BLOCKED_GRACEFULLY = 15
|
|
69
|
+
PROTECTED = 100
|
|
70
|
+
UNPROTECTED = 101
|
|
71
|
+
TIMED_OUT = 102
|
|
72
|
+
FAILED_CLEANUP = 103
|
|
73
|
+
TEST_NOT_RELEVANT = 104
|
|
74
|
+
DYNAMIC_QUARANTINE = 105
|
|
75
|
+
BLOCKED_AT_PERIMETER = 106
|
|
76
|
+
EXPLOIT_PREVENTED = 107
|
|
77
|
+
ENDPOINT_NOT_RELEVANT = 108
|
|
78
|
+
INSUFFICIENT_PRIVILEGES = 109
|
|
79
|
+
INCORRECTLY_BLOCKED = 110
|
|
80
|
+
PREVENTED_EXECUTION = 126
|
|
81
|
+
STATIC_QUARANTINE = 127
|
|
82
|
+
BLOCKED = 137
|
|
83
|
+
UNEXPECTED_ERROR = 256
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def _missing_(cls, value):
|
|
87
|
+
if value and not isinstance(value, int):
|
|
88
|
+
return cls(int(value))
|
|
89
|
+
logging.warning("Unknown ExitCode: %s", str(value))
|
|
90
|
+
return ExitCode.MISSING
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def state(self):
|
|
94
|
+
for k, v in State.mapping().items():
|
|
95
|
+
if self in v:
|
|
96
|
+
return k
|
|
97
|
+
return State.NONE
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class State(Enum):
|
|
101
|
+
NONE = 0
|
|
102
|
+
PROTECTED = 1
|
|
103
|
+
UNPROTECTED = 2
|
|
104
|
+
ERROR = 3
|
|
105
|
+
NOT_RELEVANT = 4
|
|
106
|
+
|
|
107
|
+
@classmethod
|
|
108
|
+
def mapping(cls):
|
|
109
|
+
return {
|
|
110
|
+
State.ERROR: [
|
|
111
|
+
ExitCode.FAILED_CLEANUP,
|
|
112
|
+
ExitCode.INCORRECTLY_BLOCKED,
|
|
113
|
+
ExitCode.MALFORMED_TEST,
|
|
114
|
+
ExitCode.TIMED_OUT,
|
|
115
|
+
ExitCode.UNEXPECTED_ERROR,
|
|
116
|
+
ExitCode.UNKNOWN_ERROR,
|
|
117
|
+
ExitCode.UNREPORTED,
|
|
118
|
+
],
|
|
119
|
+
State.NONE: [ExitCode.MISSING],
|
|
120
|
+
State.NOT_RELEVANT: [
|
|
121
|
+
ExitCode.ENDPOINT_NOT_RELEVANT,
|
|
122
|
+
ExitCode.INSUFFICIENT_PRIVILEGES,
|
|
123
|
+
ExitCode.TEST_NOT_RELEVANT,
|
|
124
|
+
],
|
|
125
|
+
State.PROTECTED: [
|
|
126
|
+
ExitCode.BLOCKED,
|
|
127
|
+
ExitCode.BLOCKED_AT_PERIMETER,
|
|
128
|
+
ExitCode.DYNAMIC_QUARANTINE,
|
|
129
|
+
ExitCode.EXPLOIT_PREVENTED,
|
|
130
|
+
ExitCode.PREVENTED_EXECUTION,
|
|
131
|
+
ExitCode.PROCESS_BLOCKED,
|
|
132
|
+
ExitCode.PROCESS_BLOCKED_GRACEFULLY,
|
|
133
|
+
ExitCode.PROTECTED,
|
|
134
|
+
ExitCode.STATIC_QUARANTINE,
|
|
135
|
+
],
|
|
136
|
+
State.UNPROTECTED: [
|
|
137
|
+
ExitCode.UNPROTECTED,
|
|
138
|
+
],
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
class DOS(Enum):
|
|
143
|
+
none = "none"
|
|
144
|
+
arm64 = "arm64"
|
|
145
|
+
x86_64 = "x86_64"
|
|
146
|
+
aarch64 = "arm64"
|
|
147
|
+
amd64 = "x86_64"
|
|
148
|
+
x86 = "x86_64"
|
|
149
|
+
|
|
150
|
+
@classmethod
|
|
151
|
+
def normalize(cls, dos: str):
|
|
152
|
+
try:
|
|
153
|
+
arch = dos.split("-", 1)[-1]
|
|
154
|
+
return dos[: -len(arch)].lower() + cls[arch.lower()].value
|
|
155
|
+
except (KeyError, IndexError, AttributeError):
|
|
156
|
+
return cls.none.value
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class Control(Enum, metaclass=MissingItem):
|
|
160
|
+
INVALID = -1
|
|
161
|
+
NONE = 0
|
|
162
|
+
CROWDSTRIKE = 1
|
|
163
|
+
DEFENDER = 2
|
|
164
|
+
SPLUNK = 3
|
|
165
|
+
SENTINELONE = 4
|
|
166
|
+
VECTR = 5
|
|
167
|
+
S3 = 6
|
|
168
|
+
INTUNE = 7
|
|
169
|
+
SERVICENOW = 8
|
|
170
|
+
OKTA = 9
|
|
171
|
+
M365 = 10
|
|
172
|
+
ENTRA = 11
|
|
173
|
+
JAMF = 12
|
|
174
|
+
CROWDSTRIKE_IDENTITY = 13
|
|
175
|
+
GMAIL = 14
|
|
176
|
+
GOOGLE_IDENTITY = 15
|
|
177
|
+
DEFENDER_DISCOVERY = 16
|
|
178
|
+
TENABLE = 17
|
|
179
|
+
EC2 = 18
|
|
180
|
+
AWS_SSM = 19
|
|
181
|
+
AZURE_VM = 20
|
|
182
|
+
GITHUB = 21
|
|
183
|
+
TENABLE_DISCOVERY = 22
|
|
184
|
+
QUALYS = 23
|
|
185
|
+
QUALYS_DISCOVERY = 24
|
|
186
|
+
|
|
187
|
+
@classmethod
|
|
188
|
+
def _missing_(cls, value):
|
|
189
|
+
return Control.INVALID
|
|
190
|
+
|
|
191
|
+
@property
|
|
192
|
+
def control_category(self):
|
|
193
|
+
for k, v in ControlCategory.mapping().items():
|
|
194
|
+
if self in v:
|
|
195
|
+
return k
|
|
196
|
+
return ControlCategory.NONE
|
|
197
|
+
|
|
198
|
+
@property
|
|
199
|
+
def scm_category(self):
|
|
200
|
+
for k, v in SCMCategory.control_mapping().items():
|
|
201
|
+
if self in v:
|
|
202
|
+
return k
|
|
203
|
+
return SCMCategory.NONE
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class ControlCategory(Enum, metaclass=MissingItem):
|
|
207
|
+
INVALID = -1
|
|
208
|
+
NONE = 0
|
|
209
|
+
CLOUD = 1
|
|
210
|
+
EMAIL = 2
|
|
211
|
+
IDENTITY = 3
|
|
212
|
+
NETWORK = 4
|
|
213
|
+
XDR = 5
|
|
214
|
+
ASSET_MANAGER = 6
|
|
215
|
+
DISCOVERED_DEVICES = 7
|
|
216
|
+
VULN_MANAGER = 8
|
|
217
|
+
SIEM = 9
|
|
218
|
+
PRIVATE_REPO = 10
|
|
219
|
+
|
|
220
|
+
@classmethod
|
|
221
|
+
def _missing_(cls, value):
|
|
222
|
+
return ControlCategory.INVALID
|
|
223
|
+
|
|
224
|
+
@classmethod
|
|
225
|
+
def mapping(cls):
|
|
226
|
+
return {
|
|
227
|
+
ControlCategory.ASSET_MANAGER: [
|
|
228
|
+
Control.AWS_SSM,
|
|
229
|
+
Control.INTUNE,
|
|
230
|
+
Control.JAMF,
|
|
231
|
+
],
|
|
232
|
+
ControlCategory.CLOUD: [],
|
|
233
|
+
ControlCategory.DISCOVERED_DEVICES: [
|
|
234
|
+
Control.AZURE_VM,
|
|
235
|
+
Control.DEFENDER_DISCOVERY,
|
|
236
|
+
Control.EC2,
|
|
237
|
+
Control.QUALYS_DISCOVERY,
|
|
238
|
+
Control.SERVICENOW,
|
|
239
|
+
Control.TENABLE_DISCOVERY,
|
|
240
|
+
],
|
|
241
|
+
ControlCategory.EMAIL: [
|
|
242
|
+
Control.GMAIL,
|
|
243
|
+
Control.M365,
|
|
244
|
+
],
|
|
245
|
+
ControlCategory.IDENTITY: [
|
|
246
|
+
Control.CROWDSTRIKE_IDENTITY,
|
|
247
|
+
Control.ENTRA,
|
|
248
|
+
Control.GOOGLE_IDENTITY,
|
|
249
|
+
Control.OKTA,
|
|
250
|
+
],
|
|
251
|
+
ControlCategory.NETWORK: [],
|
|
252
|
+
ControlCategory.PRIVATE_REPO: [
|
|
253
|
+
Control.GITHUB,
|
|
254
|
+
],
|
|
255
|
+
ControlCategory.SIEM: [
|
|
256
|
+
Control.S3,
|
|
257
|
+
Control.SPLUNK,
|
|
258
|
+
Control.VECTR,
|
|
259
|
+
],
|
|
260
|
+
ControlCategory.VULN_MANAGER: [Control.QUALYS, Control.TENABLE],
|
|
261
|
+
ControlCategory.XDR: [
|
|
262
|
+
Control.CROWDSTRIKE,
|
|
263
|
+
Control.DEFENDER,
|
|
264
|
+
Control.SENTINELONE,
|
|
265
|
+
],
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class SCMCategory(Enum, metaclass=MissingItem):
|
|
270
|
+
INVALID = -1
|
|
271
|
+
NONE = 0
|
|
272
|
+
ENDPOINT = 1
|
|
273
|
+
INBOX = 2
|
|
274
|
+
USER = 3
|
|
275
|
+
|
|
276
|
+
@classmethod
|
|
277
|
+
def _missing_(cls, value):
|
|
278
|
+
return SCMCategory.INVALID
|
|
279
|
+
|
|
280
|
+
@classmethod
|
|
281
|
+
def control_mapping(cls):
|
|
282
|
+
return {
|
|
283
|
+
SCMCategory.ENDPOINT: [
|
|
284
|
+
Control.AWS_SSM,
|
|
285
|
+
Control.AZURE_VM,
|
|
286
|
+
Control.CROWDSTRIKE,
|
|
287
|
+
Control.DEFENDER,
|
|
288
|
+
Control.DEFENDER_DISCOVERY,
|
|
289
|
+
Control.EC2,
|
|
290
|
+
Control.INTUNE,
|
|
291
|
+
Control.JAMF,
|
|
292
|
+
Control.QUALYS,
|
|
293
|
+
Control.QUALYS_DISCOVERY,
|
|
294
|
+
Control.SENTINELONE,
|
|
295
|
+
Control.SERVICENOW,
|
|
296
|
+
Control.TENABLE,
|
|
297
|
+
Control.TENABLE_DISCOVERY,
|
|
298
|
+
],
|
|
299
|
+
SCMCategory.USER: [
|
|
300
|
+
Control.CROWDSTRIKE_IDENTITY,
|
|
301
|
+
Control.ENTRA,
|
|
302
|
+
Control.GOOGLE_IDENTITY,
|
|
303
|
+
Control.OKTA,
|
|
304
|
+
],
|
|
305
|
+
SCMCategory.INBOX: [
|
|
306
|
+
Control.GMAIL,
|
|
307
|
+
Control.M365,
|
|
308
|
+
],
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
@classmethod
|
|
312
|
+
def category_mapping(cls):
|
|
313
|
+
return {
|
|
314
|
+
SCMCategory.ENDPOINT: [
|
|
315
|
+
ControlCategory.ASSET_MANAGER,
|
|
316
|
+
ControlCategory.DISCOVERED_DEVICES,
|
|
317
|
+
ControlCategory.VULN_MANAGER,
|
|
318
|
+
ControlCategory.XDR,
|
|
319
|
+
],
|
|
320
|
+
SCMCategory.USER: [ControlCategory.IDENTITY],
|
|
321
|
+
SCMCategory.INBOX: [ControlCategory.EMAIL],
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
class BackgroundJobTypes(Enum, metaclass=MissingItem):
|
|
326
|
+
INVALID = -1
|
|
327
|
+
UPDATE_SCM = 1
|
|
328
|
+
DEPLOY_PROBE = 2
|
|
329
|
+
OBSERVED_DETECTED = 3
|
|
330
|
+
PRELUDE_ENDPOINT_SYNC = 4
|
|
331
|
+
EXPORT_SCM = 5
|
|
332
|
+
PARTNER_GROUPS = 6
|
|
333
|
+
|
|
334
|
+
@classmethod
|
|
335
|
+
def _missing_(cls, value):
|
|
336
|
+
return BackgroundJobTypes.INVALID
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
class EDRResponse(Enum, metaclass=MissingItem):
|
|
340
|
+
INVALID = -1
|
|
341
|
+
OBSERVE = 1
|
|
342
|
+
DETECT = 2
|
|
343
|
+
PREVENT = 3
|
|
344
|
+
|
|
345
|
+
@classmethod
|
|
346
|
+
def _missing_(cls, value):
|
|
347
|
+
return EDRResponse.INVALID
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
class PartnerEvents(Enum, metaclass=MissingItem):
|
|
351
|
+
INVALID = -1
|
|
352
|
+
REDUCED_FUNCTIONALITY_MODE = 1
|
|
353
|
+
NO_EDR = 2
|
|
354
|
+
MISSING_EDR_POLICY = 3
|
|
355
|
+
MISSING_AV_POLICY = 4
|
|
356
|
+
MISSING_MFA = 5
|
|
357
|
+
NO_ASSET_MANAGER = 6
|
|
358
|
+
MISCONFIGURED_POLICY_SETTING = 7
|
|
359
|
+
MISSING_SCAN = 8
|
|
360
|
+
OUT_OF_DATE_SCAN = 9
|
|
361
|
+
NO_VULN_MANAGER = 10
|
|
362
|
+
USER_MISSING_ASSET_MANAGER = 11
|
|
363
|
+
USER_MISSING_EDR = 12
|
|
364
|
+
USER_MISSING_VULN_MANAGER = 13
|
|
365
|
+
|
|
366
|
+
@classmethod
|
|
367
|
+
def _missing_(cls, value):
|
|
368
|
+
return PartnerEvents.INVALID
|
|
369
|
+
|
|
370
|
+
@classmethod
|
|
371
|
+
def control_category_mapping(cls):
|
|
372
|
+
return {
|
|
373
|
+
PartnerEvents.REDUCED_FUNCTIONALITY_MODE: [ControlCategory.XDR],
|
|
374
|
+
PartnerEvents.NO_EDR: [
|
|
375
|
+
ControlCategory.XDR,
|
|
376
|
+
],
|
|
377
|
+
PartnerEvents.MISSING_EDR_POLICY: [ControlCategory.XDR],
|
|
378
|
+
PartnerEvents.MISSING_AV_POLICY: [ControlCategory.XDR],
|
|
379
|
+
PartnerEvents.MISSING_MFA: [ControlCategory.IDENTITY],
|
|
380
|
+
PartnerEvents.NO_ASSET_MANAGER: [ControlCategory.ASSET_MANAGER],
|
|
381
|
+
PartnerEvents.MISCONFIGURED_POLICY_SETTING: [
|
|
382
|
+
ControlCategory.XDR,
|
|
383
|
+
ControlCategory.EMAIL,
|
|
384
|
+
ControlCategory.IDENTITY,
|
|
385
|
+
],
|
|
386
|
+
PartnerEvents.MISSING_SCAN: [ControlCategory.VULN_MANAGER],
|
|
387
|
+
PartnerEvents.OUT_OF_DATE_SCAN: [ControlCategory.VULN_MANAGER],
|
|
388
|
+
PartnerEvents.NO_VULN_MANAGER: [ControlCategory.VULN_MANAGER],
|
|
389
|
+
PartnerEvents.USER_MISSING_ASSET_MANAGER: [ControlCategory.IDENTITY],
|
|
390
|
+
PartnerEvents.USER_MISSING_EDR: [ControlCategory.IDENTITY],
|
|
391
|
+
PartnerEvents.USER_MISSING_VULN_MANAGER: [ControlCategory.IDENTITY],
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
class AlertTypes(Enum, metaclass=MissingItem):
|
|
396
|
+
INVALID = -1
|
|
397
|
+
NEW_REDUCED_FUNCTIONALITY_MODE_ENDPOINTS = 1
|
|
398
|
+
NEW_NO_EDR_ENDPOINTS = 2
|
|
399
|
+
NEW_MISSING_EDR_POLICY_ENDPOINTS = 3
|
|
400
|
+
NEW_MISSING_AV_POLICY_ENDPOINTS = 4
|
|
401
|
+
NEW_MISSING_MFA_USERS = 5
|
|
402
|
+
NEW_NO_ASSET_MANAGER_ENDPOINTS = 6
|
|
403
|
+
NEW_POLICY_SETTING_FAILURE = 7
|
|
404
|
+
NEW_POLICY_SETTING_PASS = 8
|
|
405
|
+
NEW_MISSING_SCAN_ENDPOINTS = 9
|
|
406
|
+
NEW_NO_VULN_MANAGER_ENDPOINTS = 10
|
|
407
|
+
NEW_OUT_OF_DATE_SCAN_ENDPOINTS = 11
|
|
408
|
+
NEW_USER_MISSING_ASSET_MANAGER = 12
|
|
409
|
+
NEW_USER_MISSING_EDR = 13
|
|
410
|
+
NEW_USER_MISSING_VULN_MANAGER = 14
|
|
411
|
+
|
|
412
|
+
@classmethod
|
|
413
|
+
def _missing_(cls, value):
|
|
414
|
+
return AlertTypes.INVALID
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
class PolicyType(Enum, metaclass=MissingItem):
|
|
418
|
+
INVALID = 0
|
|
419
|
+
EDR = 1
|
|
420
|
+
AV = 2
|
|
421
|
+
IDENTITY_PASSWORD = 3
|
|
422
|
+
EMAIL_ANTIPHISH = 4
|
|
423
|
+
EMAIL_OUTBOUND = 5
|
|
424
|
+
EMAIL_CONTENT = 6
|
|
425
|
+
EMAIL_MALWARE = 7
|
|
426
|
+
EMAIL_ATTACHMENT = 8
|
|
427
|
+
EMAIL_LINKS = 9
|
|
428
|
+
EMAIL_DKIM = 10
|
|
429
|
+
DEVICE_COMPLIANCE = 11
|
|
430
|
+
IDENTITY_MFA = 12
|
|
431
|
+
|
|
432
|
+
@classmethod
|
|
433
|
+
def _missing_(cls, value):
|
|
434
|
+
return PolicyType.INVALID
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
class Platform(Enum, metaclass=MissingItem):
|
|
438
|
+
INVALID = 0
|
|
439
|
+
WINDOWS = 1
|
|
440
|
+
DARWIN = 2
|
|
441
|
+
LINUX = 3
|
|
442
|
+
ALL = 4
|
|
443
|
+
|
|
444
|
+
@classmethod
|
|
445
|
+
def _missing_(cls, value):
|
|
446
|
+
return Platform.INVALID
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: prelude-sdk-beta
|
|
3
|
+
Version: 1406
|
|
4
|
+
Summary: For interacting with the Prelude API
|
|
5
|
+
Home-page: https://github.com/preludeorg
|
|
6
|
+
Author: Prelude Research
|
|
7
|
+
Author-email: support@preludesecurity.com
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Requires-Python: >=3.10
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Requires-Dist: requests
|
|
15
|
+
Dynamic: license-file
|
|
16
|
+
|
|
17
|
+
# Prelude SDK
|
|
18
|
+
|
|
19
|
+
Interact with the Prelude Service API via Python.
|
|
20
|
+
|
|
21
|
+
> The prelude-cli utility wraps around this SDK to provide a rich command line experience.
|
|
22
|
+
|
|
23
|
+
Install this package to write your own tooling that works with Build or Detect functionality.
|
|
24
|
+
|
|
25
|
+
- IAM: manage your account
|
|
26
|
+
- Build: write and maintain your collection of security tests
|
|
27
|
+
- Detect: schedule security tests for your endpoints
|
|
28
|
+
|
|
29
|
+
## Quick start
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pip install prelude-sdk
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Documentation
|
|
36
|
+
|
|
37
|
+
TBD
|
|
38
|
+
|
|
39
|
+
## Testing
|
|
40
|
+
|
|
41
|
+
To test the Python SDK and Probes, run the following commands from the python/sdk/ directory:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
pip install -r tests/requirements.txt
|
|
45
|
+
pytest tests --api https://api.preludesecurity.com --email <EMAIL>
|
|
46
|
+
```
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
prelude_sdk_beta/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
prelude_sdk_beta/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
prelude_sdk_beta/controllers/build_controller.py,sha256=XpsjsVJCcJ9jDOugBAqf2-tsvJYjyBk-_2wgVwaYfEw,8817
|
|
4
|
+
prelude_sdk_beta/controllers/detect_controller.py,sha256=0FAtg_HEZ2Z3ZDbfO8mpOKViF25tqHaFR5rUGRuULJA,7509
|
|
5
|
+
prelude_sdk_beta/controllers/export_controller.py,sha256=sTbRGmMa0xa7pB8AjSlJgifpXzutPHWw4bJBGygoAc4,862
|
|
6
|
+
prelude_sdk_beta/controllers/generate_controller.py,sha256=gNSr2yV1o8kdTy7heJ9bI31efEKyTKdacIkKl_eRIRg,1319
|
|
7
|
+
prelude_sdk_beta/controllers/http_controller.py,sha256=cj1SxmAX049ioAhTOQR4atuM82nJgd11S60-ISCg738,2300
|
|
8
|
+
prelude_sdk_beta/controllers/iam_controller.py,sha256=w40NO1kxPxLMFDICx32pqfZbTfDJTL9G-jxF6nR01Lw,7871
|
|
9
|
+
prelude_sdk_beta/controllers/jobs_controller.py,sha256=dwoBGX-gAVNKE8sbx1N_4jUJVDVSdNRYD826G0pfix0,765
|
|
10
|
+
prelude_sdk_beta/controllers/partner_controller.py,sha256=WV51CY-Bsf8Ms59y7RjtfvCmsArBoXt5-AHqrN8Eras,5128
|
|
11
|
+
prelude_sdk_beta/controllers/probe_controller.py,sha256=d2Aa74Css1uMNgBKGWqavbkEbXtVcOkYIIWbhDxzLS0,411
|
|
12
|
+
prelude_sdk_beta/controllers/scm_controller.py,sha256=X2CU11Se_zgGLKAR_whIlWMZdgT72XSfKCSP-gxNJaI,12793
|
|
13
|
+
prelude_sdk_beta/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
+
prelude_sdk_beta/models/account.py,sha256=ksyTZDOZpbT8XDu-Ygs_51ZG25oBd8qiwjO6-L6HH9Y,8734
|
|
15
|
+
prelude_sdk_beta/models/codes.py,sha256=-gxBflkV-RdE3LwGSDDSO48eK-J8skZ5CivMD2MYc5w,11425
|
|
16
|
+
prelude_sdk_beta-1406.dist-info/licenses/LICENSE,sha256=ttdT5omfN6LNmtQoIjUhkkFhz6i44SDMRNwKrbfyTf8,1069
|
|
17
|
+
prelude_sdk_beta-1406.dist-info/METADATA,sha256=L5B1pm77Vyl6sSukal59cWaI0uT5hw4tid0TkZTdzGs,1190
|
|
18
|
+
prelude_sdk_beta-1406.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
19
|
+
prelude_sdk_beta-1406.dist-info/top_level.txt,sha256=pqXTtEd5ElvJKoO6HAz232H9FW5j6X7gW4kEEakfSFM,17
|
|
20
|
+
prelude_sdk_beta-1406.dist-info/RECORD,,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
MIT LICENSE
|
|
2
|
+
|
|
3
|
+
Copyright 2022, Prelude Research
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
prelude_sdk_beta
|