mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-04 03:27:23 -05:00 
			
		
		
		
	caddyhttp: 'not' matcher: Support Caddyfile unmarshaling
This commit is contained in:
		
							parent
							
								
									8b11ed347b
								
							
						
					
					
						commit
						7b4aa108c7
					
				@ -414,7 +414,42 @@ func (m MatchNegate) MarshalJSON() ([]byte, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// UnmarshalCaddyfile implements caddyfile.Unmarshaler.
 | 
					// UnmarshalCaddyfile implements caddyfile.Unmarshaler.
 | 
				
			||||||
func (m *MatchNegate) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
 | 
					func (m *MatchNegate) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
 | 
				
			||||||
	// TODO: figure out how this will work
 | 
						// first, unmarshal each matcher in the set from its tokens
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						matcherMap := make(map[string]RequestMatcher)
 | 
				
			||||||
 | 
						for d.Next() {
 | 
				
			||||||
 | 
							for d.NextBlock(0) {
 | 
				
			||||||
 | 
								matcherName := d.Val()
 | 
				
			||||||
 | 
								mod, err := caddy.GetModule("http.matchers." + matcherName)
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return d.Errf("getting matcher module '%s': %v", matcherName, err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								unm, ok := mod.New().(caddyfile.Unmarshaler)
 | 
				
			||||||
 | 
								if !ok {
 | 
				
			||||||
 | 
									return d.Errf("matcher module '%s' is not a Caddyfile unmarshaler", matcherName)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								err = unm.UnmarshalCaddyfile(d.NewFromNextTokens())
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									return err
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								rm := unm.(RequestMatcher)
 | 
				
			||||||
 | 
								m.Matchers = append(m.Matchers, rm)
 | 
				
			||||||
 | 
								matcherMap[matcherName] = rm
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// we should now be functional, but we also need
 | 
				
			||||||
 | 
						// to be able to marshal as JSON, otherwise config
 | 
				
			||||||
 | 
						// adaptation won't work properly
 | 
				
			||||||
 | 
						m.MatchersRaw = make(map[string]json.RawMessage)
 | 
				
			||||||
 | 
						for name, matchers := range matcherMap {
 | 
				
			||||||
 | 
							jsonBytes, err := json.Marshal(matchers)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return fmt.Errorf("marshaling matcher %s: %v", name, err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							m.MatchersRaw[name] = jsonBytes
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user