ISSUE-332

This commit is contained in:
Andrea Spacca
2020-12-31 20:08:42 +01:00
parent bfb34634de
commit e53d599e09
4 changed files with 106 additions and 76 deletions

View File

@ -311,6 +311,12 @@ func (s *Server) postHandler(w http.ResponseWriter, r *http.Request) {
contentLength := n
if s.maxUploadSize > 0 && contentLength > s.maxUploadSize {
log.Print("Entity too large")
http.Error(w, http.StatusText(http.StatusRequestEntityTooLarge), http.StatusRequestEntityTooLarge)
return
}
metadata := MetadataForRequest(contentType, r)
buffer := &bytes.Buffer{}
@ -455,6 +461,12 @@ func (s *Server) putHandler(w http.ResponseWriter, r *http.Request) {
contentLength = n
}
if s.maxUploadSize > 0 && contentLength > s.maxUploadSize {
log.Print("Entity too large")
http.Error(w, http.StatusText(http.StatusRequestEntityTooLarge), http.StatusRequestEntityTooLarge)
return
}
if contentLength == 0 {
log.Print("Empty content-length")
http.Error(w, errors.New("Could not upload empty file").Error(), 400)

View File

@ -25,11 +25,11 @@ THE SOFTWARE.
package server
import (
crypto_rand "crypto/rand"
"encoding/binary"
"errors"
gorillaHandlers "github.com/gorilla/handlers"
"log"
crypto_rand "crypto/rand"
"encoding/binary"
"math/rand"
"mime"
"net/http"
@ -175,6 +175,12 @@ func Logger(logger *log.Logger) OptionFn {
}
}
func MaxUploadSize(kbytes int64) OptionFn {
return func(srvr *Server) {
srvr.maxUploadSize = kbytes * 1024
}
}
func RateLimit(requests int) OptionFn {
return func(srvr *Server) {
srvr.rateLimitRequests = requests
@ -271,6 +277,7 @@ type Server struct {
locks map[string]*sync.Mutex
maxUploadSize int64
rateLimitRequests int
storage Storage