96150971ca
The update date is applied to the issue's comment created to inform about the modification of the issue's content, and is set as the asset creation date.
57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
// Copyright 2021 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package attachment
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
repo_model "code.gitea.io/gitea/models/repo"
|
|
"code.gitea.io/gitea/modules/storage"
|
|
"code.gitea.io/gitea/modules/upload"
|
|
"code.gitea.io/gitea/modules/util"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// NewAttachment creates a new attachment object, but do not verify.
|
|
func NewAttachment(attach *repo_model.Attachment, file io.Reader, size int64) (*repo_model.Attachment, error) {
|
|
if attach.RepoID == 0 {
|
|
return nil, fmt.Errorf("attachment %s should belong to a repository", attach.Name)
|
|
}
|
|
|
|
err := db.WithTx(db.DefaultContext, func(ctx context.Context) error {
|
|
attach.UUID = uuid.New().String()
|
|
size, err := storage.Attachments.Save(attach.RelativePath(), file, size)
|
|
if err != nil {
|
|
return fmt.Errorf("Create: %w", err)
|
|
}
|
|
attach.Size = size
|
|
|
|
eng := db.GetEngine(ctx)
|
|
if attach.NoAutoTime {
|
|
eng.NoAutoTime()
|
|
}
|
|
_, err = eng.Insert(attach)
|
|
return err
|
|
})
|
|
|
|
return attach, err
|
|
}
|
|
|
|
// UploadAttachment upload new attachment into storage and update database
|
|
func UploadAttachment(file io.Reader, allowedTypes string, fileSize int64, opts *repo_model.Attachment) (*repo_model.Attachment, error) {
|
|
buf := make([]byte, 1024)
|
|
n, _ := util.ReadAtMost(file, buf)
|
|
buf = buf[:n]
|
|
|
|
if err := upload.Verify(buf, opts.Name, allowedTypes); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return NewAttachment(opts, io.MultiReader(bytes.NewReader(buf), file), fileSize)
|
|
}
|