add files restrictions
This commit is contained in:
parent
3a1655d246
commit
c2ea32bf5b
@ -30,7 +30,7 @@ func New(ctx context.Context, logger hlog.Logger,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
fmt.Println("monio", keyID,accessKey,token,region)
|
fmt.Println("monio", keyID, accessKey, token, region)
|
||||||
|
|
||||||
bucketExists, err := conn.BucketExists(ctx, bucket)
|
bucketExists, err := conn.BucketExists(ctx, bucket)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -78,7 +78,7 @@ func (bs *BlobStore) PutFile(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Println(info)
|
fmt.Println("info", info)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"heruvym/middleware"
|
"heruvym/middleware"
|
||||||
"heruvym/model"
|
"heruvym/model"
|
||||||
"heruvym/tools"
|
"heruvym/tools"
|
||||||
|
"heruvym/utils"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
@ -670,6 +671,15 @@ type PutFileResp struct {
|
|||||||
func (h *Heruvym) PutFile(w http.ResponseWriter, r *http.Request) {
|
func (h *Heruvym) PutFile(w http.ResponseWriter, r *http.Request) {
|
||||||
defer r.Body.Close()
|
defer r.Body.Close()
|
||||||
|
|
||||||
|
sess := jwt_adapter.Get(r.Context())
|
||||||
|
if sess == nil {
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
if _, err := w.Write([]byte("not authorized")); err != nil {
|
||||||
|
fmt.Println("CAN NOT WRITE", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if err := r.ParseMultipartForm(10 * MB); err != nil {
|
if err := r.ParseMultipartForm(10 * MB); err != nil {
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
if _, err := w.Write([]byte("can not parse multipart " + err.Error())); err != nil {
|
if _, err := w.Write([]byte("can not parse multipart " + err.Error())); err != nil {
|
||||||
@ -694,6 +704,46 @@ func (h *Heruvym) PutFile(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, files := range r.MultipartForm.File {
|
||||||
|
for _, fileHeader := range files {
|
||||||
|
fileSize := fileHeader.Size
|
||||||
|
fileType := utils.GetFileType(fileHeader.Filename)
|
||||||
|
|
||||||
|
switch fileType {
|
||||||
|
case "image":
|
||||||
|
if fileSize > 5*MB {
|
||||||
|
w.WriteHeader(http.StatusRequestEntityTooLarge)
|
||||||
|
if _, err := w.Write([]byte("Image file size exceeds the limit of 5MB")); err != nil {
|
||||||
|
fmt.Println("CAN NOT WRITE", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case "video":
|
||||||
|
if fileSize > 50*MB {
|
||||||
|
w.WriteHeader(http.StatusRequestEntityTooLarge)
|
||||||
|
if _, err := w.Write([]byte("Video file size exceeds the limit of 50MB")); err != nil {
|
||||||
|
fmt.Println("CAN NOT WRITE", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case "document":
|
||||||
|
if fileSize > 10*MB {
|
||||||
|
w.WriteHeader(http.StatusRequestEntityTooLarge)
|
||||||
|
if _, err := w.Write([]byte("Document file size exceeds the limit of 10MB")); err != nil {
|
||||||
|
fmt.Println("CAN NOT WRITE", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
w.WriteHeader(http.StatusNotAcceptable)
|
||||||
|
if _, err := w.Write([]byte("Unsupported file type")); err != nil {
|
||||||
|
fmt.Println("CAN NOT WRITE", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
filesCount := len(r.MultipartForm.File)
|
filesCount := len(r.MultipartForm.File)
|
||||||
|
|
||||||
if filesCount == 0 {
|
if filesCount == 0 {
|
||||||
@ -704,15 +754,6 @@ func (h *Heruvym) PutFile(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
sess := jwt_adapter.Get(r.Context())
|
|
||||||
if sess == nil {
|
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
|
||||||
if _, err := w.Write([]byte("not authorized")); err != nil {
|
|
||||||
fmt.Println("CAN NOT WRITE", err)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var req PutFileReq
|
var req PutFileReq
|
||||||
req.Ticket = r.MultipartForm.Value["ticket"][0]
|
req.Ticket = r.MultipartForm.Value["ticket"][0]
|
||||||
|
|
||||||
|
@ -191,13 +191,62 @@ func TestTicket(t *testing.T) {
|
|||||||
//assert.NoError(t, err)
|
//assert.NoError(t, err)
|
||||||
//assert.Equal(t, "test", channed.Message)
|
//assert.Equal(t, "test", channed.Message)
|
||||||
})
|
})
|
||||||
bdd.Test(t, "send file", func() {
|
bdd.Test(t, "send file passed", func() {
|
||||||
body := &bytes.Buffer{}
|
body := &bytes.Buffer{}
|
||||||
writer := multipart.NewWriter(body)
|
writer := multipart.NewWriter(body)
|
||||||
|
|
||||||
partf, _ := writer.CreateFormFile("f.go", "f.go")
|
partf, _ := writer.CreateFormFile("image.jpg", "image.jpg")
|
||||||
f, err := os.OpenFile("./main_test.go", os.O_RDWR, 0644)
|
f, err := os.OpenFile("./testfiles/image.jpg", os.O_RDWR, 0644)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
partf, _ = writer.CreateFormFile("image2.png", "image2.png")
|
||||||
|
f, err = os.OpenFile("./testfiles/image2.png", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
partf, _ = writer.CreateFormFile("gtaV.mp4", "gtaV.mp4")
|
||||||
|
f, err = os.OpenFile("./testfiles/gtaV.mp4", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
partf, _ = writer.CreateFormFile("test.csv", "test.csv")
|
||||||
|
f, err = os.OpenFile("./testfiles/test.csv", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
partf, _ = writer.CreateFormFile("test.doc", "test.doc")
|
||||||
|
f, err = os.OpenFile("./testfiles/test.doc", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
partf, _ = writer.CreateFormFile("test.docx", "test.docx")
|
||||||
|
f, err = os.OpenFile("./testfiles/test.docx", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
partf, _ = writer.CreateFormFile("test.pdf", "test.pdf")
|
||||||
|
f, err = os.OpenFile("./testfiles/test.pdf", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
partf, _ = writer.CreateFormFile("test.txt", "test.txt")
|
||||||
|
f, err = os.OpenFile("./testfiles/test.txt", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
partf, _ = writer.CreateFormFile("test.xlsx", "test.xlsx")
|
||||||
|
f, err = os.OpenFile("./testfiles/test.xlsx", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer f.Close()
|
||||||
io.Copy(partf, f)
|
io.Copy(partf, f)
|
||||||
|
|
||||||
assert.NoError(t, writer.WriteField("ticket", ticket.Ticket))
|
assert.NoError(t, writer.WriteField("ticket", ticket.Ticket))
|
||||||
@ -215,6 +264,54 @@ func TestTicket(t *testing.T) {
|
|||||||
str, err := ioutil.ReadAll(resp.Body)
|
str, err := ioutil.ReadAll(resp.Body)
|
||||||
fmt.Println("resp files", err, string(str))
|
fmt.Println("resp files", err, string(str))
|
||||||
})
|
})
|
||||||
|
bdd.Test(t, "send mp3 file", func() {
|
||||||
|
body := &bytes.Buffer{}
|
||||||
|
writer := multipart.NewWriter(body)
|
||||||
|
|
||||||
|
partf, _ := writer.CreateFormFile("audio.mp3", "audio.mp3")
|
||||||
|
f, err := os.OpenFile("./testfiles/audio.mp3", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
assert.NoError(t, writer.WriteField("ticket", ticket.Ticket))
|
||||||
|
|
||||||
|
writer.Close()
|
||||||
|
req, err := http.NewRequestWithContext(ctx, http.MethodPost, "http://localhost:1488/sendFiles", body)
|
||||||
|
req.Header.Set("Content-Type", "multipart/form-data; boundary="+writer.Boundary())
|
||||||
|
req.Header.Set("Referer", "http://localhost:1488")
|
||||||
|
req.Header.Add(jwt_adapter.DefaultHeaderKey, "Bearer "+token)
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, http.StatusNotAcceptable, resp.StatusCode)
|
||||||
|
|
||||||
|
str, err := ioutil.ReadAll(resp.Body)
|
||||||
|
fmt.Println("resp files", err, string(str))
|
||||||
|
})
|
||||||
|
bdd.Test(t, "send file big size", func() {
|
||||||
|
body := &bytes.Buffer{}
|
||||||
|
writer := multipart.NewWriter(body)
|
||||||
|
|
||||||
|
partf, _ := writer.CreateFormFile("gtaV+size.mp4", "gtaV+size.mp4")
|
||||||
|
f, err := os.OpenFile("./testfiles/gtaV+size.mp4", os.O_RDWR, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
io.Copy(partf, f)
|
||||||
|
|
||||||
|
assert.NoError(t, writer.WriteField("ticket", ticket.Ticket))
|
||||||
|
|
||||||
|
writer.Close()
|
||||||
|
req, err := http.NewRequestWithContext(ctx, http.MethodPost, "http://localhost:1488/sendFiles", body)
|
||||||
|
req.Header.Set("Content-Type", "multipart/form-data; boundary="+writer.Boundary())
|
||||||
|
req.Header.Set("Referer", "http://localhost:1488")
|
||||||
|
req.Header.Add(jwt_adapter.DefaultHeaderKey, "Bearer "+token)
|
||||||
|
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, http.StatusRequestEntityTooLarge, resp.StatusCode)
|
||||||
|
|
||||||
|
str, err := ioutil.ReadAll(resp.Body)
|
||||||
|
fmt.Println("resp files", err, string(str))
|
||||||
|
})
|
||||||
//todo
|
//todo
|
||||||
bdd.Test(t, "/subscribe, tools.SseWrapper(h.GetList)", func() {
|
bdd.Test(t, "/subscribe, tools.SseWrapper(h.GetList)", func() {
|
||||||
client := &http.Client{}
|
client := &http.Client{}
|
||||||
|
0
test/testfiles/audio.mp3
Normal file
0
test/testfiles/audio.mp3
Normal file
BIN
test/testfiles/image.jpg
Normal file
BIN
test/testfiles/image.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 MiB |
BIN
test/testfiles/image2.png
Normal file
BIN
test/testfiles/image2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 MiB |
1
test/testfiles/test.csv
Normal file
1
test/testfiles/test.csv
Normal file
@ -0,0 +1 @@
|
|||||||
|
123
|
|
0
test/testfiles/test.doc
Normal file
0
test/testfiles/test.doc
Normal file
0
test/testfiles/test.docx
Normal file
0
test/testfiles/test.docx
Normal file
0
test/testfiles/test.pdf
Normal file
0
test/testfiles/test.pdf
Normal file
1
test/testfiles/test.txt
Normal file
1
test/testfiles/test.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
123
|
0
test/testfiles/test.xlsx
Normal file
0
test/testfiles/test.xlsx
Normal file
20
utils/utils.go
Normal file
20
utils/utils.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetFileType(filename string) string {
|
||||||
|
ext := strings.ToLower(filepath.Ext(filename))
|
||||||
|
switch ext {
|
||||||
|
case ".jpg", ".png":
|
||||||
|
return "image"
|
||||||
|
case ".mp4":
|
||||||
|
return "video"
|
||||||
|
case ".txt", ".doc", ".docx", ".csv", ".xlsx", ".pdf":
|
||||||
|
return "document"
|
||||||
|
default:
|
||||||
|
return "unsupported"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user