summaryrefslogtreecommitdiff
path: root/vendor/github.com/gin-contrib/gzip/options.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/gin-contrib/gzip/options.go')
-rw-r--r--vendor/github.com/gin-contrib/gzip/options.go116
1 files changed, 116 insertions, 0 deletions
diff --git a/vendor/github.com/gin-contrib/gzip/options.go b/vendor/github.com/gin-contrib/gzip/options.go
new file mode 100644
index 000000000..6b3bc3f4a
--- /dev/null
+++ b/vendor/github.com/gin-contrib/gzip/options.go
@@ -0,0 +1,116 @@
+package gzip
+
+import (
+ "compress/gzip"
+ "net/http"
+ "regexp"
+ "strings"
+
+ "github.com/gin-gonic/gin"
+)
+
+var (
+ DefaultExcludedExtentions = NewExcludedExtensions([]string{
+ ".png", ".gif", ".jpeg", ".jpg",
+ })
+ DefaultOptions = &Options{
+ ExcludedExtensions: DefaultExcludedExtentions,
+ }
+)
+
+type Options struct {
+ ExcludedExtensions ExcludedExtensions
+ ExcludedPaths ExcludedPaths
+ ExcludedPathesRegexs ExcludedPathesRegexs
+ DecompressFn func(c *gin.Context)
+}
+
+type Option func(*Options)
+
+func WithExcludedExtensions(args []string) Option {
+ return func(o *Options) {
+ o.ExcludedExtensions = NewExcludedExtensions(args)
+ }
+}
+
+func WithExcludedPaths(args []string) Option {
+ return func(o *Options) {
+ o.ExcludedPaths = NewExcludedPaths(args)
+ }
+}
+
+func WithExcludedPathsRegexs(args []string) Option {
+ return func(o *Options) {
+ o.ExcludedPathesRegexs = NewExcludedPathesRegexs(args)
+ }
+}
+
+func WithDecompressFn(decompressFn func(c *gin.Context)) Option {
+ return func(o *Options) {
+ o.DecompressFn = decompressFn
+ }
+}
+
+// Using map for better lookup performance
+type ExcludedExtensions map[string]bool
+
+func NewExcludedExtensions(extensions []string) ExcludedExtensions {
+ res := make(ExcludedExtensions)
+ for _, e := range extensions {
+ res[e] = true
+ }
+ return res
+}
+
+func (e ExcludedExtensions) Contains(target string) bool {
+ _, ok := e[target]
+ return ok
+}
+
+type ExcludedPaths []string
+
+func NewExcludedPaths(paths []string) ExcludedPaths {
+ return ExcludedPaths(paths)
+}
+
+func (e ExcludedPaths) Contains(requestURI string) bool {
+ for _, path := range e {
+ if strings.HasPrefix(requestURI, path) {
+ return true
+ }
+ }
+ return false
+}
+
+type ExcludedPathesRegexs []*regexp.Regexp
+
+func NewExcludedPathesRegexs(regexs []string) ExcludedPathesRegexs {
+ result := make([]*regexp.Regexp, len(regexs))
+ for i, reg := range regexs {
+ result[i] = regexp.MustCompile(reg)
+ }
+ return result
+}
+
+func (e ExcludedPathesRegexs) Contains(requestURI string) bool {
+ for _, reg := range e {
+ if reg.MatchString(requestURI) {
+ return true
+ }
+ }
+ return false
+}
+
+func DefaultDecompressHandle(c *gin.Context) {
+ if c.Request.Body == nil {
+ return
+ }
+ r, err := gzip.NewReader(c.Request.Body)
+ if err != nil {
+ _ = c.AbortWithError(http.StatusBadRequest, err)
+ return
+ }
+ c.Request.Header.Del("Content-Encoding")
+ c.Request.Header.Del("Content-Length")
+ c.Request.Body = r
+}