1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
from typing import Optional, Any, List, Dict
from .SqlAlchemyBase import Base
from sqlalchemy import Column, ForeignKey, Integer, String
from sqlalchemy.orm import relationship
from .DbProviderScope import DbProviderScope
from .DbProviderExtraAuthorizationParameter import DbProviderExtraAuthorizationParameter
from .UserClaimProviderMapping import UserClaimProviderMapping, DbUserClaimProviderMapping
from .IdentityProviderMetadata import IdentityProviderMetadata, DbIdentityProviderMetadata
class IdentityProvider:
def __init__(self, provider_name: str = "",
issuer: str = "",
client_id: str = "",
client_secret: str = "",
scopes: List[str]=[],
redirect_uri: str="redirect_uri",
extra_authorization_parameters: Dict[str, str]={},
user_claim_mappings: List[UserClaimProviderMapping]=[],
provider_metadata: IdentityProviderMetadata=None) -> None:
self.provider_name = provider_name
self.issuer = issuer
self.client_id = client_id
self.client_secret = client_secret
self.scopes = scopes
self.redirect_uri = redirect_uri
self.extra_authorization_parameters = extra_authorization_parameters
self.user_claim_mappings = user_claim_mappings
self.provider_metadata = provider_metadata
class DbIdentityProvider(Base):
__tablename__ = "identity_provider"
provider_id: int = Column(Integer, primary_key=True, autoincrement=True)
provider_name: str = Column(String, nullable=False, unique=True)
issuer: str = Column(String(500), nullable=False)
client_id: str = Column(String(250), nullable=False)
client_secret: str = Column(String(2048), nullable=False)
redirect_uri: str = Column(String(128), nullable=False)
scopes: List[DbProviderScope] = relationship("DbProviderScope")
extra_authorization_parameters: List[DbProviderExtraAuthorizationParameter] = relationship("DbProviderExtraAuthorizationParameter")
user_claim_mappings: List[DbUserClaimProviderMapping] = relationship("DbUserClaimProviderMapping")
provider_metadata: DbIdentityProviderMetadata = relationship("DbIdentityProviderMetadata")
"""def __init__(self, id:str, issuer: str, client_id: str, client_secret: Optional[str]=None,
scope: List[str]=["openid"], extra_settings: Dict[str, Any]={}) -> None:
self.id = id
self.issuer = issuer
self.client_id = client_id
self.client_secret = client_secret
self.scope = scope
self.extra_settings = extra_settings"""
def toIdentityProvider(self) -> IdentityProvider:
scopes: List[str] = []
for scope in self.scopes:
scopes.append(scope.scope)
extra_auth_parameters: Dict[str, str] = {}
for extra_auth_parameter in self.extra_authorization_parameters:
extra_auth_parameters[extra_auth_parameter.parameter_name] = extra_auth_parameter.parameter_value
claim_mapping: List[UserClaimProviderMapping] = []
for user_claim_mapping in self.user_claim_mappings:
claim_mapping.append(user_claim_mapping.toUserClaimProviderMapping())
return IdentityProvider(provider_name=self.provider_name,
issuer=self.issuer,
client_id=self.client_id,
client_secret=self.client_secret,
scopes=scopes,
redirect_uri=self.redirect_uri,
extra_authorization_parameters=extra_auth_parameters,
user_claim_mappings=claim_mapping,
provider_metadata=self.provider_metadata[0].toIdentityProviderMetadata())
|