Merge remote-tracking branch 'origin/master'
# Conflicts: # go.mod # go.sum
This commit is contained in:
@ -102,7 +102,7 @@ func (s *Server) previewHandler(w http.ResponseWriter, r *http.Request) {
|
||||
token := vars["token"]
|
||||
filename := vars["filename"]
|
||||
|
||||
_, err := s.CheckMetadata(token, filename, false)
|
||||
metadata, err := s.CheckMetadata(token, filename, false)
|
||||
|
||||
if err != nil {
|
||||
log.Printf("Error metadata: %s", err.Error())
|
||||
@ -110,7 +110,8 @@ func (s *Server) previewHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
contentType, contentLength, err := s.storage.Head(token, filename)
|
||||
contentType := metadata.ContentType
|
||||
contentLength, err := s.storage.Head(token, filename)
|
||||
if err != nil {
|
||||
http.Error(w, http.StatusText(404), 404)
|
||||
return
|
||||
@ -130,7 +131,7 @@ func (s *Server) previewHandler(w http.ResponseWriter, r *http.Request) {
|
||||
templatePath = "download.markdown.html"
|
||||
|
||||
var reader io.ReadCloser
|
||||
if reader, _, _, err = s.storage.Get(token, filename); err != nil {
|
||||
if reader, _, err = s.storage.Get(token, filename); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
@ -612,7 +613,7 @@ func (s *Server) CheckMetadata(token, filename string, increaseDownload bool) (M
|
||||
|
||||
var metadata Metadata
|
||||
|
||||
r, _, _, err := s.storage.Get(token, fmt.Sprintf("%s.metadata", filename))
|
||||
r, _, err := s.storage.Get(token, fmt.Sprintf("%s.metadata", filename))
|
||||
if s.storage.IsNotExist(err) {
|
||||
return metadata, nil
|
||||
} else if err != nil {
|
||||
@ -652,7 +653,7 @@ func (s *Server) CheckDeletionToken(deletionToken, token, filename string) error
|
||||
|
||||
var metadata Metadata
|
||||
|
||||
r, _, _, err := s.storage.Get(token, fmt.Sprintf("%s.metadata", filename))
|
||||
r, _, err := s.storage.Get(token, fmt.Sprintf("%s.metadata", filename))
|
||||
if s.storage.IsNotExist(err) {
|
||||
return nil
|
||||
} else if err != nil {
|
||||
@ -718,7 +719,7 @@ func (s *Server) zipHandler(w http.ResponseWriter, r *http.Request) {
|
||||
continue
|
||||
}
|
||||
|
||||
reader, _, _, err := s.storage.Get(token, filename)
|
||||
reader, _, err := s.storage.Get(token, filename)
|
||||
|
||||
if err != nil {
|
||||
if s.storage.IsNotExist(err) {
|
||||
@ -790,7 +791,7 @@ func (s *Server) tarGzHandler(w http.ResponseWriter, r *http.Request) {
|
||||
continue
|
||||
}
|
||||
|
||||
reader, _, contentLength, err := s.storage.Get(token, filename)
|
||||
reader, contentLength, err := s.storage.Get(token, filename)
|
||||
if err != nil {
|
||||
if s.storage.IsNotExist(err) {
|
||||
http.Error(w, "File not found", 404)
|
||||
@ -849,7 +850,7 @@ func (s *Server) tarHandler(w http.ResponseWriter, r *http.Request) {
|
||||
continue
|
||||
}
|
||||
|
||||
reader, _, contentLength, err := s.storage.Get(token, filename)
|
||||
reader, contentLength, err := s.storage.Get(token, filename)
|
||||
if err != nil {
|
||||
if s.storage.IsNotExist(err) {
|
||||
http.Error(w, "File not found", 404)
|
||||
@ -897,7 +898,8 @@ func (s *Server) headHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
contentType, contentLength, err := s.storage.Head(token, filename)
|
||||
contentType := metadata.ContentType
|
||||
contentLength, err := s.storage.Head(token, filename)
|
||||
if s.storage.IsNotExist(err) {
|
||||
http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
|
||||
return
|
||||
@ -931,7 +933,8 @@ func (s *Server) getHandler(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
reader, contentType, contentLength, err := s.storage.Get(token, filename)
|
||||
contentType := metadata.ContentType
|
||||
reader, contentLength, err := s.storage.Get(token, filename)
|
||||
if s.storage.IsNotExist(err) {
|
||||
http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
|
||||
return
|
||||
|
@ -24,7 +24,7 @@ func FuzzLocalStorage(fuzz []byte) int {
|
||||
}
|
||||
|
||||
token := Encode(10000000 + int64(rand.Intn(1000000000)))
|
||||
filename := Encode(10000000 + int64(rand.Intn(1000000000))) + ".bin"
|
||||
filename := Encode(10000000+int64(rand.Intn(1000000000))) + ".bin"
|
||||
|
||||
input := bytes.NewReader(fuzz)
|
||||
err = storage.Put(token, filename, input, applicationOctetStream, fuzzLength)
|
||||
@ -32,28 +32,20 @@ func FuzzLocalStorage(fuzz []byte) int {
|
||||
panic("unable to save file")
|
||||
}
|
||||
|
||||
contentType, contentLength, err := storage.Head(token, filename)
|
||||
contentLength, err := storage.Head(token, filename)
|
||||
if err != nil {
|
||||
panic("not visible through head")
|
||||
}
|
||||
|
||||
if contentType != applicationOctetStream {
|
||||
panic("incorrect content type")
|
||||
}
|
||||
|
||||
if contentLength != fuzzLength {
|
||||
panic("incorrect content length")
|
||||
}
|
||||
|
||||
output, contentType, contentLength, err := storage.Get(token, filename)
|
||||
output, contentLength, err := storage.Get(token, filename)
|
||||
if err != nil {
|
||||
panic("not visible through get")
|
||||
}
|
||||
|
||||
if contentType != applicationOctetStream {
|
||||
panic("incorrect content type")
|
||||
}
|
||||
|
||||
if contentLength != fuzzLength {
|
||||
panic("incorrect content length")
|
||||
}
|
||||
@ -81,7 +73,7 @@ func FuzzLocalStorage(fuzz []byte) int {
|
||||
panic("unable to delete file")
|
||||
}
|
||||
|
||||
_, _, err = storage.Head(token, filename)
|
||||
_, err = storage.Head(token, filename)
|
||||
if !storage.IsNotExist(err) {
|
||||
panic("file not deleted")
|
||||
}
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"mime"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@ -28,8 +27,8 @@ import (
|
||||
)
|
||||
|
||||
type Storage interface {
|
||||
Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error)
|
||||
Head(token string, filename string) (contentType string, contentLength uint64, err error)
|
||||
Get(token string, filename string) (reader io.ReadCloser, contentLength uint64, err error)
|
||||
Head(token string, filename string) (contentLength uint64, err error)
|
||||
Put(token string, filename string, reader io.Reader, contentType string, contentLength uint64) error
|
||||
Delete(token string, filename string) error
|
||||
IsNotExist(err error) bool
|
||||
@ -51,7 +50,7 @@ func (s *LocalStorage) Type() string {
|
||||
return "local"
|
||||
}
|
||||
|
||||
func (s *LocalStorage) Head(token string, filename string) (contentType string, contentLength uint64, err error) {
|
||||
func (s *LocalStorage) Head(token string, filename string) (contentLength uint64, err error) {
|
||||
path := filepath.Join(s.basedir, token, filename)
|
||||
|
||||
var fi os.FileInfo
|
||||
@ -61,12 +60,10 @@ func (s *LocalStorage) Head(token string, filename string) (contentType string,
|
||||
|
||||
contentLength = uint64(fi.Size())
|
||||
|
||||
contentType = mime.TypeByExtension(filepath.Ext(filename))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) {
|
||||
func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser, contentLength uint64, err error) {
|
||||
path := filepath.Join(s.basedir, token, filename)
|
||||
|
||||
// content type , content length
|
||||
@ -81,8 +78,6 @@ func (s *LocalStorage) Get(token string, filename string) (reader io.ReadCloser,
|
||||
|
||||
contentLength = uint64(fi.Size())
|
||||
|
||||
contentType = mime.TypeByExtension(filepath.Ext(filename))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@ -145,7 +140,7 @@ func (s *S3Storage) Type() string {
|
||||
return "s3"
|
||||
}
|
||||
|
||||
func (s *S3Storage) Head(token string, filename string) (contentType string, contentLength uint64, err error) {
|
||||
func (s *S3Storage) Head(token string, filename string) (contentLength uint64, err error) {
|
||||
key := fmt.Sprintf("%s/%s", token, filename)
|
||||
|
||||
headRequest := &s3.HeadObjectInput{
|
||||
@ -159,10 +154,6 @@ func (s *S3Storage) Head(token string, filename string) (contentType string, con
|
||||
return
|
||||
}
|
||||
|
||||
if response.ContentType != nil {
|
||||
contentType = *response.ContentType
|
||||
}
|
||||
|
||||
if response.ContentLength != nil {
|
||||
contentLength = uint64(*response.ContentLength)
|
||||
}
|
||||
@ -185,7 +176,7 @@ func (s *S3Storage) IsNotExist(err error) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) {
|
||||
func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, contentLength uint64, err error) {
|
||||
key := fmt.Sprintf("%s/%s", token, filename)
|
||||
|
||||
getRequest := &s3.GetObjectInput{
|
||||
@ -198,10 +189,6 @@ func (s *S3Storage) Get(token string, filename string) (reader io.ReadCloser, co
|
||||
return
|
||||
}
|
||||
|
||||
if response.ContentType != nil {
|
||||
contentType = *response.ContentType
|
||||
}
|
||||
|
||||
if response.ContentLength != nil {
|
||||
contentLength = uint64(*response.ContentLength)
|
||||
}
|
||||
@ -401,7 +388,7 @@ func (s *GDrive) Type() string {
|
||||
return "gdrive"
|
||||
}
|
||||
|
||||
func (s *GDrive) Head(token string, filename string) (contentType string, contentLength uint64, err error) {
|
||||
func (s *GDrive) Head(token string, filename string) (contentLength uint64, err error) {
|
||||
var fileId string
|
||||
fileId, err = s.findId(filename, token)
|
||||
if err != nil {
|
||||
@ -409,18 +396,16 @@ func (s *GDrive) Head(token string, filename string) (contentType string, conten
|
||||
}
|
||||
|
||||
var fi *drive.File
|
||||
if fi, err = s.service.Files.Get(fileId).Fields("mimeType", "size").Do(); err != nil {
|
||||
if fi, err = s.service.Files.Get(fileId).Fields("size").Do(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
contentLength = uint64(fi.Size)
|
||||
|
||||
contentType = fi.MimeType
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (s *GDrive) Get(token string, filename string) (reader io.ReadCloser, contentType string, contentLength uint64, err error) {
|
||||
func (s *GDrive) Get(token string, filename string) (reader io.ReadCloser, contentLength uint64, err error) {
|
||||
var fileId string
|
||||
fileId, err = s.findId(filename, token)
|
||||
if err != nil {
|
||||
@ -428,14 +413,13 @@ func (s *GDrive) Get(token string, filename string) (reader io.ReadCloser, conte
|
||||
}
|
||||
|
||||
var fi *drive.File
|
||||
fi, err = s.service.Files.Get(fileId).Fields("mimeType", "size", "md5Checksum").Do()
|
||||
fi, err = s.service.Files.Get(fileId).Fields("size", "md5Checksum").Do()
|
||||
if !s.hasChecksum(fi) {
|
||||
err = fmt.Errorf("Cannot find file %s/%s", token, filename)
|
||||
return
|
||||
}
|
||||
|
||||
contentLength = uint64(fi.Size)
|
||||
contentType = fi.MimeType
|
||||
|
||||
ctx := context.Background()
|
||||
var res *http.Response
|
||||
|
Reference in New Issue
Block a user