@@ -100,7 +100,12 @@ func handlePingbackConn(conn net.Conn, expect []byte) error {
100100// there is no config available. It prints any warnings to stderr,
101101// and returns the resulting JSON config bytes along with
102102// the name of the loaded config file (if any).
103- func LoadConfig (configFile , adapterName string ) ([]byte , string , error ) {
103+ // The return values are:
104+ // - config bytes (nil if no config)
105+ // - config file used ("" if none)
106+ // - adapter used ("" if none)
107+ // - error, if any
108+ func LoadConfig (configFile , adapterName string ) ([]byte , string , string , error ) {
104109 return loadConfigWithLogger (caddy .Log (), configFile , adapterName )
105110}
106111
@@ -138,7 +143,7 @@ func isCaddyfile(configFile, adapterName string) (bool, error) {
138143 return false , nil
139144}
140145
141- func loadConfigWithLogger (logger * zap.Logger , configFile , adapterName string ) ([]byte , string , error ) {
146+ func loadConfigWithLogger (logger * zap.Logger , configFile , adapterName string ) ([]byte , string , string , error ) {
142147 // if no logger is provided, use a nop logger
143148 // just so we don't have to check for nil
144149 if logger == nil {
@@ -147,7 +152,7 @@ func loadConfigWithLogger(logger *zap.Logger, configFile, adapterName string) ([
147152
148153 // specifying an adapter without a config file is ambiguous
149154 if adapterName != "" && configFile == "" {
150- return nil , "" , fmt .Errorf ("cannot adapt config without config file (use --config)" )
155+ return nil , "" , "" , fmt .Errorf ("cannot adapt config without config file (use --config)" )
151156 }
152157
153158 // load initial config and adapter
@@ -158,13 +163,13 @@ func loadConfigWithLogger(logger *zap.Logger, configFile, adapterName string) ([
158163 if configFile == "-" {
159164 config , err = io .ReadAll (os .Stdin )
160165 if err != nil {
161- return nil , "" , fmt .Errorf ("reading config from stdin: %v" , err )
166+ return nil , "" , "" , fmt .Errorf ("reading config from stdin: %v" , err )
162167 }
163168 logger .Info ("using config from stdin" )
164169 } else {
165170 config , err = os .ReadFile (configFile )
166171 if err != nil {
167- return nil , "" , fmt .Errorf ("reading config from file: %v" , err )
172+ return nil , "" , "" , fmt .Errorf ("reading config from file: %v" , err )
168173 }
169174 logger .Info ("using config from file" , zap .String ("file" , configFile ))
170175 }
@@ -179,7 +184,7 @@ func loadConfigWithLogger(logger *zap.Logger, configFile, adapterName string) ([
179184 cfgAdapter = nil
180185 } else if err != nil {
181186 // default Caddyfile exists, but error reading it
182- return nil , "" , fmt .Errorf ("reading default Caddyfile: %v" , err )
187+ return nil , "" , "" , fmt .Errorf ("reading default Caddyfile: %v" , err )
183188 } else {
184189 // success reading default Caddyfile
185190 configFile = "Caddyfile"
@@ -191,14 +196,14 @@ func loadConfigWithLogger(logger *zap.Logger, configFile, adapterName string) ([
191196 if yes , err := isCaddyfile (configFile , adapterName ); yes {
192197 adapterName = "caddyfile"
193198 } else if err != nil {
194- return nil , "" , err
199+ return nil , "" , "" , err
195200 }
196201
197202 // load config adapter
198203 if adapterName != "" {
199204 cfgAdapter = caddyconfig .GetAdapter (adapterName )
200205 if cfgAdapter == nil {
201- return nil , "" , fmt .Errorf ("unrecognized config adapter: %s" , adapterName )
206+ return nil , "" , "" , fmt .Errorf ("unrecognized config adapter: %s" , adapterName )
202207 }
203208 }
204209
@@ -208,7 +213,7 @@ func loadConfigWithLogger(logger *zap.Logger, configFile, adapterName string) ([
208213 "filename" : configFile ,
209214 })
210215 if err != nil {
211- return nil , "" , fmt .Errorf ("adapting config using %s: %v" , adapterName , err )
216+ return nil , "" , "" , fmt .Errorf ("adapting config using %s: %v" , adapterName , err )
212217 }
213218 logger .Info ("adapted config to JSON" , zap .String ("adapter" , adapterName ))
214219 for _ , warn := range warnings {
@@ -226,11 +231,11 @@ func loadConfigWithLogger(logger *zap.Logger, configFile, adapterName string) ([
226231 // validate that the config is at least valid JSON
227232 err = json .Unmarshal (config , new (any ))
228233 if err != nil {
229- return nil , "" , fmt .Errorf ("config is not valid JSON: %v; did you mean to use a config adapter (the --adapter flag)?" , err )
234+ return nil , "" , "" , fmt .Errorf ("config is not valid JSON: %v; did you mean to use a config adapter (the --adapter flag)?" , err )
230235 }
231236 }
232237
233- return config , configFile , nil
238+ return config , configFile , adapterName , nil
234239}
235240
236241// watchConfigFile watches the config file at filename for changes
@@ -256,7 +261,7 @@ func watchConfigFile(filename, adapterName string) {
256261 }
257262
258263 // get current config
259- lastCfg , _ , err := loadConfigWithLogger (nil , filename , adapterName )
264+ lastCfg , _ , _ , err := loadConfigWithLogger (nil , filename , adapterName )
260265 if err != nil {
261266 logger ().Error ("unable to load latest config" , zap .Error (err ))
262267 return
@@ -268,7 +273,7 @@ func watchConfigFile(filename, adapterName string) {
268273 //nolint:staticcheck
269274 for range time .Tick (1 * time .Second ) {
270275 // get current config
271- newCfg , _ , err := loadConfigWithLogger (nil , filename , adapterName )
276+ newCfg , _ , _ , err := loadConfigWithLogger (nil , filename , adapterName )
272277 if err != nil {
273278 logger ().Error ("unable to load latest config" , zap .Error (err ))
274279 return
0 commit comments