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()
|