Started a repository of the uploads
This commit is contained in:
parent
6b697e008f
commit
0a9af9cde8
11 changed files with 101 additions and 15 deletions
|
|
@ -5,6 +5,7 @@ import (
|
|||
|
||||
"lmika.dev/lmika/weiro/config"
|
||||
"lmika.dev/lmika/weiro/providers/db"
|
||||
"lmika.dev/lmika/weiro/providers/uploadfiles"
|
||||
"lmika.dev/lmika/weiro/services/auth"
|
||||
"lmika.dev/lmika/weiro/services/posts"
|
||||
"lmika.dev/lmika/weiro/services/publisher"
|
||||
|
|
@ -28,12 +29,14 @@ func New(cfg config.Config) (*Services, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
ufp := uploadfiles.New(filepath.Join(cfg.DataDir, "uploads"))
|
||||
|
||||
authSvc := auth.New(dbp)
|
||||
publisherSvc := publisher.New(dbp)
|
||||
publisherQueue := publisher.NewQueue(publisherSvc)
|
||||
postService := posts.New(dbp, publisherQueue)
|
||||
siteService := sites.New(dbp)
|
||||
uploadService := uploads.New(dbp, filepath.Join(cfg.ScratchDir, "uploads", "pending"))
|
||||
uploadService := uploads.New(dbp, ufp, filepath.Join(cfg.ScratchDir, "uploads", "pending"))
|
||||
|
||||
return &Services{
|
||||
DB: dbp,
|
||||
|
|
|
|||
|
|
@ -95,12 +95,36 @@ func (s *Service) FinalizePending(ctx context.Context, pendingGUID string, expec
|
|||
return errors.New("invalid pending upload")
|
||||
}
|
||||
|
||||
pendingDataFilename := filepath.Join(s.pendingDir, pu.GUID+".upload")
|
||||
if err := s.verifyPendingUpload(pendingDataFilename, expectedHash); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
newUpload := models.Upload{
|
||||
SiteID: site.ID,
|
||||
GUID: models.NewNanoID(),
|
||||
FileSize: pu.FileSize,
|
||||
MIMEType: pu.MIMEType,
|
||||
Filename: pu.Filename,
|
||||
CreatedAt: time.Now().UTC(),
|
||||
}
|
||||
if err := s.db.SaveUpload(ctx, &newUpload); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := s.up.AdoptFile(site, newUpload, pendingDataFilename); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Service) verifyPendingUpload(pendingDataFilename string, expectedHash string) error {
|
||||
expectedHashBytes, err := hex.DecodeString(expectedHash)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
pendingDataFilename := filepath.Join(s.pendingDir, pu.GUID+".upload")
|
||||
if _, err := os.Stat(pendingDataFilename); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,16 +5,19 @@ import (
|
|||
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
"lmika.dev/lmika/weiro/providers/db"
|
||||
"lmika.dev/lmika/weiro/providers/uploadfiles"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
db *db.Provider
|
||||
up *uploadfiles.Provider
|
||||
pendingDir string
|
||||
}
|
||||
|
||||
func New(db *db.Provider, pendingDir string) *Service {
|
||||
func New(db *db.Provider, up *uploadfiles.Provider, pendingDir string) *Service {
|
||||
return &Service{
|
||||
db: db,
|
||||
up: up,
|
||||
pendingDir: pendingDir,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue