-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathconfig.go
More file actions
82 lines (75 loc) · 4.21 KB
/
config.go
File metadata and controls
82 lines (75 loc) · 4.21 KB
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
package config
import (
"net/url"
"sync/atomic"
"github.com/caarlos0/env/v9"
"github.com/rs/zerolog/log"
)
var Config struct {
Mode string `env:"MODE" envDefault:"dev"`
TZ string `env:"TZ" envDefault:"Asia/Shanghai"`
Size int `env:"SIZE" envDefault:"30"`
MaxSize int `env:"MAX_SIZE" envDefault:"50"`
TagSize int `env:"TAG_SIZE" envDefault:"5"`
HoleFloorSize int `env:"HOLE_FLOOR_SIZE" envDefault:"10"`
Debug bool `env:"DEBUG" envDefault:"false"`
// example: user:pass@tcp(127.0.0.1:3306)/dbname?parseTime=true&loc=Asia%2fShanghai
// set time_zone in url, otherwise UTC
// for more detail, see https://github.com/go-sql-driver/mysql#dsn-data-source-name
DbURL string `env:"DB_URL"`
// example: MYSQL_REPLICA_URL="db1_dsn,db2_dsn", use ',' as separator
// should also set time_zone in url
MysqlReplicaURLs []string `env:"MYSQL_REPLICA_URL"`
RedisURL string `env:"REDIS_URL"` // redis:6379
NotificationUrl string `env:"NOTIFICATION_URL"`
MessagePurgeDays int `envDefault:"7" env:"MESSAGE_PURGE_DAYS"`
AuthUrl string `env:"AUTH_URL"`
ElasticsearchUrl string `env:"ELASTICSEARCH_URL"`
OpenSearch bool `env:"OPEN_SEARCH" envDefault:"true"`
OpenFuzzName bool `env:"OPEN_FUZZ_NAME" envDefault:"false"`
UserAllShowHidden bool `env:"USER_ALL_HIDDEN" envDefault:"false"`
AdminOnly bool `env:"ADMIN_ONLY" envDefault:"false"`
HolePurgeDivisions []int `env:"HOLE_PURGE_DIVISIONS" envDefault:"2"`
HolePurgeDays int `env:"HOLE_PURGE_DAYS" envDefault:"30"`
OpenSensitiveCheck bool `env:"OPEN_SENSITIVE_CHECK" envDefault:"true"`
YiDunBusinessIdText string `env:"YI_DUN_BUSINESS_ID_TEXT" envDefault:""`
YiDunBusinessIdImage string `env:"YI_DUN_BUSINESS_ID_IMAGE" envDefault:""`
YiDunSecretId string `env:"YI_DUN_SECRET_ID" envDefault:""`
YiDunSecretKey string `env:"YI_DUN_SECRET_KEY" envDefault:""`
YiDunAccessKeyId string `env:"YI_DUN_ACCESS_KEY_ID" envDefault:""`
YiDunAccessKeySecret string `env:"YI_DUN_ACCESS_KEY_SECRET" envDefault:""`
ValidImageUrl []string `env:"VALID_IMAGE_URL"`
UrlHostnameBlacklist []string `env:"URL_HOSTNAME_BLACKLIST"`
ExternalImageHost string `env:"EXTERNAL_IMAGE_HOSTNAME" envDefault:""`
NotifiableAdminIds []int `env:"NOTIFIABLE_ADMIN_IDS"`
ExcludeBanForeverDivisionIds []int `env:"EXCLUDE_BAN_FOREVER_DIVISION_IDS"`
ProxyUrl *url.URL `env:"PROXY_URL"`
QQBotPhysicsGroupID *int64 `env:"PHYSICS_GROUP_ID"`
QQBotCodingGroupID *int64 `env:"CODING_GROUP_ID"`
QQBotUserID *int64 `env:"USER_ID"`
QQBotUrl *string `env:"QQ_BOT_URL"`
FeishuAdminNotifierUrl *string `env:"FEISHU_ADMIN_NOTIFIER_URL"`
FeishuDivisionNotifierUrl *string `env:"FEISHU_DIVISION_NOTIFIER_URL"`
AdminOnlyTagIds []int `env:"ADMIN_ONLY_TAG_IDS"`
AISummaryURL string `env:"AI_SUMMARY_URL" envDefault:"http://localhost:8080/internal"`
SummaryFloorLimit int `env:"SUMMARY_FLOOR_LIMIT" envDefault:"15"`
SummaryContentLimit int64 `env:"SUMMARY_CONTENT_LIMIT" envDefault:"500"`
SummarySteps int `env:"SUMMARY_STEPS" envDefault:"5"`
SummaryReplyBoundary1 int `env:"SUMMARY_REPLY_BOUNDARY_1" envDefault:"50"`
SummaryReplyBoundary2 int `env:"SUMMARY_REPLY_BOUNDARY_1" envDefault:"200"`
SummaryReplyBoundary3 int `env:"SUMMARY_REPLY_BOUNDARY_1" envDefault:"1000"`
SummaryLogLimit int `env:"SUMMARY_LOG_LIMIT" envDefault:"1000"`
WhiteListUserIds []int `env:"WHITE_LIST_USER_IDS"`
WhiteListRate float32 `env:"WHITE_LIST_RATE" envDefault:"1"`
MaxSummaryFloors int `env:"MAX_FLOORS_PER_HOLE" envDefault:"50"`
}
var DynamicConfig struct {
OpenSearch atomic.Bool
}
func InitConfig() { // load config from environment variables
if err := env.Parse(&Config); err != nil {
log.Fatal().Err(err).Send()
}
log.Info().Any("config", Config).Msg("init config")
DynamicConfig.OpenSearch.Store(Config.OpenSearch)
}