Skip to content
This repository was archived by the owner on Apr 30, 2025. It is now read-only.

Commit d9bb479

Browse files
committed
Improved default configuration handling
1 parent 24652c9 commit d9bb479

File tree

1 file changed

+53
-45
lines changed

1 file changed

+53
-45
lines changed

internal/mdathome/config.go

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,75 @@
11
package mdathome
22

33
import (
4-
"os"
5-
64
"github.com/spf13/viper"
75
)
86

9-
var defaultConfiguration string = `version = 2
7+
func setDefaultConfiguration() {
8+
// [version]
9+
viper.SetDefault("version", 2)
1010

11-
[client]
12-
control_server = "https://api.mangadex.network"
13-
graceful_shutdown_seconds = 300
14-
max_speed_kbps = 10000
15-
port = 443
16-
secret = ""
11+
// [client]
12+
viper.SetDefault("client.control_server", "https://api.mangadex.network")
13+
viper.SetDefault("client.graceful_shutdown_seconds", 300)
14+
viper.SetDefault("client.max_speed_kbps", 10000)
15+
viper.SetDefault("client.port", 443)
16+
viper.SetDefault("client.secret", "")
1717

18-
[override]
19-
address = ""
20-
port = 0
21-
size = 0
22-
upstream = ""
18+
// [override]
19+
viper.SetDefault("override.address", "")
20+
viper.SetDefault("override.port", 0)
21+
viper.SetDefault("override.size", 0)
22+
viper.SetDefault("override.upstream", "")
2323

24-
[cache]
25-
directory = "cache/"
26-
max_scan_interval_seconds = 300
27-
max_scan_time_seconds = 60
28-
max_size_mebibytes = 10240
29-
refresh_age_seconds = 86400
24+
// [cache]
25+
viper.SetDefault("cache.directory", "cache/")
26+
viper.SetDefault("cache.max_scan_interval_seconds", 300)
27+
viper.SetDefault("cache.max_scan_time_seconds", 60)
28+
viper.SetDefault("cache.max_size_mebibytes", 10240)
29+
viper.SetDefault("cache.refresh_age_seconds", 86400)
3030

31-
[performance]
32-
allow_http2 = true
33-
client_timeout_seconds = 60
34-
low_memory_mode = true
35-
upstream_connection_reuse = true
31+
// [performance]
32+
viper.SetDefault("performance.allow_http2", true)
33+
viper.SetDefault("performance.client_timeout_seconds", 60)
34+
viper.SetDefault("performance.low_memory_mode", true)
35+
viper.SetDefault("performance.upstream_connection_reuse", true)
3636

37-
[security]
38-
allow_visitor_cache_refresh = false
39-
reject_invalid_hostname = false
40-
reject_invalid_sni = false
41-
reject_invalid_tokens = true
42-
send_server_header = false
43-
use_forwarded_for_headers = false
44-
verify_image_integrity = false
37+
// [security]
38+
viper.SetDefault("security.allow_visitor_cache_refresh", false)
39+
viper.SetDefault("security.reject_invalid_hostname", false)
40+
viper.SetDefault("security.reject_invalid_sni", false)
41+
viper.SetDefault("security.reject_invalid_tokens", true)
42+
viper.SetDefault("security.send_server_header", false)
43+
viper.SetDefault("security.use_forwarded_for_headers", false)
44+
viper.SetDefault("security.verify_image_integrity", false)
4545

46-
[metrics]
47-
enable_prometheus = false
48-
maxmind_license_key = ""
46+
// [metric]
47+
viper.SetDefault("metric.enable_prometheus", false)
48+
viper.SetDefault("metric.maxmind_license_key", "")
4949

50-
[log]
51-
directory = "log/"
52-
level = "info"
53-
max_age_days = 7
54-
max_backups = 3
55-
max_size_mebibytes = 64
56-
`
50+
// [log]
51+
viper.SetDefault("log.directory", "log/")
52+
viper.SetDefault("log.level", "info")
53+
viper.SetDefault("log.max_age_days", 7)
54+
viper.SetDefault("log.max_backups", 3)
55+
viper.SetDefault("log.max_size_mebibytes", 64)
56+
}
5757

5858
func prepareConfiguration() {
5959
// Configure Viper
6060
viper.AddConfigPath(".")
6161
viper.SetConfigName("config.toml")
6262
viper.SetConfigType("toml")
6363

64+
// Set default configuration
65+
setDefaultConfiguration()
66+
6467
// Load in configuration
6568
if err := viper.ReadInConfig(); err != nil {
6669
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
67-
// Config file not found; ignore error if desired
70+
// Write default configuration file if not exists
6871
log.Info("Configuration not found, creating!")
69-
if err := os.WriteFile("config.toml", []byte(defaultConfiguration), 0600); err != nil {
72+
if err := viper.SafeWriteConfig(); err != nil {
7073
log.Fatalf("Failed to write default configuration to 'config.toml'!")
7174
} else {
7275
log.Fatalf("Default configuration written to 'config.toml', please modify before running client again!")
@@ -77,6 +80,11 @@ func prepareConfiguration() {
7780
}
7881
}
7982

83+
// Update default configuration file
84+
if err := viper.WriteConfig(); err != nil {
85+
log.Errorf("Failed to update configuration file: '%v'. Please check permissions!", err)
86+
}
87+
8088
// Configure auto-reload
8189
prepareConfigurationReload()
8290
}

0 commit comments

Comments
 (0)