@@ -4,67 +4,58 @@ import (
4
4
"fmt"
5
5
"os"
6
6
"regexp"
7
+ "strconv"
7
8
"strings"
8
9
9
10
"github.com/bakito/adguardhome-sync/pkg/log"
10
11
"github.com/bakito/adguardhome-sync/pkg/types"
12
+ "github.com/bakito/adguardhome-sync/pkg/utils"
11
13
"github.com/bakito/adguardhome-sync/version"
12
14
"github.com/mitchellh/go-homedir"
13
15
"github.com/spf13/cobra"
14
16
"github.com/spf13/viper"
15
17
)
16
18
17
19
const (
18
- configCron = "cron "
19
- configRunOnStart = "runOnStart "
20
+ configCron = "CRON "
21
+ configRunOnStart = "RUN_ON_START "
20
22
configPrintConfigOnly = "PRINT_CONFIG_ONLY"
21
23
configContinueOnError = "CONTINUE_ON_ERROR"
22
- configLogLevel = "LOG_LEVEL"
23
-
24
- configAPIPort = "api.port"
25
- configAPIUsername = "api.username"
26
- configAPIPassword = "api.password"
27
- configAPIDarkMode = "api.darkMode"
28
-
29
- configFeatureDHCPServerConfig = "features.dhcp.serverConfig"
30
- configFeatureDHCPStaticLeases = "features.dhcp.staticLeases"
31
- configFeatureDNServerConfig = "features.dns.serverConfig"
32
- configFeatureDNSPAccessLists = "features.dns.accessLists"
33
- configFeatureDNSRewrites = "features.dns.rewrites"
34
- configFeatureGeneralSettings = "features.generalSettings"
35
- configFeatureQueryLogConfig = "features.queryLogConfig"
36
- configFeatureStatsConfig = "features.statsConfig"
37
- configFeatureClientSettings = "features.clientSettings"
38
- configFeatureServices = "features.services"
39
- configFeatureFilters = "features.filters"
40
-
41
- configOriginURL = "origin.url"
42
- configOriginWebURL = "origin.webURL"
43
- configOriginAPIPath = "origin.apiPath"
44
- configOriginUsername = "origin.username"
45
- configOriginPassword = "origin.password"
46
- configOriginCookie = "origin.cookie"
47
- configOriginInsecureSkipVerify = "origin.insecureSkipVerify"
48
-
49
- configReplicaURL = "replica.url"
50
- configReplicaWebURL = "replica.webURL"
51
- configReplicaAPIPath = "replica.apiPath"
52
- configReplicaUsername = "replica.username"
53
- configReplicaPassword = "replica.password"
54
- configReplicaCookie = "replica.cookie"
55
- configReplicaInsecureSkipVerify = "replica.insecureSkipVerify"
56
- configReplicaAutoSetup = "replica.autoSetup"
57
- configReplicaInterfaceName = "replica.interfaceName"
58
-
59
- envReplicasUsernameFormat = "REPLICA%s_USERNAME" // #nosec G101
60
- envReplicasPasswordFormat = "REPLICA%s_PASSWORD" // #nosec G101
61
- envReplicasCookieFormat = "REPLICA%s_COOKIE" // #nosec G101
62
- envReplicasAPIPathFormat = "REPLICA%s_APIPATH"
63
- envReplicasInsecureSkipVerifyFormat = "REPLICA%s_INSECURESKIPVERIFY"
64
- envReplicasAutoSetup = "REPLICA%s_AUTOSETUP"
65
- envReplicasInterfaceName = "REPLICA%s_INTERFACENAME"
66
- envDHCPServerEnabled = "REPLICA%s_DHCPSERVERENABLED"
67
- envWebURL = "REPLICA%s_WEBURL"
24
+
25
+ configAPIPort = "API.PORT"
26
+ configAPIUsername = "API.USERNAME"
27
+ configAPIPassword = "API.PASSWORD"
28
+ configAPIDarkMode = "API.DARK_MODE"
29
+
30
+ configFeatureDHCPServerConfig = "FEATURES.DHCP.SERVER_CONFIG"
31
+ configFeatureDHCPStaticLeases = "FEATURES.DHCP.STATIC_LEASES"
32
+ configFeatureDNServerConfig = "FEATURES.DNS.SERVER_CONFIG"
33
+ configFeatureDNSPAccessLists = "FEATURES.DNS.ACCESS_LISTS"
34
+ configFeatureDNSRewrites = "FEATURES.DNS.rewrites"
35
+ configFeatureGeneralSettings = "FEATURES.GENERAL_SETTINGS"
36
+ configFeatureQueryLogConfig = "FEATURES.QUERY_LOG_CONFIG"
37
+ configFeatureStatsConfig = "FEATURES.STATS_CONFIG"
38
+ configFeatureClientSettings = "FEATURES.CLIENT_SETTINGS"
39
+ configFeatureServices = "FEATURES.SERVICES"
40
+ configFeatureFilters = "FEATURES.FILTERS"
41
+
42
+ configOriginURL = "ORIGIN.URL"
43
+ configOriginWebURL = "ORIGIN.WEB_URL"
44
+ configOriginAPIPath = "ORIGIN.API_PATH"
45
+ configOriginUsername = "ORIGIN.USERNAME"
46
+ configOriginPassword = "ORIGIN.PASSWORD"
47
+ configOriginCookie = "ORIGIN.COOKIE"
48
+ configOriginInsecureSkipVerify = "ORIGIN.INSECURE_SKIP_VERIFY"
49
+
50
+ configReplicaURL = "REPLICA.URL"
51
+ configReplicaWebURL = "REPLICA.WEB_URL"
52
+ configReplicaAPIPath = "REPLICA.API_PATH"
53
+ configReplicaUsername = "REPLICA.USERNAME"
54
+ configReplicaPassword = "REPLICA.PASSWORD"
55
+ configReplicaCookie = "REPLICA.COOKIE"
56
+ configReplicaInsecureSkipVerify = "REPLICA.INSECURE_SKIP_VERIFY"
57
+ configReplicaAutoSetup = "REPLICA.AUTO_SETUP"
58
+ configReplicaInterfaceName = "REPLICA.INTERFACE_NAME"
68
59
)
69
60
70
61
var (
@@ -147,33 +138,116 @@ func getConfig() (*types.Config, error) {
147
138
cfg .Replicas = append (cfg .Replicas , collectEnvReplicas ()... )
148
139
}
149
140
141
+ handleDeprecatedEnvVars (cfg )
142
+
150
143
return cfg , nil
151
144
}
152
145
146
+ func handleDeprecatedEnvVars (cfg * types.Config ) {
147
+ value := checkDeprecatedEnvVar ("RUNONSTART" , "RUN_ON_START" )
148
+ if value != "" {
149
+ cfg .RunOnStart , _ = strconv .ParseBool (value )
150
+ }
151
+ value = checkDeprecatedEnvVar ("API_DARKMODE" , "API_DARK_MODE" )
152
+ if value != "" {
153
+ cfg .API .DarkMode , _ = strconv .ParseBool (value )
154
+ }
155
+ value = checkDeprecatedEnvVar ("FEATURES_GENERALSETTINGS" , "FEATURES_GENERAL_SETTINGS" )
156
+ if value != "" {
157
+ cfg .Features .GeneralSettings , _ = strconv .ParseBool (value )
158
+ }
159
+ value = checkDeprecatedEnvVar ("FEATURES_QUERYLOGCONFIG" , "FEATURES_QUERY_LOG_CONFIG" )
160
+ if value != "" {
161
+ cfg .Features .QueryLogConfig , _ = strconv .ParseBool (value )
162
+ }
163
+ value = checkDeprecatedEnvVar ("FEATURES_STATSCONFIG" , "FEATURES_STATS_CONFIG" )
164
+ if value != "" {
165
+ cfg .Features .StatsConfig , _ = strconv .ParseBool (value )
166
+ }
167
+ value = checkDeprecatedEnvVar ("FEATURES_CLIENTSETTINGS" , "FEATURES_CLIENT_SETTINGS" )
168
+ if value != "" {
169
+ cfg .Features .ClientSettings , _ = strconv .ParseBool (value )
170
+ }
171
+ value = checkDeprecatedEnvVar ("FEATURES_DHCP_SERVERCONFIG" , "FEATURES_DHCP_SERVER_CONFIG" )
172
+ if value != "" {
173
+ cfg .Features .DHCP .ServerConfig , _ = strconv .ParseBool (value )
174
+ }
175
+ value = checkDeprecatedEnvVar ("FEATURES_DHCP_STATICLEASES" , "FEATURES_DHCP_STATIC_LEASES" )
176
+ if value != "" {
177
+ cfg .Features .DHCP .StaticLeases , _ = strconv .ParseBool (value )
178
+ }
179
+ value = checkDeprecatedEnvVar ("FEATURES_DNS_ACCESSLISTS" , "FEATURES_DNS_ACCESS_LISTS" )
180
+ if value != "" {
181
+ cfg .Features .DNS .AccessLists , _ = strconv .ParseBool (value )
182
+ }
183
+ value = checkDeprecatedEnvVar ("FEATURES_DNS_SERVERCONFIG" , "FEATURES_DNS_SERVER_CONFIG" )
184
+ if value != "" {
185
+ cfg .Features .DNS .ServerConfig , _ = strconv .ParseBool (value )
186
+ }
187
+
188
+ if cfg .Replica != nil {
189
+ value = checkDeprecatedEnvVar ("REPLICA_WEBURL" , "REPLICA_WEB_URL" )
190
+ if value != "" {
191
+ cfg .Replica .WebURL = value
192
+ }
193
+ value = checkDeprecatedEnvVar ("REPLICA_AUTOSETUP" , "REPLICA_AUTO_SETUP" )
194
+ if value != "" {
195
+ cfg .Replica .AutoSetup , _ = strconv .ParseBool (value )
196
+ }
197
+ value = checkDeprecatedEnvVar ("REPLICA_INTERFACENAME" , "REPLICA_INTERFACE_NAME" )
198
+ if value != "" {
199
+ cfg .Replica .InterfaceName = value
200
+ }
201
+ value = checkDeprecatedEnvVar ("REPLICA_DHCPSERVERENABLED" , "REPLICA_DHCP_SERVER_ENABLED" )
202
+ if value != "" {
203
+ if b , err := strconv .ParseBool (value ); err != nil {
204
+ cfg .Replica .DHCPServerEnabled = utils .Ptr (b )
205
+ }
206
+ }
207
+ }
208
+ }
209
+
210
+ func checkDeprecatedEnvVar (oldName string , newName string ) string {
211
+ old , oldOK := os .LookupEnv (oldName )
212
+ if oldOK {
213
+ logger .With ("deprecated" , oldName , "replacement" , newName ).
214
+ Warn ("Deprecated env variable is used, please use the correct one" )
215
+ }
216
+ new , newOK := os .LookupEnv (newName )
217
+ if newOK {
218
+ return new
219
+ }
220
+ return old
221
+ }
222
+
223
+ func checkDeprecatedReplicaEnvVar (oldPattern , newPattern , replicaID string ) string {
224
+ return checkDeprecatedEnvVar (fmt .Sprintf (oldPattern , replicaID ), fmt .Sprintf (newPattern , replicaID ))
225
+ }
226
+
153
227
// Manually collect replicas from env.
154
228
func collectEnvReplicas () []types.AdGuardInstance {
155
229
var replicas []types.AdGuardInstance
156
230
for _ , v := range os .Environ () {
157
231
if envReplicasURLPattern .MatchString (v ) {
158
232
sm := envReplicasURLPattern .FindStringSubmatch (v )
233
+ index := sm [1 ]
159
234
re := types.AdGuardInstance {
160
235
URL : sm [2 ],
161
- WebURL : os .Getenv (fmt .Sprintf (envWebURL , sm [ 1 ] )),
162
- Username : os . Getenv ( fmt . Sprintf ( envReplicasUsernameFormat , sm [ 1 ]) ),
163
- Password : os .Getenv (fmt .Sprintf (envReplicasPasswordFormat , sm [ 1 ] )),
164
- Cookie : os .Getenv (fmt .Sprintf (envReplicasCookieFormat , sm [ 1 ] )),
165
- APIPath : os .Getenv (fmt .Sprintf (envReplicasAPIPathFormat , sm [ 1 ] )),
166
- InsecureSkipVerify : strings .EqualFold (os . Getenv ( fmt . Sprintf ( envReplicasInsecureSkipVerifyFormat , sm [ 1 ]) ), "true" ),
167
- AutoSetup : strings .EqualFold (os . Getenv ( fmt . Sprintf ( envReplicasAutoSetup , sm [ 1 ]) ), "true" ),
168
- InterfaceName : os . Getenv ( fmt . Sprintf ( envReplicasInterfaceName , sm [ 1 ]) ),
236
+ WebURL : os .Getenv (fmt .Sprintf ("REPLICA%s_WEB_URL" , index )),
237
+ APIPath : checkDeprecatedReplicaEnvVar ( "REPLICA%s_APIPATH" , "REPLICA%s_API_PATH" , index ),
238
+ Username : os .Getenv (fmt .Sprintf ("REPLICA%s_USERNAME" , index )),
239
+ Password : os .Getenv (fmt .Sprintf ("REPLICA%s_PASSWORD" , index )),
240
+ Cookie : os .Getenv (fmt .Sprintf ("REPLICA%s_COOKIE" , index )),
241
+ InsecureSkipVerify : strings .EqualFold (checkDeprecatedReplicaEnvVar ( "REPLICA%s_INSECURESKIPVERIFY" , "REPLICA%s_INSECURE_SKIP_VERIFY" , index ), "true" ),
242
+ AutoSetup : strings .EqualFold (checkDeprecatedReplicaEnvVar ( "REPLICA%s_AUTOSETUP" , "REPLICA%s_AUTO_SETUP" , index ), "true" ),
243
+ InterfaceName : checkDeprecatedReplicaEnvVar ( "REPLICA%s_INTERFACENAME" , "REPLICA%s_INTERFACE_NAME" , index ),
169
244
}
170
245
171
- if dhcpEnabled , ok := os .LookupEnv (fmt .Sprintf (envDHCPServerEnabled , sm [1 ])); ok {
172
- if strings .EqualFold (dhcpEnabled , "true" ) {
173
- re .DHCPServerEnabled = boolPtr (true )
174
- } else if strings .EqualFold (dhcpEnabled , "false" ) {
175
- re .DHCPServerEnabled = boolPtr (false )
176
- }
246
+ dhcpEnabled := checkDeprecatedReplicaEnvVar ("REPLICA%s_DHCPSERVERENABLED" , "REPLICA%s_DHCP_SERVER_ENABLED" , index )
247
+ if strings .EqualFold (dhcpEnabled , "true" ) {
248
+ re .DHCPServerEnabled = utils .Ptr (true )
249
+ } else if strings .EqualFold (dhcpEnabled , "false" ) {
250
+ re .DHCPServerEnabled = utils .Ptr (false )
177
251
}
178
252
if re .APIPath == "" {
179
253
re .APIPath = "/control"
@@ -184,7 +258,3 @@ func collectEnvReplicas() []types.AdGuardInstance {
184
258
185
259
return replicas
186
260
}
187
-
188
- func boolPtr (b bool ) * bool {
189
- return & b
190
- }
0 commit comments