@@ -3,6 +3,7 @@ package main
33import (
44 "bufio"
55 "bytes"
6+ "compress/gzip"
67 "encoding/json"
78 "io"
89 "log"
@@ -23,6 +24,34 @@ import (
2324 "github.com/rs/cors"
2425)
2526
27+ func readUploadedText (r io.Reader ) (string , error ) {
28+ data , err := io .ReadAll (r )
29+ if err != nil {
30+ return "" , err
31+ }
32+
33+ if ! isGzipPayload (data ) {
34+ return string (data ), nil
35+ }
36+
37+ gr , err := gzip .NewReader (bytes .NewReader (data ))
38+ if err != nil {
39+ return "" , err
40+ }
41+ defer gr .Close ()
42+
43+ decoded , err := io .ReadAll (gr )
44+ if err != nil {
45+ return "" , err
46+ }
47+
48+ return string (decoded ), nil
49+ }
50+
51+ func isGzipPayload (data []byte ) bool {
52+ return len (data ) >= 2 && data [0 ] == 0x1f && data [1 ] == 0x8b
53+ }
54+
2655type DatabaseResponse struct {
2756 Databases []Params `json:"databases"`
2857}
@@ -148,10 +177,13 @@ func server(jobsystem JobSystem, config ConfigRoot) {
148177 http .Error (w , err .Error (), http .StatusBadRequest )
149178 return
150179 }
180+ defer f .Close ()
151181
152- buf := new (bytes.Buffer )
153- buf .ReadFrom (f )
154- data = buf .String ()
182+ data , err = readUploadedText (f )
183+ if err != nil {
184+ http .Error (w , err .Error (), http .StatusBadRequest )
185+ return
186+ }
155187 } else {
156188 err := req .ParseForm ()
157189 if err != nil {
@@ -292,10 +324,13 @@ func server(jobsystem JobSystem, config ConfigRoot) {
292324 http .Error (w , err .Error (), http .StatusBadRequest )
293325 return
294326 }
327+ defer f .Close ()
295328
296- buf := new (bytes.Buffer )
297- buf .ReadFrom (f )
298- query = buf .String ()
329+ query , err = readUploadedText (f )
330+ if err != nil {
331+ http .Error (w , err .Error (), http .StatusBadRequest )
332+ return
333+ }
299334 dbs = req .Form ["database[]" ]
300335 mode = req .FormValue ("mode" )
301336 email = req .FormValue ("email" )
@@ -378,10 +413,13 @@ func server(jobsystem JobSystem, config ConfigRoot) {
378413 http .Error (w , err .Error (), http .StatusBadRequest )
379414 return
380415 }
416+ defer f .Close ()
381417
382- buf := new (bytes.Buffer )
383- buf .ReadFrom (f )
384- query = buf .String ()
418+ query , err = readUploadedText (f )
419+ if err != nil {
420+ http .Error (w , err .Error (), http .StatusBadRequest )
421+ return
422+ }
385423 dbs = req .Form ["database[]" ]
386424 mode = req .FormValue ("mode" )
387425 email = req .FormValue ("email" )
@@ -440,10 +478,13 @@ func server(jobsystem JobSystem, config ConfigRoot) {
440478 http .Error (w , err .Error (), http .StatusBadRequest )
441479 return
442480 }
481+ defer f .Close ()
443482
444- buf := new (bytes.Buffer )
445- buf .ReadFrom (f )
446- query = buf .String ()
483+ query , err = readUploadedText (f )
484+ if err != nil {
485+ http .Error (w , err .Error (), http .StatusBadRequest )
486+ return
487+ }
447488 mode = req .FormValue ("mode" )
448489 email = req .FormValue ("email" )
449490 } else {
@@ -502,14 +543,11 @@ func server(jobsystem JobSystem, config ConfigRoot) {
502543 }
503544 defer file .Close ()
504545
505- buf := new (bytes.Buffer )
506- _ , err = io .Copy (buf , file )
546+ query , err := readUploadedText (file )
507547 if err != nil {
508- http .Error (w , err .Error (), http .StatusInternalServerError )
548+ http .Error (w , err .Error (), http .StatusBadRequest )
509549 return
510550 }
511-
512- query := buf .String ()
513551 queries = append (queries , query )
514552 }
515553 } else {
@@ -561,10 +599,13 @@ func server(jobsystem JobSystem, config ConfigRoot) {
561599 http .Error (w , err .Error (), http .StatusBadRequest )
562600 return
563601 }
602+ defer f .Close ()
564603
565- buf := new (bytes.Buffer )
566- buf .ReadFrom (f )
567- query = buf .String ()
604+ query , err = readUploadedText (f )
605+ if err != nil {
606+ http .Error (w , err .Error (), http .StatusBadRequest )
607+ return
608+ }
568609 dbs = req .Form ["database[]" ]
569610 //mode = req.FormValue("mode")
570611 email = req .FormValue ("email" )
0 commit comments