|
|
@@ -462,14 +462,13 @@ func (s *Server) putHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
reader = r.Body
|
|
|
|
|
|
- defer r.Body.Close()
|
|
|
+ defer CloseCheck(r.Body.Close)
|
|
|
|
|
|
if contentLength == -1 {
|
|
|
// queue file to disk, because s3 needs content length
|
|
|
var err error
|
|
|
- var f io.Reader
|
|
|
|
|
|
- f = reader
|
|
|
+ f := reader
|
|
|
|
|
|
var b bytes.Buffer
|
|
|
|
|
|
@@ -575,13 +574,9 @@ func resolveURL(r *http.Request, u *url.URL, proxyPort string) string {
|
|
|
}
|
|
|
|
|
|
func resolveKey(key, proxyPath string) string {
|
|
|
- if strings.HasPrefix(key, "/") {
|
|
|
- key = key[1:]
|
|
|
- }
|
|
|
+ key = strings.TrimPrefix(key, "/")
|
|
|
|
|
|
- if strings.HasPrefix(key, proxyPath) {
|
|
|
- key = key[len(proxyPath):]
|
|
|
- }
|
|
|
+ key = strings.TrimPrefix(key, proxyPath)
|
|
|
|
|
|
key = strings.Replace(key, "\\", "/", -1)
|
|
|
|
|
|
@@ -660,7 +655,7 @@ func (metadata metadata) remainingLimitHeaderValues() (remainingDownloads, remai
|
|
|
if metadata.MaxDate.IsZero() {
|
|
|
remainingDays = "n/a"
|
|
|
} else {
|
|
|
- timeDifference := metadata.MaxDate.Sub(time.Now())
|
|
|
+ timeDifference := time.Until(metadata.MaxDate)
|
|
|
remainingDays = strconv.Itoa(int(timeDifference.Hours()/24) + 1)
|
|
|
}
|
|
|
|
|
|
@@ -679,8 +674,6 @@ func (s *Server) lock(token, filename string) {
|
|
|
lock, _ := s.locks.LoadOrStore(key, &sync.Mutex{})
|
|
|
|
|
|
lock.(*sync.Mutex).Lock()
|
|
|
-
|
|
|
- return
|
|
|
}
|
|
|
|
|
|
func (s *Server) unlock(token, filename string) {
|
|
|
@@ -702,7 +695,7 @@ func (s *Server) checkMetadata(token, filename string, increaseDownload bool) (m
|
|
|
return metadata, err
|
|
|
}
|
|
|
|
|
|
- defer r.Close()
|
|
|
+ defer CloseCheck(r.Close)
|
|
|
|
|
|
if err := json.NewDecoder(r).Decode(&metadata); err != nil {
|
|
|
return metadata, err
|
|
|
@@ -740,7 +733,7 @@ func (s *Server) checkDeletionToken(deletionToken, token, filename string) error
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- defer r.Close()
|
|
|
+ defer CloseCheck(r.Close)
|
|
|
|
|
|
if err := json.NewDecoder(r).Decode(&metadata); err != nil {
|
|
|
return err
|
|
|
@@ -755,9 +748,9 @@ func (s *Server) purgeHandler() {
|
|
|
ticker := time.NewTicker(s.purgeInterval)
|
|
|
go func() {
|
|
|
for {
|
|
|
- select {
|
|
|
- case <-ticker.C:
|
|
|
- err := s.storage.Purge(s.purgeDays)
|
|
|
+ <-ticker.C
|
|
|
+ err := s.storage.Purge(s.purgeDays)
|
|
|
+ if err != nil {
|
|
|
s.logger.Printf("error cleaning up expired files: %v", err)
|
|
|
}
|
|
|
}
|
|
|
@@ -825,7 +818,7 @@ func (s *Server) zipHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- defer reader.Close()
|
|
|
+ defer CloseCheck(reader.Close)
|
|
|
|
|
|
header := &zip.FileHeader{
|
|
|
Name: strings.Split(key, "/")[1],
|
|
|
@@ -868,10 +861,10 @@ func (s *Server) tarGzHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
w.Header().Set("Connection", "close")
|
|
|
|
|
|
os := gzip.NewWriter(w)
|
|
|
- defer os.Close()
|
|
|
+ defer CloseCheck(os.Close)
|
|
|
|
|
|
zw := tar.NewWriter(os)
|
|
|
- defer zw.Close()
|
|
|
+ defer CloseCheck(zw.Close)
|
|
|
|
|
|
for _, key := range strings.Split(files, ",") {
|
|
|
key = resolveKey(key, s.proxyPath)
|
|
|
@@ -896,7 +889,7 @@ func (s *Server) tarGzHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- defer reader.Close()
|
|
|
+ defer CloseCheck(reader.Close)
|
|
|
|
|
|
header := &tar.Header{
|
|
|
Name: strings.Split(key, "/")[1],
|
|
|
@@ -930,7 +923,7 @@ func (s *Server) tarHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
w.Header().Set("Connection", "close")
|
|
|
|
|
|
zw := tar.NewWriter(w)
|
|
|
- defer zw.Close()
|
|
|
+ defer CloseCheck(zw.Close)
|
|
|
|
|
|
for _, key := range strings.Split(files, ",") {
|
|
|
key = resolveKey(key, s.proxyPath)
|
|
|
@@ -955,7 +948,7 @@ func (s *Server) tarHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- defer reader.Close()
|
|
|
+ defer CloseCheck(reader.Close)
|
|
|
|
|
|
header := &tar.Header{
|
|
|
Name: strings.Split(key, "/")[1],
|
|
|
@@ -1037,7 +1030,7 @@ func (s *Server) getHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- defer reader.Close()
|
|
|
+ defer CloseCheck(reader.Close)
|
|
|
|
|
|
var disposition string
|
|
|
|
|
|
@@ -1086,8 +1079,6 @@ func (s *Server) getHandler(w http.ResponseWriter, r *http.Request) {
|
|
|
http.Error(w, "Error occurred copying to output stream", 500)
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
- return
|
|
|
}
|
|
|
|
|
|
// RedirectHandler handles redirect
|
|
|
@@ -1142,7 +1133,6 @@ func ipFilterHandler(h http.Handler, ipFilterOptions *IPFilterOptions) http.Hand
|
|
|
} else {
|
|
|
WrapIPFilter(h, *ipFilterOptions).ServeHTTP(w, r)
|
|
|
}
|
|
|
- return
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1156,7 +1146,7 @@ func (s *Server) basicAuthHandler(h http.Handler) http.HandlerFunc {
|
|
|
w.Header().Set("WWW-Authenticate", "Basic realm=\"Restricted\"")
|
|
|
|
|
|
username, password, authOK := r.BasicAuth()
|
|
|
- if authOK == false {
|
|
|
+ if !authOK {
|
|
|
http.Error(w, "Not authorized", 401)
|
|
|
return
|
|
|
}
|