diff --git a/frontend/src/pages/resource_details_page.tsx b/frontend/src/pages/resource_details_page.tsx index 825a65f..89fe26a 100644 --- a/frontend/src/pages/resource_details_page.tsx +++ b/frontend/src/pages/resource_details_page.tsx @@ -702,20 +702,32 @@ function FileTile({ file }: { file: RFile }) {

- + { + file.size > 10 * 1024 * 1024 ? ( + + ) : ( + + + + ) + }
diff --git a/server/service/file.go b/server/service/file.go index 108822b..a6ab9b7 100644 --- a/server/service/file.go +++ b/server/service/file.go @@ -20,8 +20,9 @@ import ( ) const ( - blockSize = 4 * 1024 * 1024 // 4MB - storageKeyUnavailable = "storage_key_unavailable" // Placeholder for unavailable storage key + blockSize = 4 * 1024 * 1024 // 4MB + storageKeyUnavailable = "storage_key_unavailable" // Placeholder for unavailable storage key + MinUnrequireVerifyFileSize = 10 * 1024 * 1024 // 10MB ) func getUploadingSize() int64 { @@ -387,15 +388,6 @@ func GetFile(fid string) (*model.FileView, error) { // DownloadFile handles the file download request. Return a presigned URL or a direct file path. func DownloadFile(fid, cfToken string) (string, string, error) { - passed, err := verifyCfToken(cfToken) - if err != nil { - log.Error("failed to verify cf token: ", err) - return "", "", model.NewRequestError("failed to verify cf token") - } - if !passed { - log.Info("cf token verification failed") - return "", "", model.NewRequestError("cf token verification failed") - } file, err := dao.GetFile(fid) if err != nil { log.Error("failed to get file: ", err) @@ -405,6 +397,16 @@ func DownloadFile(fid, cfToken string) (string, string, error) { return "", "", model.NewRequestError("file is not available, please try again later") } + passed, err := verifyCfToken(cfToken) + if err != nil { + log.Error("failed to verify cf token: ", err) + return "", "", model.NewRequestError("failed to verify cf token") + } + if !passed && file.Size > MinUnrequireVerifyFileSize { + log.Info("cf token verification failed") + return "", "", model.NewRequestError("cf token verification failed") + } + if file.StorageID == nil { if file.RedirectUrl != "" { err := dao.AddResourceDownloadCount(file.ResourceID) diff --git a/server/service/utils.go b/server/service/utils.go index d93cc37..483193f 100644 --- a/server/service/utils.go +++ b/server/service/utils.go @@ -28,6 +28,9 @@ func verifyCfToken(cfToken string) (bool, error) { if config.CloudflareTurnstileSecretKey() == "" { return true, nil } + if cfToken == "" { + return false, nil + } client := &http.Client{} data, _ := json.Marshal(map[string]string{ "secret": config.CloudflareTurnstileSecretKey(),