@@ -2,14 +2,20 @@ package main
22
33import (
44 "archive/tar"
5+ "bufio"
56 "bytes"
7+ "compress/bzip2"
8+ "compress/gzip"
69 "context"
710 "flag"
811 "github.com/docker/go-connections/sockets"
12+ "github.com/h2non/filetype"
913 "github.com/linead/docker-socket-firewall/pkg/opa"
1014 "github.com/pkg/errors"
15+ "github.com/xi2/xz"
1116 log "github.com/sirupsen/logrus"
1217 "golang.org/x/net/context/ctxhttp"
18+ "gopkg.in/h2non/filetype.v1/matchers"
1319 "io"
1420 "io/ioutil"
1521 "net"
@@ -205,9 +211,24 @@ func verifyBuildInstruction(req *http.Request) (bool, error) {
205211 return false , err
206212 }
207213
208- b1 , b2 := ioutil . NopCloser (& buf ), ioutil .NopCloser (bytes .NewReader (buf .Bytes ()))
214+ b1 , b2 := bufio . NewReader (& buf ), ioutil .NopCloser (bytes .NewReader (buf .Bytes ()))
209215
210- tr := tar .NewReader (b1 )
216+ head , _ := b1 .Peek (262 )
217+
218+ var tr * tar.Reader
219+
220+ if (filetype .IsType (head , matchers .TypeGz )) {
221+ gzip_reader , _ := gzip .NewReader (b1 )
222+ tr = tar .NewReader (gzip_reader )
223+ } else if (filetype .IsType (head , matchers .TypeBz2 )) {
224+ bz2_reader := bzip2 .NewReader (b1 )
225+ tr = tar .NewReader (bz2_reader )
226+ } else if (filetype .IsType (head , matchers .TypeXz )) {
227+ xz_reader , _ := xz .NewReader (b1 , 0 )
228+ tr = tar .NewReader (xz_reader )
229+ } else if (filetype .IsType (head , matchers .TypeTar )) {
230+ tr = tar .NewReader (b1 )
231+ }
211232
212233 dockerfileLoc := req .URL .Query ().Get ("dockerfile" )
213234
0 commit comments