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

@ -112,6 +112,7 @@ log | path to log file| | LOG |
cors-domains | comma separated list of domains for CORS, setting it enable CORS | | CORS_DOMAINS |
clamav-host | host for clamav feature | | CLAMAV_HOST |
rate-limit | request per minute | | RATE_LIMIT |
max-upload-size | max upload size in kilobytes | | MAX_UPLOAD_SIZE |
If you want to use TLS using lets encrypt certificates, set lets-encrypt-hosts to your domain, set tls-listener to :443 and enable force-https.

View File

@ -191,6 +191,12 @@ var globalFlags = []cli.Flag{
Value: 0,
EnvVar: "RATE_LIMIT",
},
cli.Int64Flag{
Name: "max-upload-size",
Usage: "max limit for upload, in kilobytes",
Value: 0,
EnvVar: "MAX_UPLOAD_SIZE",
},
cli.StringFlag{
Name: "lets-encrypt-hosts",
Usage: "host1, host2",
@ -351,6 +357,10 @@ func New() *Cmd {
options = append(options, server.ClamavHost(v))
}
if v := c.Int64("max-upload-size"); v > 0 {
options = append(options, server.MaxUploadSize(v))
}
if v := c.Int("rate-limit"); v > 0 {
options = append(options, server.RateLimit(v))
}

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