11package mdathome
22
33import (
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
5858func 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