pangea-sdk 1.3.0__py3-none-any.whl → 1.5.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.
- pangea/__init__.py +1 -1
- pangea/deep_verify.py +2 -2
- pangea/dump_audit.py +3 -9
- pangea/exceptions.py +40 -2
- pangea/request.py +40 -7
- pangea/response.py +8 -0
- pangea/services/__init__.py +1 -0
- pangea/services/audit/audit.py +28 -7
- pangea/services/audit/models.py +12 -0
- pangea/services/audit/util.py +6 -1
- pangea/services/intel.py +270 -82
- pangea/services/vault/models/asymmetric.py +67 -0
- pangea/services/vault/models/common.py +337 -0
- pangea/services/vault/models/secret.py +24 -0
- pangea/services/vault/models/symmetric.py +61 -0
- pangea/services/vault/vault.py +458 -0
- pangea/{tools_util.py → tools.py} +7 -9
- pangea/utils.py +22 -0
- {pangea_sdk-1.3.0.dist-info → pangea_sdk-1.5.0.dist-info}/METADATA +4 -3
- pangea_sdk-1.5.0.dist-info/RECORD +30 -0
- {pangea_sdk-1.3.0.dist-info → pangea_sdk-1.5.0.dist-info}/WHEEL +1 -1
- pangea_sdk-1.3.0.dist-info/RECORD +0 -24
pangea/services/intel.py
CHANGED
@@ -9,26 +9,39 @@ from pangea.response import APIRequestModel, APIResponseModel, PangeaResponse, P
|
|
9
9
|
from .base import ServiceBase
|
10
10
|
|
11
11
|
|
12
|
-
class
|
12
|
+
class IntelCommonRequest(APIRequestModel):
|
13
13
|
"""
|
14
|
-
|
14
|
+
Intel common request data
|
15
15
|
|
16
|
-
|
17
|
-
hash_type (str): Type of hash, can be "sha256", "sha" or "md5"
|
18
|
-
provider (str, optional): Provider of the reputation information. ("reversinglabs"). Default provider defined by the configuration.
|
16
|
+
provider (str, optional): Provider of the information. Default provider defined by the configuration.
|
19
17
|
verbose (bool, optional): Echo back the parameters of the API in the response
|
20
18
|
raw (bool, optional): Return additional details from the provider.
|
21
19
|
"""
|
22
20
|
|
23
|
-
hash: str
|
24
|
-
hash_type: str
|
25
21
|
verbose: Optional[bool] = None
|
26
22
|
raw: Optional[bool] = None
|
27
23
|
provider: Optional[str] = None
|
28
24
|
|
29
25
|
|
30
|
-
class
|
31
|
-
|
26
|
+
class IntelCommonResult(PangeaResponseResult):
|
27
|
+
"""
|
28
|
+
Intel common result data
|
29
|
+
"""
|
30
|
+
|
31
|
+
parameters: Optional[Dict] = None
|
32
|
+
raw_data: Optional[Dict] = None
|
33
|
+
|
34
|
+
|
35
|
+
class FileReputationRequest(APIRequestModel):
|
36
|
+
"""
|
37
|
+
File reputation request data
|
38
|
+
|
39
|
+
file_hash (str): Hash of the file to be looked up
|
40
|
+
hash_type (str): Type of hash, can be "sha256", "sha" or "md5"
|
41
|
+
"""
|
42
|
+
|
43
|
+
hash: str
|
44
|
+
hash_type: str
|
32
45
|
|
33
46
|
|
34
47
|
class FileReputationData(APIResponseModel):
|
@@ -47,31 +60,23 @@ class FileReputationResult(PangeaResponseResult):
|
|
47
60
|
"""
|
48
61
|
|
49
62
|
data: FileReputationData
|
50
|
-
parameters: Optional[Dict] = None
|
51
|
-
raw_data: Optional[Dict] = None
|
52
63
|
|
53
64
|
|
54
|
-
class
|
55
|
-
pass
|
56
|
-
|
57
|
-
|
58
|
-
class IPRepurationRequest(APIRequestModel):
|
65
|
+
class IPCommonRequest(IntelCommonRequest):
|
59
66
|
"""
|
60
|
-
IP
|
61
|
-
|
67
|
+
IP common request data
|
62
68
|
ip (str): IP address to search for reputation information
|
63
|
-
provider (str, optional): Provider of the reputation information. ("reversinglabs"). Default provider defined by the configuration.
|
64
|
-
verbose (bool, optional): Echo back the parameters of the API in the response
|
65
|
-
raw (bool, optional): Return additional details from the provider.
|
66
69
|
"""
|
67
70
|
|
68
71
|
ip: str
|
69
|
-
verbose: Optional[bool] = None
|
70
|
-
raw: Optional[bool] = None
|
71
|
-
provider: Optional[str] = None
|
72
72
|
|
73
73
|
|
74
|
-
class
|
74
|
+
class IPRepurationRequest(IPCommonRequest):
|
75
|
+
"""
|
76
|
+
IP reputation request data
|
77
|
+
|
78
|
+
"""
|
79
|
+
|
75
80
|
pass
|
76
81
|
|
77
82
|
|
@@ -87,35 +92,117 @@ class IPReputationData(APIResponseModel):
|
|
87
92
|
|
88
93
|
class IPReputationResult(PangeaResponseResult):
|
89
94
|
"""
|
90
|
-
IP
|
95
|
+
IP reputation result
|
91
96
|
"""
|
92
97
|
|
93
98
|
data: IPReputationData
|
94
|
-
parameters: Optional[Dict] = None
|
95
|
-
raw_data: Optional[Dict] = None
|
96
99
|
|
97
100
|
|
98
|
-
class
|
101
|
+
class IPGeolocateRequest(IPCommonRequest):
|
102
|
+
"""
|
103
|
+
IP geolocate request data
|
104
|
+
"""
|
105
|
+
|
99
106
|
pass
|
100
107
|
|
101
108
|
|
102
|
-
class
|
109
|
+
class IPGeolocateData(PangeaResponseResult):
|
110
|
+
"""
|
111
|
+
IP geolocate data
|
103
112
|
"""
|
104
|
-
Domain reputation request data
|
105
113
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
114
|
+
country: str
|
115
|
+
city: str
|
116
|
+
latitude: float
|
117
|
+
longitude: float
|
118
|
+
postal_code: str
|
119
|
+
country_code: str
|
120
|
+
|
121
|
+
|
122
|
+
class IPGeolocateResult(IntelCommonResult):
|
123
|
+
"""
|
124
|
+
IP geolocate result
|
125
|
+
"""
|
126
|
+
|
127
|
+
data: IPGeolocateData
|
128
|
+
|
129
|
+
|
130
|
+
class IPDomainRequest(IPCommonRequest):
|
131
|
+
"""
|
132
|
+
IP domain request data
|
133
|
+
"""
|
134
|
+
|
135
|
+
pass
|
136
|
+
|
137
|
+
|
138
|
+
class IPDomainData(PangeaResponseResult):
|
139
|
+
domain_found: bool
|
140
|
+
domain: Optional[str] = None
|
141
|
+
|
142
|
+
|
143
|
+
class IPDomainResult(IntelCommonResult):
|
144
|
+
"""
|
145
|
+
IP geolocate result
|
146
|
+
"""
|
147
|
+
|
148
|
+
data: IPDomainData
|
149
|
+
|
150
|
+
|
151
|
+
class IPVPNRequest(IPCommonRequest):
|
152
|
+
"""
|
153
|
+
IP VPN request data
|
154
|
+
"""
|
155
|
+
|
156
|
+
pass
|
157
|
+
|
158
|
+
|
159
|
+
class IPVPNData(PangeaResponseResult):
|
160
|
+
is_vpn: bool
|
161
|
+
|
162
|
+
|
163
|
+
class IPVPNResult(IntelCommonResult):
|
164
|
+
"""
|
165
|
+
IP geolocate result
|
166
|
+
"""
|
167
|
+
|
168
|
+
data: IPVPNData
|
169
|
+
|
170
|
+
|
171
|
+
class IPProxyRequest(IPCommonRequest):
|
172
|
+
"""
|
173
|
+
IP VPN request data
|
174
|
+
"""
|
175
|
+
|
176
|
+
pass
|
177
|
+
|
178
|
+
|
179
|
+
class IPProxyData(PangeaResponseResult):
|
180
|
+
is_proxy: bool
|
181
|
+
|
182
|
+
|
183
|
+
class IPProxyResult(IntelCommonResult):
|
184
|
+
"""
|
185
|
+
IP geolocate result
|
186
|
+
"""
|
187
|
+
|
188
|
+
data: IPProxyData
|
189
|
+
|
190
|
+
|
191
|
+
class DomainCommonRequest(IntelCommonRequest):
|
192
|
+
"""
|
193
|
+
Domain lookup request data
|
194
|
+
|
195
|
+
domain (str): Domain address to be analyzed
|
110
196
|
"""
|
111
197
|
|
112
198
|
domain: str
|
113
|
-
verbose: Optional[bool] = None
|
114
|
-
raw: Optional[bool] = None
|
115
|
-
provider: Optional[str] = None
|
116
199
|
|
117
200
|
|
118
|
-
class
|
201
|
+
class DomainReputationRequest(DomainCommonRequest):
|
202
|
+
"""
|
203
|
+
Domain reputation request data
|
204
|
+
"""
|
205
|
+
|
119
206
|
pass
|
120
207
|
|
121
208
|
|
@@ -135,31 +222,23 @@ class DomainReputationResult(PangeaResponseResult):
|
|
135
222
|
"""
|
136
223
|
|
137
224
|
data: DomainReputationData
|
138
|
-
parameters: Optional[Dict] = None
|
139
|
-
raw_data: Optional[Dict] = None
|
140
|
-
|
141
|
-
|
142
|
-
class DomainLookupResult(DomainReputationResult):
|
143
|
-
pass
|
144
225
|
|
145
226
|
|
146
|
-
class
|
227
|
+
class URLCommonRequest(IntelCommonRequest):
|
147
228
|
"""
|
148
|
-
URL
|
229
|
+
URL common request data
|
149
230
|
|
150
|
-
url (str): URL address to
|
151
|
-
provider (str, optional): Provider of the reputation information. ("crowdstrike"). Default provider defined by the configuration.
|
152
|
-
verbose (bool, optional): Echo back the parameters of the API in the response
|
153
|
-
raw (bool, optional): Return additional details from the provider.
|
231
|
+
url (str): URL address to be analyzed
|
154
232
|
"""
|
155
233
|
|
156
234
|
url: str
|
157
|
-
verbose: Optional[bool] = None
|
158
|
-
raw: Optional[bool] = None
|
159
|
-
provider: Optional[str] = None
|
160
235
|
|
161
236
|
|
162
|
-
class
|
237
|
+
class URLReputationRequest(URLCommonRequest):
|
238
|
+
"""
|
239
|
+
URL reputation request data
|
240
|
+
"""
|
241
|
+
|
163
242
|
pass
|
164
243
|
|
165
244
|
|
@@ -173,18 +252,12 @@ class URLReputationData(APIResponseModel):
|
|
173
252
|
verdict: str
|
174
253
|
|
175
254
|
|
176
|
-
class URLReputationResult(
|
255
|
+
class URLReputationResult(IntelCommonResult):
|
177
256
|
"""
|
178
|
-
URL
|
257
|
+
URL Reputation result
|
179
258
|
"""
|
180
259
|
|
181
260
|
data: URLReputationData
|
182
|
-
parameters: Optional[Dict] = None
|
183
|
-
raw_data: Optional[Dict] = None
|
184
|
-
|
185
|
-
|
186
|
-
class URLLookupResult(URLReputationResult):
|
187
|
-
pass
|
188
261
|
|
189
262
|
|
190
263
|
class FileIntel(ServiceBase):
|
@@ -222,9 +295,9 @@ class FileIntel(ServiceBase):
|
|
222
295
|
provider: Optional[str] = None,
|
223
296
|
verbose: Optional[bool] = None,
|
224
297
|
raw: Optional[bool] = None,
|
225
|
-
) -> PangeaResponse[
|
298
|
+
) -> PangeaResponse[FileReputationResult]:
|
226
299
|
"""
|
227
|
-
|
300
|
+
Reputation check
|
228
301
|
|
229
302
|
Retrieve hash-based file reputation from a provider, including an optional detailed report.
|
230
303
|
|
@@ -244,11 +317,10 @@ class FileIntel(ServiceBase):
|
|
244
317
|
|
245
318
|
Examples:
|
246
319
|
response = file_intel.lookup(hash="142b638c6a60b60c7f9928da4fb85a5a8e1422a9ffdc9ee49e17e56ccca9cf6e", hash_type="sha256", provider="reversinglabs")
|
247
|
-
|
248
320
|
"""
|
249
321
|
input = FileReputationRequest(hash=hash, hash_type=hash_type, verbose=verbose, raw=raw, provider=provider)
|
250
322
|
response = self.request.post("reputation", data=input.dict(exclude_none=True))
|
251
|
-
response.result =
|
323
|
+
response.result = FileReputationResult(**response.raw_result)
|
252
324
|
return response
|
253
325
|
|
254
326
|
def hashReputation(
|
@@ -260,7 +332,7 @@ class FileIntel(ServiceBase):
|
|
260
332
|
raw: Optional[bool] = None,
|
261
333
|
) -> PangeaResponse[FileReputationResult]:
|
262
334
|
"""
|
263
|
-
|
335
|
+
Reputation check
|
264
336
|
|
265
337
|
Retrieve hash-based file reputation from a provider, including an optional detailed report.
|
266
338
|
|
@@ -294,9 +366,9 @@ class FileIntel(ServiceBase):
|
|
294
366
|
provider: Optional[str] = None,
|
295
367
|
verbose: Optional[bool] = None,
|
296
368
|
raw: Optional[bool] = None,
|
297
|
-
) -> PangeaResponse[
|
369
|
+
) -> PangeaResponse[FileReputationResult]:
|
298
370
|
"""
|
299
|
-
|
371
|
+
Reputation, from filepath
|
300
372
|
|
301
373
|
Retrieve hash-based file reputation from a provider, including an optional detailed report.
|
302
374
|
|
@@ -322,7 +394,7 @@ class FileIntel(ServiceBase):
|
|
322
394
|
|
323
395
|
input = FileReputationRequest(hash=hash, hash_type="sha256", verbose=verbose, raw=raw, provider=provider)
|
324
396
|
response = self.request.post("reputation", data=input.dict(exclude_none=True))
|
325
|
-
response.result =
|
397
|
+
response.result = FileReputationResult(**response.raw_result)
|
326
398
|
return response
|
327
399
|
|
328
400
|
def filepathReputation(
|
@@ -333,7 +405,7 @@ class FileIntel(ServiceBase):
|
|
333
405
|
raw: Optional[bool] = None,
|
334
406
|
) -> PangeaResponse[FileReputationResult]:
|
335
407
|
"""
|
336
|
-
|
408
|
+
Reputation, from filepath
|
337
409
|
|
338
410
|
Retrieve hash-based file reputation from a provider, including an optional detailed report.
|
339
411
|
This function take care of calculate filepath hash and make the request to service
|
@@ -394,9 +466,9 @@ class DomainIntel(ServiceBase):
|
|
394
466
|
@pangea_deprecated(version="1.2.0", reason="Should use DomainIntel.reputation()")
|
395
467
|
def lookup(
|
396
468
|
self, domain: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
397
|
-
) -> PangeaResponse[
|
469
|
+
) -> PangeaResponse[DomainReputationResult]:
|
398
470
|
"""
|
399
|
-
|
471
|
+
Reputation check
|
400
472
|
|
401
473
|
Retrieve reputation for a domain from a provider, including an optional detailed report.
|
402
474
|
|
@@ -418,14 +490,14 @@ class DomainIntel(ServiceBase):
|
|
418
490
|
"""
|
419
491
|
input = DomainReputationRequest(domain=domain, verbose=verbose, provider=provider, raw=raw)
|
420
492
|
response = self.request.post("reputation", data=input.dict(exclude_none=True))
|
421
|
-
response.result =
|
493
|
+
response.result = DomainReputationResult(**response.raw_result)
|
422
494
|
return response
|
423
495
|
|
424
496
|
def reputation(
|
425
497
|
self, domain: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
426
498
|
) -> PangeaResponse[DomainReputationResult]:
|
427
499
|
"""
|
428
|
-
|
500
|
+
Reputation check
|
429
501
|
|
430
502
|
Retrieve reputation for a domain from a provider, including an optional detailed report.
|
431
503
|
|
@@ -483,7 +555,7 @@ class IpIntel(ServiceBase):
|
|
483
555
|
self, ip: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
484
556
|
) -> PangeaResponse[IPReputationResult]:
|
485
557
|
"""
|
486
|
-
|
558
|
+
Reputation
|
487
559
|
|
488
560
|
Retrieve a reputation score for an IP address from a provider, including an optional detailed report.
|
489
561
|
|
@@ -513,7 +585,7 @@ class IpIntel(ServiceBase):
|
|
513
585
|
self, ip: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
514
586
|
) -> PangeaResponse[IPReputationResult]:
|
515
587
|
"""
|
516
|
-
|
588
|
+
Reputation
|
517
589
|
|
518
590
|
Retrieve a reputation score for an IP address from a provider, including an optional detailed report.
|
519
591
|
|
@@ -538,6 +610,122 @@ class IpIntel(ServiceBase):
|
|
538
610
|
response.result = IPReputationResult(**response.raw_result)
|
539
611
|
return response
|
540
612
|
|
613
|
+
def geolocate(
|
614
|
+
self, ip: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
615
|
+
) -> PangeaResponse[IPGeolocateResult]:
|
616
|
+
"""
|
617
|
+
Geolocate
|
618
|
+
|
619
|
+
Retrieve information about the location of an IP address.
|
620
|
+
|
621
|
+
Args:
|
622
|
+
ip (str): IP address to be geolocated
|
623
|
+
provider (str, optional): Use geolocation data from this provider ("digitalelement"). Default provider defined by the configuration.
|
624
|
+
verbose (bool, optional): Echo the API parameters in the response
|
625
|
+
raw (bool, optional): Include raw data from this provider
|
626
|
+
|
627
|
+
Raises:
|
628
|
+
PangeaAPIException: If an API Error happens
|
629
|
+
|
630
|
+
Returns:
|
631
|
+
A PangeaResponse where the IP information is in the
|
632
|
+
response.result field. Available response fields can be found in our [API documentation](/docs/api/ip-intel)
|
633
|
+
|
634
|
+
Examples:
|
635
|
+
response = ip_intel.geolocate(ip="93.231.182.110", provider="digitalelement")
|
636
|
+
"""
|
637
|
+
input = IPGeolocateRequest(ip=ip, verbose=verbose, raw=raw, provider=provider)
|
638
|
+
response = self.request.post("geolocate", data=input.dict(exclude_none=True))
|
639
|
+
response.result = IPGeolocateResult(**response.raw_result)
|
640
|
+
return response
|
641
|
+
|
642
|
+
def get_domain(
|
643
|
+
self, ip: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
644
|
+
) -> PangeaResponse[IPDomainResult]:
|
645
|
+
"""
|
646
|
+
Domain
|
647
|
+
|
648
|
+
Retrieve the domain name associated with an IP address.
|
649
|
+
|
650
|
+
Args:
|
651
|
+
ip (str): IP address to be geolocated
|
652
|
+
provider (str, optional): Use geolocation data from this provider ("digitalelement"). Default provider defined by the configuration.
|
653
|
+
verbose (bool, optional): Echo the API parameters in the response
|
654
|
+
raw (bool, optional): Include raw data from this provider
|
655
|
+
|
656
|
+
Raises:
|
657
|
+
PangeaAPIException: If an API Error happens
|
658
|
+
|
659
|
+
Returns:
|
660
|
+
A PangeaResponse where the IP information is in the
|
661
|
+
response.result field. Available response fields can be found in our [API documentation](/docs/api/ip-intel)
|
662
|
+
|
663
|
+
Examples:
|
664
|
+
response = ip_intel.get_domain(ip="93.231.182.110", provider="digitalelement")
|
665
|
+
"""
|
666
|
+
input = IPDomainRequest(ip=ip, verbose=verbose, raw=raw, provider=provider)
|
667
|
+
response = self.request.post("domain", data=input.dict(exclude_none=True))
|
668
|
+
response.result = IPDomainResult(**response.raw_result)
|
669
|
+
return response
|
670
|
+
|
671
|
+
def is_vpn(
|
672
|
+
self, ip: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
673
|
+
) -> PangeaResponse[IPVPNResult]:
|
674
|
+
"""
|
675
|
+
VPN
|
676
|
+
|
677
|
+
Determine if an IP address is provided by a VPN service.
|
678
|
+
|
679
|
+
Args:
|
680
|
+
ip (str): IP address to be geolocated
|
681
|
+
provider (str, optional): Use geolocation data from this provider ("digitalelement"). Default provider defined by the configuration.
|
682
|
+
verbose (bool, optional): Echo the API parameters in the response
|
683
|
+
raw (bool, optional): Include raw data from this provider
|
684
|
+
|
685
|
+
Raises:
|
686
|
+
PangeaAPIException: If an API Error happens
|
687
|
+
|
688
|
+
Returns:
|
689
|
+
A PangeaResponse where the IP information is in the
|
690
|
+
response.result field. Available response fields can be found in our [API documentation](/docs/api/ip-intel)
|
691
|
+
|
692
|
+
Examples:
|
693
|
+
response = ip_intel.is_vpn(ip="93.231.182.110", provider="digitalelement")
|
694
|
+
"""
|
695
|
+
input = IPVPNRequest(ip=ip, verbose=verbose, raw=raw, provider=provider)
|
696
|
+
response = self.request.post("vpn", data=input.dict(exclude_none=True))
|
697
|
+
response.result = IPVPNResult(**response.raw_result)
|
698
|
+
return response
|
699
|
+
|
700
|
+
def is_proxy(
|
701
|
+
self, ip: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
702
|
+
) -> PangeaResponse[IPProxyResult]:
|
703
|
+
"""
|
704
|
+
Proxy
|
705
|
+
|
706
|
+
Determine if an IP address is provided by a proxy service.
|
707
|
+
|
708
|
+
Args:
|
709
|
+
ip (str): IP address to be geolocated
|
710
|
+
provider (str, optional): Use geolocation data from this provider ("digitalelement"). Default provider defined by the configuration.
|
711
|
+
verbose (bool, optional): Echo the API parameters in the response
|
712
|
+
raw (bool, optional): Include raw data from this provider
|
713
|
+
|
714
|
+
Raises:
|
715
|
+
PangeaAPIException: If an API Error happens
|
716
|
+
|
717
|
+
Returns:
|
718
|
+
A PangeaResponse where the IP information is in the
|
719
|
+
response.result field. Available response fields can be found in our [API documentation](/docs/api/ip-intel)
|
720
|
+
|
721
|
+
Examples:
|
722
|
+
response = ip_intel.is_proxy(ip="93.231.182.110", provider="digitalelement")
|
723
|
+
"""
|
724
|
+
input = IPProxyRequest(ip=ip, verbose=verbose, raw=raw, provider=provider)
|
725
|
+
response = self.request.post("proxy", data=input.dict(exclude_none=True))
|
726
|
+
response.result = IPProxyResult(**response.raw_result)
|
727
|
+
return response
|
728
|
+
|
541
729
|
|
542
730
|
class UrlIntel(ServiceBase):
|
543
731
|
"""URL Intel service client.
|
@@ -569,9 +757,9 @@ class UrlIntel(ServiceBase):
|
|
569
757
|
@pangea_deprecated(version="1.2.0", reason="Should use UrlIntel.reputation()")
|
570
758
|
def lookup(
|
571
759
|
self, url: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
572
|
-
) -> PangeaResponse[
|
760
|
+
) -> PangeaResponse[URLReputationResult]:
|
573
761
|
"""
|
574
|
-
|
762
|
+
Reputation check
|
575
763
|
|
576
764
|
Retrieve URL address reputation from a provider.
|
577
765
|
|
@@ -594,14 +782,14 @@ class UrlIntel(ServiceBase):
|
|
594
782
|
|
595
783
|
input = URLReputationRequest(url=url, provider=provider, verbose=verbose, raw=raw)
|
596
784
|
response = self.request.post("reputation", data=input.dict(exclude_none=True))
|
597
|
-
response.result =
|
785
|
+
response.result = URLReputationResult(**response.raw_result)
|
598
786
|
return response
|
599
787
|
|
600
788
|
def reputation(
|
601
789
|
self, url: str, verbose: Optional[bool] = None, raw: Optional[bool] = None, provider: Optional[str] = None
|
602
790
|
) -> PangeaResponse[URLReputationResult]:
|
603
791
|
"""
|
604
|
-
|
792
|
+
Reputation check
|
605
793
|
|
606
794
|
Retrieve URL address reputation from a provider.
|
607
795
|
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# Copyright 2022 Pangea Cyber Corporation
|
2
|
+
# Author: Pangea Cyber Corporation
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
from pangea.response import APIRequestModel, PangeaResponseResult
|
6
|
+
from pangea.services.vault.models.common import (
|
7
|
+
AsymmetricAlgorithm,
|
8
|
+
CommonGenerateRequest,
|
9
|
+
CommonGenerateResult,
|
10
|
+
CommonStoreRequest,
|
11
|
+
CommonStoreResult,
|
12
|
+
EncodedPrivateKey,
|
13
|
+
EncodedPublicKey,
|
14
|
+
KeyPurpose,
|
15
|
+
)
|
16
|
+
|
17
|
+
|
18
|
+
class AsymmetricGenerateRequest(CommonGenerateRequest):
|
19
|
+
algorithm: AsymmetricAlgorithm
|
20
|
+
purpose: KeyPurpose
|
21
|
+
|
22
|
+
|
23
|
+
class AsymmetricGenerateResult(CommonGenerateResult):
|
24
|
+
algorithm: str
|
25
|
+
purpose: str
|
26
|
+
public_key: EncodedPublicKey
|
27
|
+
|
28
|
+
|
29
|
+
class AsymmetricStoreRequest(CommonStoreRequest):
|
30
|
+
algorithm: AsymmetricAlgorithm
|
31
|
+
public_key: EncodedPublicKey
|
32
|
+
private_key: EncodedPrivateKey
|
33
|
+
purpose: KeyPurpose
|
34
|
+
|
35
|
+
|
36
|
+
class AsymmetricStoreResult(CommonStoreResult):
|
37
|
+
algorithm: str
|
38
|
+
purpose: str
|
39
|
+
public_key: EncodedPublicKey
|
40
|
+
|
41
|
+
|
42
|
+
class SignRequest(APIRequestModel):
|
43
|
+
id: str
|
44
|
+
message: str
|
45
|
+
version: Optional[int] = None
|
46
|
+
|
47
|
+
|
48
|
+
class SignResult(PangeaResponseResult):
|
49
|
+
id: str
|
50
|
+
version: int
|
51
|
+
algorithm: str
|
52
|
+
signature: str
|
53
|
+
public_key: Optional[EncodedPublicKey] = None
|
54
|
+
|
55
|
+
|
56
|
+
class VerifyRequest(APIRequestModel):
|
57
|
+
id: str
|
58
|
+
message: str
|
59
|
+
signature: str
|
60
|
+
version: Optional[int] = None
|
61
|
+
|
62
|
+
|
63
|
+
class VerifyResult(PangeaResponseResult):
|
64
|
+
id: str
|
65
|
+
version: int
|
66
|
+
algorithm: str
|
67
|
+
valid_signature: bool
|