models.IdentityProviderMetadata

src/idserver/models/IdentityProviderMetadata.py
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
from .SqlAlchemyBase import Base
from sqlalchemy import Column, String, Integer, DateTime, ForeignKey
from sqlalchemy.orm import relationship
from typing import Dict


class IdentityProviderMetadata:
    def __init__(self, icon_url: str, 
                        provider_labels: Dict[str, str], 
                        default_label_culture: str='en') -> None:
        self.icon_url = icon_url
        self.provider_labels = provider_labels
        self.default_label_culture = default_label_culture

class DbProviderLabel(Base):
    __tablename__ = 'provider_labels'

    provider_label_id = Column(Integer, primary_key=True, autoincrement=True)
    provider_metadata_id = Column(Integer, ForeignKey('provider_metadata.provider_metadata_id'))
    label_culture = Column(String(5))
    label_value = Column(String(128))

class DbIdentityProviderMetadata(Base):
    __tablename__ = 'provider_metadata'

    provider_metadata_id = Column(Integer, primary_key=True, autoincrement=True)
    provider_id = Column(Integer, ForeignKey("identity_provider.provider_id"), unique=True)
    icon_url = Column(String(1024))
    default_label_culture = Column(String(5))
    provider_labels = relationship("DbProviderLabel")

 
    def toIdentityProviderMetadata(self) -> IdentityProviderMetadata:
        provider_labels: Dict[str, str] = {}
        for provider_label in self.provider_labels:
            provider_labels[provider_label.label_culture] = provider_label.label_value
        
        return IdentityProviderMetadata(icon_url=self.icon_url, 
                                        provider_labels=provider_labels, 
                                        default_label_culture=self.default_label_culture)