|  |  | @ -285,21 +285,14 @@ func parseTLS(h Helper) ([]ConfigValue, error) { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.ArgErr() | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				modName := h.Val() | 
			
		
	
		
			
				
					|  |  |  | 				mod, err := caddy.GetModule("tls.issuance." + modName) | 
			
		
	
		
			
				
					|  |  |  | 				if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.Errf("getting issuer module '%s': %v", modName, err) | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				unm, ok := mod.New().(caddyfile.Unmarshaler) | 
			
		
	
		
			
				
					|  |  |  | 				if !ok { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.Errf("issuer module '%s' is not a Caddyfile unmarshaler", mod.ID) | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				err = unm.UnmarshalCaddyfile(h.NewFromNextSegment()) | 
			
		
	
		
			
				
					|  |  |  | 				modID := "tls.issuance." + modName | 
			
		
	
		
			
				
					|  |  |  | 				unm, err := caddyfile.UnmarshalModule(h.Dispenser, modID) | 
			
		
	
		
			
				
					|  |  |  | 				if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, err | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				issuer, ok := unm.(certmagic.Issuer) | 
			
		
	
		
			
				
					|  |  |  | 				if !ok { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.Errf("module %s is not a certmagic.Issuer", mod.ID) | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.Errf("module %s (%T) is not a certmagic.Issuer", modID, unm) | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				issuers = append(issuers, issuer) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -315,18 +308,12 @@ func parseTLS(h Helper) ([]ConfigValue, error) { | 
			
		
	
		
			
				
					|  |  |  | 					acmeIssuer.Challenges = new(caddytls.ChallengesConfig) | 
			
		
	
		
			
				
					|  |  |  | 					acmeIssuer.Challenges.DNS = new(caddytls.DNSChallengeConfig) | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				dnsProvModule, err := caddy.GetModule("dns.providers." + provName) | 
			
		
	
		
			
				
					|  |  |  | 				if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.Errf("getting DNS provider module named '%s': %v", provName, err) | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				dnsProvModuleInstance := dnsProvModule.New() | 
			
		
	
		
			
				
					|  |  |  | 				if unm, ok := dnsProvModuleInstance.(caddyfile.Unmarshaler); ok { | 
			
		
	
		
			
				
					|  |  |  | 					err = unm.UnmarshalCaddyfile(h.NewFromNextSegment()) | 
			
		
	
		
			
				
					|  |  |  | 				modID := "dns.providers." + provName | 
			
		
	
		
			
				
					|  |  |  | 				unm, err := caddyfile.UnmarshalModule(h.Dispenser, modID) | 
			
		
	
		
			
				
					|  |  |  | 				if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, err | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				acmeIssuer.Challenges.DNS.ProviderRaw = caddyconfig.JSONModuleObject(dnsProvModuleInstance, "name", provName, h.warnings) | 
			
		
	
		
			
				
					|  |  |  | 				acmeIssuer.Challenges.DNS.ProviderRaw = caddyconfig.JSONModuleObject(unm, "name", provName, h.warnings) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 			case "ca_root": | 
			
		
	
		
			
				
					|  |  |  | 				arg := h.RemainingArgs() | 
			
		
	
	
		
			
				
					|  |  | @ -583,21 +570,15 @@ func parseLog(h Helper) ([]ConfigValue, error) { | 
			
		
	
		
			
				
					|  |  |  | 				case "discard": | 
			
		
	
		
			
				
					|  |  |  | 					wo = caddy.DiscardWriter{} | 
			
		
	
		
			
				
					|  |  |  | 				default: | 
			
		
	
		
			
				
					|  |  |  | 					mod, err := caddy.GetModule("caddy.logging.writers." + moduleName) | 
			
		
	
		
			
				
					|  |  |  | 					if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 						return nil, h.Errf("getting log writer module named '%s': %v", moduleName, err) | 
			
		
	
		
			
				
					|  |  |  | 					} | 
			
		
	
		
			
				
					|  |  |  | 					unm, ok := mod.New().(caddyfile.Unmarshaler) | 
			
		
	
		
			
				
					|  |  |  | 					if !ok { | 
			
		
	
		
			
				
					|  |  |  | 						return nil, h.Errf("log writer module '%s' is not a Caddyfile unmarshaler", mod) | 
			
		
	
		
			
				
					|  |  |  | 					} | 
			
		
	
		
			
				
					|  |  |  | 					err = unm.UnmarshalCaddyfile(h.NewFromNextSegment()) | 
			
		
	
		
			
				
					|  |  |  | 					modID := "caddy.logging.writers." + moduleName | 
			
		
	
		
			
				
					|  |  |  | 					unm, err := caddyfile.UnmarshalModule(h.Dispenser, modID) | 
			
		
	
		
			
				
					|  |  |  | 					if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 						return nil, err | 
			
		
	
		
			
				
					|  |  |  | 					} | 
			
		
	
		
			
				
					|  |  |  | 					var ok bool | 
			
		
	
		
			
				
					|  |  |  | 					wo, ok = unm.(caddy.WriterOpener) | 
			
		
	
		
			
				
					|  |  |  | 					if !ok { | 
			
		
	
		
			
				
					|  |  |  | 						return nil, h.Errf("module %s is not a WriterOpener", mod) | 
			
		
	
		
			
				
					|  |  |  | 						return nil, h.Errf("module %s (%T) is not a WriterOpener", modID, unm) | 
			
		
	
		
			
				
					|  |  |  | 					} | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				cl.WriterRaw = caddyconfig.JSONModuleObject(wo, "output", moduleName, h.warnings) | 
			
		
	
	
		
			
				
					|  |  | @ -607,21 +588,14 @@ func parseLog(h Helper) ([]ConfigValue, error) { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.ArgErr() | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				moduleName := h.Val() | 
			
		
	
		
			
				
					|  |  |  | 				mod, err := caddy.GetModule("caddy.logging.encoders." + moduleName) | 
			
		
	
		
			
				
					|  |  |  | 				if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.Errf("getting log encoder module named '%s': %v", moduleName, err) | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				unm, ok := mod.New().(caddyfile.Unmarshaler) | 
			
		
	
		
			
				
					|  |  |  | 				if !ok { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.Errf("log encoder module '%s' is not a Caddyfile unmarshaler", mod) | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				err = unm.UnmarshalCaddyfile(h.NewFromNextSegment()) | 
			
		
	
		
			
				
					|  |  |  | 				moduleID := "caddy.logging.encoders." + moduleName | 
			
		
	
		
			
				
					|  |  |  | 				unm, err := caddyfile.UnmarshalModule(h.Dispenser, moduleID) | 
			
		
	
		
			
				
					|  |  |  | 				if err != nil { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, err | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				enc, ok := unm.(zapcore.Encoder) | 
			
		
	
		
			
				
					|  |  |  | 				if !ok { | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.Errf("module %s is not a zapcore.Encoder", mod) | 
			
		
	
		
			
				
					|  |  |  | 					return nil, h.Errf("module %s (%T) is not a zapcore.Encoder", moduleID, unm) | 
			
		
	
		
			
				
					|  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  | 				cl.EncoderRaw = caddyconfig.JSONModuleObject(enc, "format", moduleName, h.warnings) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | 
 |