Uploads #1
|
|
@ -15,6 +15,7 @@ export default class UploadController extends Controller {
|
|||
ev.preventDefault();
|
||||
|
||||
this._promptForUpload((files) => {
|
||||
files.sort((a, b) => b.lastModified - a.lastModified);
|
||||
this._doUploads(files);
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,7 +98,8 @@ func (s *Service) FinalizePending(ctx context.Context, pendingGUID string, expec
|
|||
}
|
||||
|
||||
pendingDataFilename := filepath.Join(s.pendingDir, pu.GUID+".upload")
|
||||
if err := s.verifyPendingUpload(pendingDataFilename, expectedHash); err != nil {
|
||||
fileSize, err := s.verifyPendingUpload(pendingDataFilename, expectedHash)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
|
@ -113,7 +114,7 @@ func (s *Service) FinalizePending(ctx context.Context, pendingGUID string, expec
|
|||
newUpload := models.Upload{
|
||||
SiteID: site.ID,
|
||||
GUID: models.NewNanoID(),
|
||||
FileSize: pu.FileSize,
|
||||
FileSize: fileSize,
|
||||
MIMEType: pu.MIMEType,
|
||||
Filename: pu.Filename,
|
||||
CreatedAt: newTime,
|
||||
|
|
@ -136,30 +137,31 @@ func (s *Service) FinalizePending(ctx context.Context, pendingGUID string, expec
|
|||
return nil
|
||||
}
|
||||
|
||||
func (s *Service) verifyPendingUpload(pendingDataFilename string, expectedHash string) error {
|
||||
func (s *Service) verifyPendingUpload(pendingDataFilename string, expectedHash string) (fileSize int64, _ error) {
|
||||
expectedHashBytes, err := hex.DecodeString(expectedHash)
|
||||
if err != nil {
|
||||
return err
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if _, err := os.Stat(pendingDataFilename); err != nil {
|
||||
return err
|
||||
stats, err := os.Stat(pendingDataFilename)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
pendingDataFile, err := os.Open(pendingDataFilename)
|
||||
if err != nil {
|
||||
return err
|
||||
return 0, err
|
||||
}
|
||||
defer pendingDataFile.Close()
|
||||
|
||||
shaSum := sha256.New()
|
||||
if _, err := io.Copy(shaSum, pendingDataFile); err != nil {
|
||||
return err
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if !bytes.Equal(shaSum.Sum(nil), expectedHashBytes) {
|
||||
return errors.New("hash mismatch")
|
||||
return 0, errors.New("hash mismatch")
|
||||
}
|
||||
|
||||
return nil
|
||||
return stats.Size(), nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue