models.IdServerConfiguration

src/idserver/models/IdServerConfiguration.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
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
from .IdentityProvider import IdentityProvider
import json
from typing import Dict, Any, List

class IdServerDatabaseSetting:
    def __init__(self, driver: str="sqlalchemy", connection_str: str="sqlite:///default.db") -> None:
        self.connection_str = connection_str
        self.driver = driver

class SessionSettings:
    def __init__(self, driver: str="in_memory") -> None:
        self.driver = driver


class CertificateEntry:
    def __init__(self, private_key: str="", certificate: str="", default=False) -> None:
        self.private_key = private_key
        self.certificate = certificate
        self.default = default

class CertificatesSetting:
    def __init__(self, certificates: List[CertificateEntry]=[]) -> None:
        self.certificates = certificates
    
    def parse_dict(self, config_section: List[Dict[str, str]]) -> None:
        for cert_entry in config_section:
            if "private_key" in cert_entry and "certificate" in cert_entry:
                certificate = CertificateEntry(cert_entry["private_key"], cert_entry["certificate"])

                if "default" in cert_entry:
                    certificate.default = bool(cert_entry["default"])

                self.certificates.append(certificate)


class IdServerConfiguration:
    def __init__(self, config_dict: Dict[str, Any]={}) -> None:
        # self.identity_providers: List[IdentityProvider] = []
        self.database: IdServerDatabaseSetting = IdServerDatabaseSetting()
        self.address = "http://localhost:5000/"
        self.providers_form_route = "/user/choose_provider"
        self.session = SessionSettings()
        self.use_builtin_identity_provider = True
        self.certificates = CertificatesSetting()
        self.__parse_dict(config_dict)
        
    def __parse_dict(self, config_dict: Dict[str, Any]) -> None:
        #if "identity_providers" in config_dict:
        #    for provider in config_dict["identity_providers"]:
        #        self.identity_providers.append(IdentityProvider(**provider))
        if "address" in config_dict:
            self.address = config_dict["address"]

        if "database" in config_dict:
            self.database = IdServerDatabaseSetting(**config_dict["database"])
        if "session" in config_dict:
            self.session = SessionSettings(**config_dict["session"])

        if "providers_form_route" in config_dict:
            self.providers_form_route = config_dict["providers_form_route"]
        
        if "use_builtin_identity_provider" in config_dict:
            self.use_builtin_identity_provider = bool(config_dict["use_builtin_identity_provider"])

        if "certificates" in config_dict:
            self.certificates.parse_dict(config_dict["certificates"])

class IdServerConfigurationHelper:
    @staticmethod
    def load_from_file(filepath: str) -> IdServerConfiguration:
        fp = open(filepath, 'r')
        config_dict = json.load(fp)
        config = IdServerConfiguration(config_dict)
        fp.close()
        return config