Browse Source
			
			
			
			
				
		* caddyfile: Support for raw token values, improve `map`, `expression` * Applied code review comments * Rename RawVal to ValRaw Co-authored-by: Matthew Holt <mholt@users.noreply.github.com>master
							committed by
							
								 GitHub
								GitHub
							
						
					
				
				 6 changed files with 300 additions and 23 deletions
			
			
		| @ -0,0 +1,114 @@ | |||||
|  | example.com | ||||
|  | 
 | ||||
|  | @a expression {http.error.status_code} == 400 | ||||
|  | abort @a | ||||
|  | 
 | ||||
|  | @b expression {http.error.status_code} == "401" | ||||
|  | abort @b | ||||
|  | 
 | ||||
|  | @c expression {http.error.status_code} == `402` | ||||
|  | abort @c | ||||
|  | 
 | ||||
|  | @d expression "{http.error.status_code} == 403" | ||||
|  | abort @d | ||||
|  | 
 | ||||
|  | @e expression `{http.error.status_code} == 404` | ||||
|  | abort @e | ||||
|  | ---------- | ||||
|  | { | ||||
|  | 	"apps": { | ||||
|  | 		"http": { | ||||
|  | 			"servers": { | ||||
|  | 				"srv0": { | ||||
|  | 					"listen": [ | ||||
|  | 						":443" | ||||
|  | 					], | ||||
|  | 					"routes": [ | ||||
|  | 						{ | ||||
|  | 							"match": [ | ||||
|  | 								{ | ||||
|  | 									"host": [ | ||||
|  | 										"example.com" | ||||
|  | 									] | ||||
|  | 								} | ||||
|  | 							], | ||||
|  | 							"handle": [ | ||||
|  | 								{ | ||||
|  | 									"handler": "subroute", | ||||
|  | 									"routes": [ | ||||
|  | 										{ | ||||
|  | 											"handle": [ | ||||
|  | 												{ | ||||
|  | 													"abort": true, | ||||
|  | 													"handler": "static_response" | ||||
|  | 												} | ||||
|  | 											], | ||||
|  | 											"match": [ | ||||
|  | 												{ | ||||
|  | 													"expression": "{http.error.status_code} == 400" | ||||
|  | 												} | ||||
|  | 											] | ||||
|  | 										}, | ||||
|  | 										{ | ||||
|  | 											"handle": [ | ||||
|  | 												{ | ||||
|  | 													"abort": true, | ||||
|  | 													"handler": "static_response" | ||||
|  | 												} | ||||
|  | 											], | ||||
|  | 											"match": [ | ||||
|  | 												{ | ||||
|  | 													"expression": "{http.error.status_code} == \"401\"" | ||||
|  | 												} | ||||
|  | 											] | ||||
|  | 										}, | ||||
|  | 										{ | ||||
|  | 											"handle": [ | ||||
|  | 												{ | ||||
|  | 													"abort": true, | ||||
|  | 													"handler": "static_response" | ||||
|  | 												} | ||||
|  | 											], | ||||
|  | 											"match": [ | ||||
|  | 												{ | ||||
|  | 													"expression": "{http.error.status_code} == `402`" | ||||
|  | 												} | ||||
|  | 											] | ||||
|  | 										}, | ||||
|  | 										{ | ||||
|  | 											"handle": [ | ||||
|  | 												{ | ||||
|  | 													"abort": true, | ||||
|  | 													"handler": "static_response" | ||||
|  | 												} | ||||
|  | 											], | ||||
|  | 											"match": [ | ||||
|  | 												{ | ||||
|  | 													"expression": "{http.error.status_code} == 403" | ||||
|  | 												} | ||||
|  | 											] | ||||
|  | 										}, | ||||
|  | 										{ | ||||
|  | 											"handle": [ | ||||
|  | 												{ | ||||
|  | 													"abort": true, | ||||
|  | 													"handler": "static_response" | ||||
|  | 												} | ||||
|  | 											], | ||||
|  | 											"match": [ | ||||
|  | 												{ | ||||
|  | 													"expression": "{http.error.status_code} == 404" | ||||
|  | 												} | ||||
|  | 											] | ||||
|  | 										} | ||||
|  | 									] | ||||
|  | 								} | ||||
|  | 							], | ||||
|  | 							"terminal": true | ||||
|  | 						} | ||||
|  | 					] | ||||
|  | 				} | ||||
|  | 			} | ||||
|  | 		} | ||||
|  | 	} | ||||
|  | } | ||||
| @ -0,0 +1,107 @@ | |||||
|  | example.com | ||||
|  | 
 | ||||
|  | map {host}             {my_placeholder}  {magic_number} { | ||||
|  | 	# Should output boolean "true" and an integer | ||||
|  | 	example.com        true              3 | ||||
|  | 
 | ||||
|  | 	# Should output a string and null | ||||
|  | 	foo.example.com    "string value" | ||||
|  | 
 | ||||
|  | 	# Should output two strings (quoted int) | ||||
|  | 	(.*)\.example.com  "${1} subdomain"  "5" | ||||
|  | 
 | ||||
|  | 	# Should output null and a string (quoted int) | ||||
|  | 	~.*\.net$          -                 `7` | ||||
|  | 
 | ||||
|  | 	# Should output a float and the string "false" | ||||
|  | 	~.*\.xyz$          123.456           "false" | ||||
|  | 
 | ||||
|  | 	# Should output two strings, second being escaped quote | ||||
|  | 	default            "unknown domain"  \""" | ||||
|  | } | ||||
|  | ---------- | ||||
|  | { | ||||
|  | 	"apps": { | ||||
|  | 		"http": { | ||||
|  | 			"servers": { | ||||
|  | 				"srv0": { | ||||
|  | 					"listen": [ | ||||
|  | 						":443" | ||||
|  | 					], | ||||
|  | 					"routes": [ | ||||
|  | 						{ | ||||
|  | 							"match": [ | ||||
|  | 								{ | ||||
|  | 									"host": [ | ||||
|  | 										"example.com" | ||||
|  | 									] | ||||
|  | 								} | ||||
|  | 							], | ||||
|  | 							"handle": [ | ||||
|  | 								{ | ||||
|  | 									"handler": "subroute", | ||||
|  | 									"routes": [ | ||||
|  | 										{ | ||||
|  | 											"handle": [ | ||||
|  | 												{ | ||||
|  | 													"defaults": [ | ||||
|  | 														"unknown domain", | ||||
|  | 														"\"" | ||||
|  | 													], | ||||
|  | 													"destinations": [ | ||||
|  | 														"{my_placeholder}", | ||||
|  | 														"{magic_number}" | ||||
|  | 													], | ||||
|  | 													"handler": "map", | ||||
|  | 													"mappings": [ | ||||
|  | 														{ | ||||
|  | 															"input": "example.com", | ||||
|  | 															"outputs": [ | ||||
|  | 																true, | ||||
|  | 																3 | ||||
|  | 															] | ||||
|  | 														}, | ||||
|  | 														{ | ||||
|  | 															"input": "foo.example.com", | ||||
|  | 															"outputs": [ | ||||
|  | 																"string value", | ||||
|  | 																null | ||||
|  | 															] | ||||
|  | 														}, | ||||
|  | 														{ | ||||
|  | 															"input": "(.*)\\.example.com", | ||||
|  | 															"outputs": [ | ||||
|  | 																"${1} subdomain", | ||||
|  | 																"5" | ||||
|  | 															] | ||||
|  | 														}, | ||||
|  | 														{ | ||||
|  | 															"input_regexp": ".*\\.net$", | ||||
|  | 															"outputs": [ | ||||
|  | 																null, | ||||
|  | 																"7" | ||||
|  | 															] | ||||
|  | 														}, | ||||
|  | 														{ | ||||
|  | 															"input_regexp": ".*\\.xyz$", | ||||
|  | 															"outputs": [ | ||||
|  | 																123.456, | ||||
|  | 																"false" | ||||
|  | 															] | ||||
|  | 														} | ||||
|  | 													], | ||||
|  | 													"source": "{http.request.host}" | ||||
|  | 												} | ||||
|  | 											] | ||||
|  | 										} | ||||
|  | 									] | ||||
|  | 								} | ||||
|  | 							], | ||||
|  | 							"terminal": true | ||||
|  | 						} | ||||
|  | 					] | ||||
|  | 				} | ||||
|  | 			} | ||||
|  | 		} | ||||
|  | 	} | ||||
|  | } | ||||
					Loading…
					
					
				
		Reference in new issue