✨ Compress Transformer
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				release-nightly / build-docker (push) Successful in 1m4s
				
					
					
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	release-nightly / build-docker (push) Successful in 1m4s
				This commit is contained in:
		| @@ -92,7 +92,9 @@ func UseProxies(app *fiber.App) { | |||||||
| func makeResponse(ctx *fiber.Ctx, site *sign.SiteConfig) error { | func makeResponse(ctx *fiber.Ctx, site *sign.SiteConfig) error { | ||||||
| 	// Modify request | 	// Modify request | ||||||
| 	for _, transformer := range site.Transformers { | 	for _, transformer := range site.Transformers { | ||||||
| 		transformer.TransformRequest(ctx) | 		if err := transformer.TransformRequest(ctx); err != nil { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// Forward | 	// Forward | ||||||
| @@ -100,7 +102,9 @@ func makeResponse(ctx *fiber.Ctx, site *sign.SiteConfig) error { | |||||||
|  |  | ||||||
| 	// Modify response | 	// Modify response | ||||||
| 	for _, transformer := range site.Transformers { | 	for _, transformer := range site.Transformers { | ||||||
| 		transformer.TransformResponse(ctx) | 		if err := transformer.TransformResponse(ctx); err != nil { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return err | 	return err | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								pkg/sign/transformers/compress.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								pkg/sign/transformers/compress.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | package transformers | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/gofiber/fiber/v2" | ||||||
|  | 	"github.com/gofiber/fiber/v2/middleware/compress" | ||||||
|  | 	"github.com/samber/lo" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var CompressResponse = RequestTransformer{ | ||||||
|  | 	ModifyResponse: func(options any, ctx *fiber.Ctx) error { | ||||||
|  | 		opts := DeserializeOptions[struct { | ||||||
|  | 			Level int `json:"level"` | ||||||
|  | 		}](options) | ||||||
|  | 		level := lo.Ternary(opts.Level < 0 || opts.Level > 2, 0, opts.Level) | ||||||
|  | 		ware := compress.New(compress.Config{Level: compress.Level(level)}) | ||||||
|  |  | ||||||
|  | 		return ware(ctx) | ||||||
|  | 	}, | ||||||
|  | } | ||||||
| @@ -8,8 +8,8 @@ import ( | |||||||
| // Definitions | // Definitions | ||||||
|  |  | ||||||
| type RequestTransformer struct { | type RequestTransformer struct { | ||||||
| 	ModifyRequest  func(options any, ctx *fiber.Ctx) | 	ModifyRequest  func(options any, ctx *fiber.Ctx) error | ||||||
| 	ModifyResponse func(options any, ctx *fiber.Ctx) | 	ModifyResponse func(options any, ctx *fiber.Ctx) error | ||||||
| } | } | ||||||
|  |  | ||||||
| type RequestTransformerConfig struct { | type RequestTransformerConfig struct { | ||||||
| @@ -17,26 +17,28 @@ type RequestTransformerConfig struct { | |||||||
| 	Options any    `json:"options" yaml:"options"` | 	Options any    `json:"options" yaml:"options"` | ||||||
| } | } | ||||||
|  |  | ||||||
| func (v *RequestTransformerConfig) TransformRequest(ctx *fiber.Ctx) { | func (v *RequestTransformerConfig) TransformRequest(ctx *fiber.Ctx) error { | ||||||
| 	for k, f := range Transformers { | 	for k, f := range Transformers { | ||||||
| 		if k == v.Type { | 		if k == v.Type { | ||||||
| 			if f.ModifyRequest != nil { | 			if f.ModifyRequest != nil { | ||||||
| 				f.ModifyRequest(v.Options, ctx) | 				return f.ModifyRequest(v.Options, ctx) | ||||||
| 			} | 			} | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (v *RequestTransformerConfig) TransformResponse(ctx *fiber.Ctx) { | func (v *RequestTransformerConfig) TransformResponse(ctx *fiber.Ctx) error { | ||||||
| 	for k, f := range Transformers { | 	for k, f := range Transformers { | ||||||
| 		if k == v.Type { | 		if k == v.Type { | ||||||
| 			if f.ModifyResponse != nil { | 			if f.ModifyResponse != nil { | ||||||
| 				f.ModifyResponse(v.Options, ctx) | 				return f.ModifyResponse(v.Options, ctx) | ||||||
| 			} | 			} | ||||||
| 			break | 			break | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| // Helpers | // Helpers | ||||||
| @@ -52,5 +54,6 @@ func DeserializeOptions[T any](data any) T { | |||||||
| // Every transformer need to be mapped here so that they can get work. | // Every transformer need to be mapped here so that they can get work. | ||||||
|  |  | ||||||
| var Transformers = map[string]RequestTransformer{ | var Transformers = map[string]RequestTransformer{ | ||||||
| 	"replacePath": ReplacePath, | 	"replacePath":      ReplacePath, | ||||||
|  | 	"compressResponse": CompressResponse, | ||||||
| } | } | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| var ReplacePath = RequestTransformer{ | var ReplacePath = RequestTransformer{ | ||||||
| 	ModifyRequest: func(options any, ctx *fiber.Ctx) { | 	ModifyRequest: func(options any, ctx *fiber.Ctx) error { | ||||||
| 		opts := DeserializeOptions[struct { | 		opts := DeserializeOptions[struct { | ||||||
| 			Pattern string `json:"pattern"` | 			Pattern string `json:"pattern"` | ||||||
| 			Value   string `json:"value"` | 			Value   string `json:"value"` | ||||||
| @@ -20,5 +20,6 @@ var ReplacePath = RequestTransformer{ | |||||||
| 		} else if ex := regexp.MustCompile(opts.Pattern); ex != nil { | 		} else if ex := regexp.MustCompile(opts.Pattern); ex != nil { | ||||||
| 			ctx.Path(ex.ReplaceAllString(path, opts.Repl)) | 			ctx.Path(ex.ReplaceAllString(path, opts.Repl)) | ||||||
| 		} | 		} | ||||||
|  | 		return nil | ||||||
| 	}, | 	}, | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user