-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.go
More file actions
125 lines (107 loc) · 3.81 KB
/
config.go
File metadata and controls
125 lines (107 loc) · 3.81 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package main
import (
"log/slog"
"os"
"strconv"
"strings"
"github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/tools/osutils"
)
// Helper Functions
func setStringIfPresent(key string, dst *string) {
if v, ok := os.LookupEnv(key); ok {
*dst = v
} else {
slog.Warn("missing_env", "env", key)
}
}
func setBoolIfPresent(key string, dst *bool) {
if v, ok := os.LookupEnv(key); ok {
if b, err := strconv.ParseBool(v); err == nil {
*dst = b
} else {
slog.Warn("invalid_bool", "env", key, "value", v)
}
} else {
slog.Warn("missing_env", "env", key)
}
}
func setIntIfPresent(key string, dst *int) {
if v, ok := os.LookupEnv(key); ok {
if i, err := strconv.Atoi(v); err == nil {
*dst = i
} else {
slog.Warn("invalid_int", "env", key, "value", v)
}
} else {
slog.Warn("missing_env", "env", key)
}
}
// Setup
func Setup(app core.App) {
settings := app.Settings()
// APP
setStringIfPresent("APP_NAME", &settings.Meta.AppName)
setStringIfPresent("APP_URL", &settings.Meta.AppURL)
// Rate Limits
setBoolIfPresent("ENABLE_RATE_LIMITS", &settings.RateLimits.Enabled)
settings.RateLimits.Rules = []core.RateLimitRule{
{Label: "*:auth", Duration: 3, MaxRequests: 2},
{Label: "*:create", Duration: 5, MaxRequests: 20},
{Label: "/api/batch", Duration: 1, MaxRequests: 3},
{Label: "/api/", Duration: 10, MaxRequests: 300},
}
// --- Proxy ---
if v, ok := os.LookupEnv("TRUSTED_PROXY_HEADERS"); ok {
headers := []string{}
for _, h := range strings.Split(v, ",") {
if trimmed := strings.TrimSpace(h); trimmed != "" {
headers = append(headers, trimmed)
}
}
settings.TrustedProxy.Headers = headers
}
setBoolIfPresent("USE_LEFT_MOST_IP", &settings.TrustedProxy.UseLeftmostIP)
// Batch API
setBoolIfPresent("ENABLE_BATCH_API", &settings.Batch.Enabled)
setIntIfPresent("BATCH_MAX_REQUESTS", &settings.Batch.MaxRequests)
settings.Meta.HideControls = !osutils.IsProbablyGoRun()
// SMTP
setStringIfPresent("SENDER_NAME", &settings.Meta.SenderName)
setStringIfPresent("SENDER_ADDRESS", &settings.Meta.SenderAddress)
setBoolIfPresent("ENABLE_SMTP", &settings.SMTP.Enabled)
setStringIfPresent("SMTP_AUTH_METHOD", &settings.SMTP.AuthMethod)
setStringIfPresent("SMTP_HOST", &settings.SMTP.Host)
setIntIfPresent("SMTP_PORT", &settings.SMTP.Port)
setBoolIfPresent("ENABLE_SMTP_TLS", &settings.SMTP.TLS)
setStringIfPresent("SMTP_USERNAME", &settings.SMTP.Username)
setStringIfPresent("SMTP_PASSWORD", &settings.SMTP.Password)
setStringIfPresent("SMTP_LOCALNAME", &settings.SMTP.LocalName)
// S3
setBoolIfPresent("ENABLE_S3", &settings.S3.Enabled)
setStringIfPresent("S3_REGION", &settings.S3.Region)
setStringIfPresent("S3_BUCKET", &settings.S3.Bucket)
setStringIfPresent("S3_ENDPOINT", &settings.S3.Endpoint)
setStringIfPresent("S3_ACCESS_KEY", &settings.S3.AccessKey)
setStringIfPresent("S3_SECRET_KEY", &settings.S3.Secret)
setBoolIfPresent("S3_FORCE_PATH_STYLE", &settings.S3.ForcePathStyle)
// Backup
setStringIfPresent("BACKUP_CRON", &settings.Backups.Cron)
setIntIfPresent("BACKUP_CRON_MAX_KEEP", &settings.Backups.CronMaxKeep)
setBoolIfPresent("BACKUP_ENABLE_S3", &settings.Backups.S3.Enabled)
setStringIfPresent("BACKUP_S3_REGION", &settings.Backups.S3.Region)
setStringIfPresent("BACKUP_S3_BUCKET", &settings.Backups.S3.Bucket)
setStringIfPresent("BACKUP_S3_ENDPOINT", &settings.Backups.S3.Endpoint)
setStringIfPresent("BACKUP_S3_ACCESS_KEY", &settings.Backups.S3.AccessKey)
setStringIfPresent("BACKUP_S3_SECRET_KEY", &settings.Backups.S3.Secret)
setBoolIfPresent("BACKUP_S3_FORCE_PATH_STYLE", &settings.Backups.S3.ForcePathStyle)
// Logs
settings.Logs.MaxDays = 7
settings.Logs.MinLevel = 0
settings.Logs.LogIP = true
settings.Logs.LogAuthId = true
// Save
if err := app.Save(settings); err != nil {
app.Logger().Error("Save Global Config Failed:", "err", err)
}
}