pangea-sdk 3.8.0b1__py3-none-any.whl → 5.3.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/asyncio/file_uploader.py +1 -1
- pangea/asyncio/request.py +49 -31
- pangea/asyncio/services/__init__.py +2 -0
- pangea/asyncio/services/audit.py +192 -31
- pangea/asyncio/services/authn.py +187 -109
- pangea/asyncio/services/authz.py +285 -0
- pangea/asyncio/services/base.py +21 -2
- pangea/asyncio/services/embargo.py +2 -2
- pangea/asyncio/services/file_scan.py +24 -9
- pangea/asyncio/services/intel.py +108 -34
- pangea/asyncio/services/redact.py +72 -4
- pangea/asyncio/services/sanitize.py +217 -0
- pangea/asyncio/services/share.py +246 -73
- pangea/asyncio/services/vault.py +1710 -750
- pangea/crypto/rsa.py +135 -0
- pangea/deep_verify.py +7 -1
- pangea/dump_audit.py +9 -8
- pangea/request.py +83 -59
- pangea/response.py +49 -31
- pangea/services/__init__.py +2 -0
- pangea/services/audit/audit.py +205 -42
- pangea/services/audit/models.py +56 -8
- pangea/services/audit/signing.py +6 -5
- pangea/services/audit/util.py +3 -3
- pangea/services/authn/authn.py +140 -70
- pangea/services/authn/models.py +167 -11
- pangea/services/authz.py +400 -0
- pangea/services/base.py +39 -8
- pangea/services/embargo.py +2 -2
- pangea/services/file_scan.py +32 -15
- pangea/services/intel.py +157 -32
- pangea/services/redact.py +152 -4
- pangea/services/sanitize.py +388 -0
- pangea/services/share/share.py +683 -107
- pangea/services/vault/models/asymmetric.py +120 -18
- pangea/services/vault/models/common.py +439 -141
- pangea/services/vault/models/keys.py +94 -0
- pangea/services/vault/models/secret.py +27 -3
- pangea/services/vault/models/symmetric.py +68 -22
- pangea/services/vault/vault.py +1690 -749
- pangea/tools.py +6 -7
- pangea/utils.py +16 -27
- pangea/verify_audit.py +270 -83
- {pangea_sdk-3.8.0b1.dist-info → pangea_sdk-5.3.0.dist-info}/METADATA +43 -35
- pangea_sdk-5.3.0.dist-info/RECORD +56 -0
- {pangea_sdk-3.8.0b1.dist-info → pangea_sdk-5.3.0.dist-info}/WHEEL +1 -1
- pangea_sdk-3.8.0b1.dist-info/RECORD +0 -50
pangea/asyncio/services/authn.py
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
# Copyright 2022 Pangea Cyber Corporation
|
2
2
|
# Author: Pangea Cyber Corporation
|
3
|
+
from __future__ import annotations
|
3
4
|
|
4
5
|
from typing import Dict, List, Optional, Union
|
5
6
|
|
6
7
|
import pangea.services.authn.models as m
|
7
8
|
from pangea.asyncio.services.base import ServiceBaseAsync
|
8
|
-
from pangea.
|
9
|
+
from pangea.config import PangeaConfig
|
10
|
+
from pangea.response import PangeaResponse, PangeaResponseResult
|
9
11
|
|
10
12
|
SERVICE_NAME = "authn"
|
11
13
|
|
@@ -23,24 +25,38 @@ class AuthNAsync(ServiceBaseAsync):
|
|
23
25
|
import os
|
24
26
|
|
25
27
|
# Pangea SDK
|
28
|
+
from pangea.asyncio.services import AuthNAsync
|
26
29
|
from pangea.config import PangeaConfig
|
27
|
-
from pangea.services import AuthN
|
28
30
|
|
29
31
|
PANGEA_TOKEN = os.getenv("PANGEA_AUTHN_TOKEN")
|
30
32
|
authn_config = PangeaConfig(domain="pangea.cloud")
|
31
33
|
|
32
34
|
# Setup Pangea AuthN service
|
33
|
-
authn =
|
35
|
+
authn = AuthNAsync(token=PANGEA_TOKEN, config=authn_config)
|
34
36
|
"""
|
35
37
|
|
36
38
|
service_name = SERVICE_NAME
|
37
39
|
|
38
40
|
def __init__(
|
39
41
|
self,
|
40
|
-
token,
|
41
|
-
config=None,
|
42
|
-
logger_name="pangea",
|
43
|
-
):
|
42
|
+
token: str,
|
43
|
+
config: PangeaConfig | None = None,
|
44
|
+
logger_name: str = "pangea",
|
45
|
+
) -> None:
|
46
|
+
"""
|
47
|
+
AuthN client
|
48
|
+
|
49
|
+
Initializes a new AuthN client.
|
50
|
+
|
51
|
+
Args:
|
52
|
+
token: Pangea API token.
|
53
|
+
config: Configuration.
|
54
|
+
logger_name: Logger name.
|
55
|
+
|
56
|
+
Examples:
|
57
|
+
config = PangeaConfig(domain="pangea_domain")
|
58
|
+
authn = AuthNAsync(token="pangea_token", config=config)
|
59
|
+
"""
|
44
60
|
super().__init__(token, config, logger_name=logger_name)
|
45
61
|
self.user = AuthNAsync.UserAsync(token, config, logger_name=logger_name)
|
46
62
|
self.flow = AuthNAsync.FlowAsync(token, config, logger_name=logger_name)
|
@@ -53,10 +69,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
53
69
|
|
54
70
|
def __init__(
|
55
71
|
self,
|
56
|
-
token,
|
57
|
-
config=None,
|
58
|
-
logger_name="pangea",
|
59
|
-
):
|
72
|
+
token: str,
|
73
|
+
config: PangeaConfig | None = None,
|
74
|
+
logger_name: str = "pangea",
|
75
|
+
) -> None:
|
60
76
|
super().__init__(token, config, logger_name=logger_name)
|
61
77
|
|
62
78
|
async def invalidate(self, session_id: str) -> PangeaResponse[m.SessionInvalidateResult]:
|
@@ -80,7 +96,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
80
96
|
"""
|
81
97
|
input = m.SessionInvalidateRequest(session_id=session_id)
|
82
98
|
return await self.request.post(
|
83
|
-
"v2/session/invalidate", m.SessionInvalidateResult, data=input.
|
99
|
+
"v2/session/invalidate", m.SessionInvalidateResult, data=input.model_dump(exclude_none=True)
|
84
100
|
)
|
85
101
|
|
86
102
|
async def list(
|
@@ -117,7 +133,9 @@ class AuthNAsync(ServiceBaseAsync):
|
|
117
133
|
filter = m.SessionListFilter(**filter)
|
118
134
|
|
119
135
|
input = m.SessionListRequest(filter=filter, last=last, order=order, order_by=order_by, size=size)
|
120
|
-
return await self.request.post(
|
136
|
+
return await self.request.post(
|
137
|
+
"v2/session/list", m.SessionListResults, data=input.model_dump(exclude_none=True)
|
138
|
+
)
|
121
139
|
|
122
140
|
async def logout(self, user_id: str) -> PangeaResponse[m.SessionLogoutResult]:
|
123
141
|
"""
|
@@ -140,7 +158,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
140
158
|
"""
|
141
159
|
input = m.SessionLogoutRequest(user_id=user_id)
|
142
160
|
return await self.request.post(
|
143
|
-
"v2/session/logout", m.SessionLogoutResult, data=input.
|
161
|
+
"v2/session/logout", m.SessionLogoutResult, data=input.model_dump(exclude_none=True)
|
144
162
|
)
|
145
163
|
|
146
164
|
class ClientAsync(ServiceBaseAsync):
|
@@ -148,10 +166,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
148
166
|
|
149
167
|
def __init__(
|
150
168
|
self,
|
151
|
-
token,
|
152
|
-
config=None,
|
153
|
-
logger_name="pangea",
|
154
|
-
):
|
169
|
+
token: str,
|
170
|
+
config: PangeaConfig | None = None,
|
171
|
+
logger_name: str = "pangea",
|
172
|
+
) -> None:
|
155
173
|
super().__init__(token, config, logger_name=logger_name)
|
156
174
|
self.session = AuthNAsync.ClientAsync.SessionAsync(token, config, logger_name=logger_name)
|
157
175
|
self.password = AuthNAsync.ClientAsync.PasswordAsync(token, config, logger_name=logger_name)
|
@@ -180,7 +198,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
180
198
|
"""
|
181
199
|
input = m.ClientUserinfoRequest(code=code)
|
182
200
|
return await self.request.post(
|
183
|
-
"v2/client/userinfo", m.ClientUserinfoResult, data=input.
|
201
|
+
"v2/client/userinfo", m.ClientUserinfoResult, data=input.model_dump(exclude_none=True)
|
184
202
|
)
|
185
203
|
|
186
204
|
async def jwks(
|
@@ -208,10 +226,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
208
226
|
|
209
227
|
def __init__(
|
210
228
|
self,
|
211
|
-
token,
|
212
|
-
config=None,
|
213
|
-
logger_name="pangea",
|
214
|
-
):
|
229
|
+
token: str,
|
230
|
+
config: PangeaConfig | None = None,
|
231
|
+
logger_name: str = "pangea",
|
232
|
+
) -> None:
|
215
233
|
super().__init__(token, config, logger_name=logger_name)
|
216
234
|
|
217
235
|
async def invalidate(self, token: str, session_id: str) -> PangeaResponse[m.ClientSessionInvalidateResult]:
|
@@ -237,7 +255,9 @@ class AuthNAsync(ServiceBaseAsync):
|
|
237
255
|
"""
|
238
256
|
input = m.ClientSessionInvalidateRequest(token=token, session_id=session_id)
|
239
257
|
return await self.request.post(
|
240
|
-
"v2/client/session/invalidate",
|
258
|
+
"v2/client/session/invalidate",
|
259
|
+
m.ClientSessionInvalidateResult,
|
260
|
+
data=input.model_dump(exclude_none=True),
|
241
261
|
)
|
242
262
|
|
243
263
|
async def list(
|
@@ -281,7 +301,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
281
301
|
token=token, filter=filter, last=last, order=order, order_by=order_by, size=size
|
282
302
|
)
|
283
303
|
return await self.request.post(
|
284
|
-
"v2/client/session/list", m.ClientSessionListResults, data=input.
|
304
|
+
"v2/client/session/list", m.ClientSessionListResults, data=input.model_dump(exclude_none=True)
|
285
305
|
)
|
286
306
|
|
287
307
|
async def logout(self, token: str) -> PangeaResponse[m.ClientSessionLogoutResult]:
|
@@ -305,7 +325,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
305
325
|
"""
|
306
326
|
input = m.ClientSessionLogoutRequest(token=token)
|
307
327
|
return await self.request.post(
|
308
|
-
"v2/client/session/logout", m.ClientSessionLogoutResult, data=input.
|
328
|
+
"v2/client/session/logout", m.ClientSessionLogoutResult, data=input.model_dump(exclude_none=True)
|
309
329
|
)
|
310
330
|
|
311
331
|
async def refresh(
|
@@ -335,7 +355,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
335
355
|
"""
|
336
356
|
input = m.ClientSessionRefreshRequest(refresh_token=refresh_token, user_token=user_token)
|
337
357
|
return await self.request.post(
|
338
|
-
"v2/client/session/refresh", m.ClientSessionRefreshResult, data=input.
|
358
|
+
"v2/client/session/refresh", m.ClientSessionRefreshResult, data=input.model_dump(exclude_none=True)
|
339
359
|
)
|
340
360
|
|
341
361
|
class PasswordAsync(ServiceBaseAsync):
|
@@ -343,10 +363,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
343
363
|
|
344
364
|
def __init__(
|
345
365
|
self,
|
346
|
-
token,
|
347
|
-
config=None,
|
348
|
-
logger_name="pangea",
|
349
|
-
):
|
366
|
+
token: str,
|
367
|
+
config: PangeaConfig | None = None,
|
368
|
+
logger_name: str = "pangea",
|
369
|
+
) -> None:
|
350
370
|
super().__init__(token, config, logger_name=logger_name)
|
351
371
|
|
352
372
|
async def change(
|
@@ -376,18 +396,37 @@ class AuthNAsync(ServiceBaseAsync):
|
|
376
396
|
"""
|
377
397
|
input = m.ClientPasswordChangeRequest(token=token, old_password=old_password, new_password=new_password)
|
378
398
|
return await self.request.post(
|
379
|
-
"v2/client/password/change", m.ClientPasswordChangeResult, data=input.
|
399
|
+
"v2/client/password/change", m.ClientPasswordChangeResult, data=input.model_dump(exclude_none=True)
|
380
400
|
)
|
381
401
|
|
402
|
+
async def expire(self, user_id: str) -> PangeaResponse[PangeaResponseResult]:
|
403
|
+
"""
|
404
|
+
Expire a user's password
|
405
|
+
|
406
|
+
Expire a user's password.
|
407
|
+
|
408
|
+
OperationId: authn_post_v2_user_password_expire
|
409
|
+
|
410
|
+
Args:
|
411
|
+
user_id: The identity of a user or a service.
|
412
|
+
|
413
|
+
Returns:
|
414
|
+
A PangeaResponse with an empty object in the response.result field.
|
415
|
+
|
416
|
+
Examples:
|
417
|
+
await authn.client.password.expire("pui_[...]")
|
418
|
+
"""
|
419
|
+
return await self.request.post("v2/user/password/expire", PangeaResponseResult, {"id": user_id})
|
420
|
+
|
382
421
|
class TokenAsync(ServiceBaseAsync):
|
383
422
|
service_name = SERVICE_NAME
|
384
423
|
|
385
424
|
def __init__(
|
386
425
|
self,
|
387
|
-
token,
|
388
|
-
config=None,
|
389
|
-
logger_name="pangea",
|
390
|
-
):
|
426
|
+
token: str,
|
427
|
+
config: PangeaConfig | None = None,
|
428
|
+
logger_name: str = "pangea",
|
429
|
+
) -> None:
|
391
430
|
super().__init__(token, config, logger_name=logger_name)
|
392
431
|
|
393
432
|
async def check(self, token: str) -> PangeaResponse[m.ClientTokenCheckResult]:
|
@@ -413,7 +452,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
413
452
|
"""
|
414
453
|
input = m.ClientTokenCheckRequest(token=token)
|
415
454
|
return await self.request.post(
|
416
|
-
"v2/client/token/check", m.ClientTokenCheckResult, data=input.
|
455
|
+
"v2/client/token/check", m.ClientTokenCheckResult, data=input.model_dump(exclude_none=True)
|
417
456
|
)
|
418
457
|
|
419
458
|
class UserAsync(ServiceBaseAsync):
|
@@ -421,10 +460,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
421
460
|
|
422
461
|
def __init__(
|
423
462
|
self,
|
424
|
-
token,
|
425
|
-
config=None,
|
426
|
-
logger_name="pangea",
|
427
|
-
):
|
463
|
+
token: str,
|
464
|
+
config: PangeaConfig | None = None,
|
465
|
+
logger_name: str = "pangea",
|
466
|
+
) -> None:
|
428
467
|
super().__init__(token, config, logger_name=logger_name)
|
429
468
|
self.profile = AuthNAsync.UserAsync.ProfileAsync(token, config, logger_name=logger_name)
|
430
469
|
self.authenticators = AuthNAsync.UserAsync.AuthenticatorsAsync(token, config, logger_name=logger_name)
|
@@ -434,6 +473,8 @@ class AuthNAsync(ServiceBaseAsync):
|
|
434
473
|
self,
|
435
474
|
email: str,
|
436
475
|
profile: m.Profile,
|
476
|
+
*,
|
477
|
+
username: str | None = None,
|
437
478
|
) -> PangeaResponse[m.UserCreateResult]:
|
438
479
|
"""
|
439
480
|
Create User
|
@@ -443,8 +484,9 @@ class AuthNAsync(ServiceBaseAsync):
|
|
443
484
|
OperationId: authn_post_v2_user_create
|
444
485
|
|
445
486
|
Args:
|
446
|
-
email
|
447
|
-
profile
|
487
|
+
email: An email address.
|
488
|
+
profile: A user profile as a collection of string properties.
|
489
|
+
username: A username.
|
448
490
|
|
449
491
|
Returns:
|
450
492
|
A PangeaResponse with a user and its information in the response.result field.
|
@@ -463,11 +505,14 @@ class AuthNAsync(ServiceBaseAsync):
|
|
463
505
|
input = m.UserCreateRequest(
|
464
506
|
email=email,
|
465
507
|
profile=profile,
|
508
|
+
username=username,
|
509
|
+
)
|
510
|
+
return await self.request.post(
|
511
|
+
"v2/user/create", m.UserCreateResult, data=input.model_dump(exclude_none=True)
|
466
512
|
)
|
467
|
-
return await self.request.post("v2/user/create", m.UserCreateResult, data=input.dict(exclude_none=True))
|
468
513
|
|
469
514
|
async def delete(
|
470
|
-
self, email:
|
515
|
+
self, email: str | None = None, id: str | None = None, *, username: str | None = None
|
471
516
|
) -> PangeaResponse[m.UserDeleteResult]:
|
472
517
|
"""
|
473
518
|
Delete User
|
@@ -477,8 +522,9 @@ class AuthNAsync(ServiceBaseAsync):
|
|
477
522
|
OperationId: authn_post_v2_user_delete
|
478
523
|
|
479
524
|
Args:
|
480
|
-
email
|
481
|
-
id
|
525
|
+
email: An email address.
|
526
|
+
id: The id of a user or a service.
|
527
|
+
username: A username.
|
482
528
|
|
483
529
|
Returns:
|
484
530
|
A PangeaResponse with an empty object in the response.result field.
|
@@ -486,8 +532,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
486
532
|
Examples:
|
487
533
|
authn.user.delete(email="example@example.com")
|
488
534
|
"""
|
489
|
-
input = m.UserDeleteRequest(email=email, id=id)
|
490
|
-
return await self.request.post(
|
535
|
+
input = m.UserDeleteRequest(email=email, id=id, username=username)
|
536
|
+
return await self.request.post(
|
537
|
+
"v2/user/delete", m.UserDeleteResult, data=input.model_dump(exclude_none=True)
|
538
|
+
)
|
491
539
|
|
492
540
|
async def invite(
|
493
541
|
self,
|
@@ -528,13 +576,17 @@ class AuthNAsync(ServiceBaseAsync):
|
|
528
576
|
callback=callback,
|
529
577
|
state=state,
|
530
578
|
)
|
531
|
-
return await self.request.post(
|
579
|
+
return await self.request.post(
|
580
|
+
"v2/user/invite", m.UserInviteResult, data=input.model_dump(exclude_none=True)
|
581
|
+
)
|
532
582
|
|
533
583
|
async def update(
|
534
584
|
self,
|
535
585
|
disabled: bool,
|
536
|
-
id:
|
537
|
-
email:
|
586
|
+
id: str | None = None,
|
587
|
+
email: str | None = None,
|
588
|
+
*,
|
589
|
+
username: str | None = None,
|
538
590
|
) -> PangeaResponse[m.UserUpdateResult]:
|
539
591
|
"""
|
540
592
|
Update user's settings
|
@@ -544,10 +596,11 @@ class AuthNAsync(ServiceBaseAsync):
|
|
544
596
|
OperationId: authn_post_v2_user_update
|
545
597
|
|
546
598
|
Args:
|
547
|
-
disabled
|
599
|
+
disabled: New disabled value.
|
548
600
|
Disabling a user account will prevent them from logging in.
|
549
|
-
id
|
550
|
-
email
|
601
|
+
id: The identity of a user or a service.
|
602
|
+
email: An email address.
|
603
|
+
username: A username.
|
551
604
|
|
552
605
|
Returns:
|
553
606
|
A PangeaResponse with a user and its information in the response.result field.
|
@@ -564,9 +617,12 @@ class AuthNAsync(ServiceBaseAsync):
|
|
564
617
|
id=id,
|
565
618
|
email=email,
|
566
619
|
disabled=disabled,
|
620
|
+
username=username,
|
567
621
|
)
|
568
622
|
|
569
|
-
return await self.request.post(
|
623
|
+
return await self.request.post(
|
624
|
+
"v2/user/update", m.UserUpdateResult, data=input.model_dump(exclude_none=True)
|
625
|
+
)
|
570
626
|
|
571
627
|
async def list(
|
572
628
|
self,
|
@@ -608,17 +664,17 @@ class AuthNAsync(ServiceBaseAsync):
|
|
608
664
|
order_by=order_by,
|
609
665
|
size=size,
|
610
666
|
)
|
611
|
-
return await self.request.post("v2/user/list", m.UserListResult, data=input.
|
667
|
+
return await self.request.post("v2/user/list", m.UserListResult, data=input.model_dump(exclude_none=True))
|
612
668
|
|
613
669
|
class InvitesAsync(ServiceBaseAsync):
|
614
670
|
service_name = SERVICE_NAME
|
615
671
|
|
616
672
|
def __init__(
|
617
673
|
self,
|
618
|
-
token,
|
619
|
-
config=None,
|
620
|
-
logger_name="pangea",
|
621
|
-
):
|
674
|
+
token: str,
|
675
|
+
config: PangeaConfig | None = None,
|
676
|
+
logger_name: str = "pangea",
|
677
|
+
) -> None:
|
622
678
|
super().__init__(token, config, logger_name=logger_name)
|
623
679
|
|
624
680
|
async def list(
|
@@ -655,7 +711,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
655
711
|
|
656
712
|
input = m.UserInviteListRequest(filter=filter, last=last, order=order, order_by=order_by, size=size)
|
657
713
|
return await self.request.post(
|
658
|
-
"v2/user/invite/list", m.UserInviteListResult, data=input.
|
714
|
+
"v2/user/invite/list", m.UserInviteListResult, data=input.model_dump(exclude_none=True)
|
659
715
|
)
|
660
716
|
|
661
717
|
async def delete(self, id: str) -> PangeaResponse[m.UserInviteDeleteResult]:
|
@@ -679,7 +735,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
679
735
|
"""
|
680
736
|
input = m.UserInviteDeleteRequest(id=id)
|
681
737
|
return await self.request.post(
|
682
|
-
"v2/user/invite/delete", m.UserInviteDeleteResult, data=input.
|
738
|
+
"v2/user/invite/delete", m.UserInviteDeleteResult, data=input.model_dump(exclude_none=True)
|
683
739
|
)
|
684
740
|
|
685
741
|
class AuthenticatorsAsync(ServiceBaseAsync):
|
@@ -687,14 +743,19 @@ class AuthNAsync(ServiceBaseAsync):
|
|
687
743
|
|
688
744
|
def __init__(
|
689
745
|
self,
|
690
|
-
token,
|
691
|
-
config=None,
|
692
|
-
logger_name="pangea",
|
693
|
-
):
|
746
|
+
token: str,
|
747
|
+
config: PangeaConfig | None = None,
|
748
|
+
logger_name: str = "pangea",
|
749
|
+
) -> None:
|
694
750
|
super().__init__(token, config, logger_name=logger_name)
|
695
751
|
|
696
752
|
async def delete(
|
697
|
-
self,
|
753
|
+
self,
|
754
|
+
authenticator_id: str,
|
755
|
+
id: str | None = None,
|
756
|
+
email: str | None = None,
|
757
|
+
*,
|
758
|
+
username: str | None = None,
|
698
759
|
) -> PangeaResponse[m.UserAuthenticatorsDeleteResult]:
|
699
760
|
"""
|
700
761
|
Delete user authenticator
|
@@ -704,9 +765,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
704
765
|
OperationId: authn_post_v2_user_authenticators_delete
|
705
766
|
|
706
767
|
Args:
|
707
|
-
authenticator_id
|
708
|
-
id
|
709
|
-
email
|
768
|
+
authenticator_id: An ID for an authenticator.
|
769
|
+
id: The identity of a user or a service.
|
770
|
+
email: An email address.
|
771
|
+
username: A username.
|
710
772
|
|
711
773
|
Returns:
|
712
774
|
A PangeaResponse with an empty object in the response.result field.
|
@@ -717,15 +779,17 @@ class AuthNAsync(ServiceBaseAsync):
|
|
717
779
|
id="pui_xpkhwpnz2cmegsws737xbsqnmnuwtbm5",
|
718
780
|
)
|
719
781
|
"""
|
720
|
-
input = m.UserAuthenticatorsDeleteRequest(
|
782
|
+
input = m.UserAuthenticatorsDeleteRequest(
|
783
|
+
authenticator_id=authenticator_id, email=email, id=id, username=username
|
784
|
+
)
|
721
785
|
return await self.request.post(
|
722
786
|
"v2/user/authenticators/delete",
|
723
787
|
m.UserAuthenticatorsDeleteResult,
|
724
|
-
data=input.
|
788
|
+
data=input.model_dump(exclude_none=True),
|
725
789
|
)
|
726
790
|
|
727
791
|
async def list(
|
728
|
-
self, email:
|
792
|
+
self, email: str | None = None, id: str | None = None, *, username: str | None = None
|
729
793
|
) -> PangeaResponse[m.UserAuthenticatorsListResult]:
|
730
794
|
"""
|
731
795
|
Get user authenticators
|
@@ -735,8 +799,9 @@ class AuthNAsync(ServiceBaseAsync):
|
|
735
799
|
OperationId: authn_post_v2_user_authenticators_list
|
736
800
|
|
737
801
|
Args:
|
738
|
-
email
|
739
|
-
id
|
802
|
+
email: An email address.
|
803
|
+
id: The identity of a user or a service.
|
804
|
+
username: A username.
|
740
805
|
|
741
806
|
Returns:
|
742
807
|
A PangeaResponse with a list of authenticators in the response.result field.
|
@@ -748,9 +813,11 @@ class AuthNAsync(ServiceBaseAsync):
|
|
748
813
|
id="pui_xpkhwpnz2cmegsws737xbsqnmnuwtbm5",
|
749
814
|
)
|
750
815
|
"""
|
751
|
-
input = m.UserAuthenticatorsListRequest(email=email, id=id)
|
816
|
+
input = m.UserAuthenticatorsListRequest(email=email, id=id, username=username)
|
752
817
|
return await self.request.post(
|
753
|
-
"v2/user/authenticators/list",
|
818
|
+
"v2/user/authenticators/list",
|
819
|
+
m.UserAuthenticatorsListResult,
|
820
|
+
data=input.model_dump(exclude_none=True),
|
754
821
|
)
|
755
822
|
|
756
823
|
class ProfileAsync(ServiceBaseAsync):
|
@@ -758,14 +825,14 @@ class AuthNAsync(ServiceBaseAsync):
|
|
758
825
|
|
759
826
|
def __init__(
|
760
827
|
self,
|
761
|
-
token,
|
762
|
-
config=None,
|
763
|
-
logger_name="pangea",
|
764
|
-
):
|
828
|
+
token: str,
|
829
|
+
config: PangeaConfig | None = None,
|
830
|
+
logger_name: str = "pangea",
|
831
|
+
) -> None:
|
765
832
|
super().__init__(token, config, logger_name=logger_name)
|
766
833
|
|
767
834
|
async def get(
|
768
|
-
self, id:
|
835
|
+
self, id: str | None = None, email: str | None = None, *, username: str | None = None
|
769
836
|
) -> PangeaResponse[m.UserProfileGetResult]:
|
770
837
|
"""
|
771
838
|
Get user
|
@@ -775,8 +842,9 @@ class AuthNAsync(ServiceBaseAsync):
|
|
775
842
|
OperationId: authn_post_v2_user_profile_get
|
776
843
|
|
777
844
|
Args:
|
778
|
-
id
|
779
|
-
email
|
845
|
+
id: The identity of a user or a service.
|
846
|
+
email: An email address.
|
847
|
+
username: A username.
|
780
848
|
|
781
849
|
Returns:
|
782
850
|
A PangeaResponse with a user and its information in the response.result field.
|
@@ -788,16 +856,18 @@ class AuthNAsync(ServiceBaseAsync):
|
|
788
856
|
email="joe.user@email.com",
|
789
857
|
)
|
790
858
|
"""
|
791
|
-
input = m.UserProfileGetRequest(id=id, email=email)
|
859
|
+
input = m.UserProfileGetRequest(id=id, email=email, username=username)
|
792
860
|
return await self.request.post(
|
793
|
-
"v2/user/profile/get", m.UserProfileGetResult, data=input.
|
861
|
+
"v2/user/profile/get", m.UserProfileGetResult, data=input.model_dump(exclude_none=True)
|
794
862
|
)
|
795
863
|
|
796
864
|
async def update(
|
797
865
|
self,
|
798
866
|
profile: m.Profile,
|
799
|
-
id:
|
800
|
-
email:
|
867
|
+
id: str | None = None,
|
868
|
+
email: str | None = None,
|
869
|
+
*,
|
870
|
+
username: str | None = None,
|
801
871
|
) -> PangeaResponse[m.UserProfileUpdateResult]:
|
802
872
|
"""
|
803
873
|
Update user
|
@@ -807,9 +877,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
807
877
|
OperationId: authn_post_v2_user_profile_update
|
808
878
|
|
809
879
|
Args:
|
810
|
-
profile
|
811
|
-
id
|
812
|
-
email
|
880
|
+
profile: Updates to a user profile.
|
881
|
+
id: The identity of a user or a service.
|
882
|
+
email: An email address.
|
883
|
+
username: A username.
|
813
884
|
|
814
885
|
Returns:
|
815
886
|
A PangeaResponse with a user and its information in the response.result field.
|
@@ -828,9 +899,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
828
899
|
id=id,
|
829
900
|
email=email,
|
830
901
|
profile=profile,
|
902
|
+
username=username,
|
831
903
|
)
|
832
904
|
return await self.request.post(
|
833
|
-
"v2/user/profile/update", m.UserProfileUpdateResult, data=input.
|
905
|
+
"v2/user/profile/update", m.UserProfileUpdateResult, data=input.model_dump(exclude_none=True)
|
834
906
|
)
|
835
907
|
|
836
908
|
class FlowAsync(ServiceBaseAsync):
|
@@ -838,10 +910,10 @@ class AuthNAsync(ServiceBaseAsync):
|
|
838
910
|
|
839
911
|
def __init__(
|
840
912
|
self,
|
841
|
-
token,
|
842
|
-
config=None,
|
843
|
-
logger_name="pangea",
|
844
|
-
):
|
913
|
+
token: str,
|
914
|
+
config: PangeaConfig | None = None,
|
915
|
+
logger_name: str = "pangea",
|
916
|
+
) -> None:
|
845
917
|
super().__init__(token, config, logger_name=logger_name)
|
846
918
|
|
847
919
|
async def complete(self, flow_id: str) -> PangeaResponse[m.FlowCompleteResult]:
|
@@ -866,7 +938,9 @@ class AuthNAsync(ServiceBaseAsync):
|
|
866
938
|
)
|
867
939
|
"""
|
868
940
|
input = m.FlowCompleteRequest(flow_id=flow_id)
|
869
|
-
return await self.request.post(
|
941
|
+
return await self.request.post(
|
942
|
+
"v2/flow/complete", m.FlowCompleteResult, data=input.model_dump(exclude_none=True)
|
943
|
+
)
|
870
944
|
|
871
945
|
async def restart(
|
872
946
|
self, flow_id: str, choice: m.FlowChoice, data: m.FlowRestartData = {}
|
@@ -898,7 +972,9 @@ class AuthNAsync(ServiceBaseAsync):
|
|
898
972
|
"""
|
899
973
|
|
900
974
|
input = m.FlowRestartRequest(flow_id=flow_id, choice=choice, data=data)
|
901
|
-
return await self.request.post(
|
975
|
+
return await self.request.post(
|
976
|
+
"v2/flow/restart", m.FlowRestartResult, data=input.model_dump(exclude_none=True)
|
977
|
+
)
|
902
978
|
|
903
979
|
async def start(
|
904
980
|
self,
|
@@ -937,7 +1013,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
937
1013
|
)
|
938
1014
|
"""
|
939
1015
|
input = m.FlowStartRequest(cb_uri=cb_uri, email=email, flow_types=flow_types, invitation=invitation)
|
940
|
-
return await self.request.post("v2/flow/start", m.FlowStartResult, data=input.
|
1016
|
+
return await self.request.post("v2/flow/start", m.FlowStartResult, data=input.model_dump(exclude_none=True))
|
941
1017
|
|
942
1018
|
async def update(
|
943
1019
|
self, flow_id: str, choice: m.FlowChoice, data: m.FlowUpdateData = {}
|
@@ -971,17 +1047,19 @@ class AuthNAsync(ServiceBaseAsync):
|
|
971
1047
|
"""
|
972
1048
|
|
973
1049
|
input = m.FlowUpdateRequest(flow_id=flow_id, choice=choice, data=data)
|
974
|
-
return await self.request.post(
|
1050
|
+
return await self.request.post(
|
1051
|
+
"v2/flow/update", m.FlowUpdateResult, data=input.model_dump(exclude_none=True)
|
1052
|
+
)
|
975
1053
|
|
976
1054
|
class AgreementsAsync(ServiceBaseAsync):
|
977
1055
|
service_name = SERVICE_NAME
|
978
1056
|
|
979
1057
|
def __init__(
|
980
1058
|
self,
|
981
|
-
token,
|
982
|
-
config=None,
|
983
|
-
logger_name="pangea",
|
984
|
-
):
|
1059
|
+
token: str,
|
1060
|
+
config: PangeaConfig | None = None,
|
1061
|
+
logger_name: str = "pangea",
|
1062
|
+
) -> None:
|
985
1063
|
super().__init__(token, config, logger_name=logger_name)
|
986
1064
|
|
987
1065
|
async def create(
|
@@ -1015,7 +1093,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
1015
1093
|
|
1016
1094
|
input = m.AgreementCreateRequest(type=type, name=name, text=text, active=active)
|
1017
1095
|
return await self.request.post(
|
1018
|
-
"v2/agreements/create", m.AgreementCreateResult, data=input.
|
1096
|
+
"v2/agreements/create", m.AgreementCreateResult, data=input.model_dump(exclude_none=True)
|
1019
1097
|
)
|
1020
1098
|
|
1021
1099
|
async def delete(self, type: m.AgreementType, id: str) -> PangeaResponse[m.AgreementDeleteResult]:
|
@@ -1042,7 +1120,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
1042
1120
|
|
1043
1121
|
input = m.AgreementDeleteRequest(type=type, id=id)
|
1044
1122
|
return await self.request.post(
|
1045
|
-
"v2/agreements/delete", m.AgreementDeleteResult, data=input.
|
1123
|
+
"v2/agreements/delete", m.AgreementDeleteResult, data=input.model_dump(exclude_none=True)
|
1046
1124
|
)
|
1047
1125
|
|
1048
1126
|
async def list(
|
@@ -1080,7 +1158,7 @@ class AuthNAsync(ServiceBaseAsync):
|
|
1080
1158
|
|
1081
1159
|
input = m.AgreementListRequest(filter=filter, last=last, order=order, order_by=order_by, size=size)
|
1082
1160
|
return await self.request.post(
|
1083
|
-
"v2/agreements/list", m.AgreementListResult, data=input.
|
1161
|
+
"v2/agreements/list", m.AgreementListResult, data=input.model_dump(exclude_none=True)
|
1084
1162
|
)
|
1085
1163
|
|
1086
1164
|
async def update(
|
@@ -1121,5 +1199,5 @@ class AuthNAsync(ServiceBaseAsync):
|
|
1121
1199
|
|
1122
1200
|
input = m.AgreementUpdateRequest(type=type, id=id, name=name, text=text, active=active)
|
1123
1201
|
return await self.request.post(
|
1124
|
-
"v2/agreements/update", m.AgreementUpdateResult, data=input.
|
1202
|
+
"v2/agreements/update", m.AgreementUpdateResult, data=input.model_dump(exclude_none=True)
|
1125
1203
|
)
|