aboutsummaryrefslogtreecommitdiff
path: root/tools/cru-py/cru/service/_config.py
blob: b5f3e7c8a7084b9a6dc07f9a9561c3a5799cae4a (plain)
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from cru.config import Configuration, ConfigItem
from cru.value import (
    INTEGER_VALUE_TYPE,
    TEXT_VALUE_TYPE,
    RandomStringValueGenerator,
    UuidValueGenerator,
)

from ._base import AppFeaturePath, AppFeatureProvider, OWNER_NAME


class ConfigManager(AppFeatureProvider):
    def __init__(self) -> None:
        super().__init__("config-manager")
        configuration = Configuration()
        self._configuration = configuration
        self._add_text_item("DOMAIN", "domain name")
        self._add_text_item("EMAIL", "admin email address")
        self._add_text_item(
            "AUTO_BACKUP_COS_SECRET_ID",
            "access key id for Tencent COS, used for auto backup",
        )
        self._add_text_item(
            "AUTO_BACKUP_COS_SECRET_KEY",
            "access key secret for Tencent COS, used for auto backup",
        )
        self._add_text_item(
            "AUTO_BACKUP_COS_REGION", "region for Tencent COS, used for auto backup"
        )
        self._add_text_item(
            "AUTO_BACKUP_BUCKET_NAME",
            "bucket name for Tencent COS, used for auto backup",
        )
        self._add_text_item("GITHUB_USERNAME", "github username for fetching todos")
        self._add_int_item(
            "GITHUB_PROJECT_NUMBER", "github project number for fetching todos"
        )
        self._add_text_item("GITHUB_TOKEN", "github token for fetching todos")
        self._add_text_item("GITHUB_TODO_COUNT", "github todo count")
        self._add_uuid_item("V2RAY_TOKEN", "v2ray user id")
        self._add_uuid_item("V2RAY_PATH", "v2ray path, which will be prefixed by _")
        self._add_text_item("FORGEJO_MAILER_USER", "Forgejo SMTP user")
        self._add_text_item("FORGEJO_MAILER_PASSWD", "Forgejo SMTP password")
        self._add_random_string_item("2FAUTH_APP_KEY", "2FAuth App Key")
        self._add_text_item("2FAUTH_MAIL_USERNAME", "2FAuth SMTP user")
        self._add_text_item("2FAUTH_MAIL_PASSWORD", "2FAuth SMTP password")

    def _add_text_item(self, name: str, description: str) -> None:
        self.configuration.add(
            ConfigItem(f"{OWNER_NAME}_{name}", description, TEXT_VALUE_TYPE)
        )

    def _add_uuid_item(self, name: str, description: str) -> None:
        self.configuration.add(
            ConfigItem(
                f"{OWNER_NAME}_{name}",
                description,
                TEXT_VALUE_TYPE,
                default=UuidValueGenerator(),
            )
        )

    def _add_random_string_item(
        self, name: str, description: str, length: int = 32, secure: bool = True
    ) -> None:
        self.configuration.add(
            ConfigItem(
                f"{OWNER_NAME}_{name}",
                description,
                TEXT_VALUE_TYPE,
                default=RandomStringValueGenerator(length, secure),
            )
        )

    def _add_int_item(self, name: str, description: str) -> None:
        self.configuration.add(
            ConfigItem(f"{OWNER_NAME}_{name}", description, INTEGER_VALUE_TYPE)
        )

    def setup(self) -> None:
        self._config_path = self.app.data_dir.add_subpath(
            "config", False, description="Configuration file path."
        )

    @property
    def config_path(self) -> AppFeaturePath:
        return self._config_path

    @property
    def configuration(self) -> Configuration:
        return self._configuration

    @property
    def config_map(self) -> dict[str, str]:
        raise NotImplementedError()