fix: resolve critical issues and improve task management
- Fix path traversal vulnerability in downloadVideo handler by adding download directory whitelist validation - Add graceful shutdown with signal handling for task persistence - Fix division by zero panic in progressBar.percent() when total <= 0 - Add GetDB() function that returns error instead of using log.Fatal - Change deleteTask to only remove database records, preserve downloaded files - Add paused status for interrupted tasks on shutdown Co-Authored-By: Claude
This commit is contained in:
+18
-9
@@ -4,7 +4,6 @@ import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
@@ -115,18 +114,28 @@ func SaveDownloadFolder(db *sql.DB, downloadFolder string) error {
|
||||
|
||||
var SqliteLock sync.Mutex
|
||||
|
||||
func MustGetDB(path ...string) *sql.DB {
|
||||
pathStr := ""
|
||||
if len(path) == 0 {
|
||||
pathStr = "./data.db"
|
||||
} else if len(path) > 1 {
|
||||
log.Fatalln(errors.New("len(path) <= 1"))
|
||||
} else {
|
||||
// GetDB 获取数据库连接,返回错误而非直接退出
|
||||
func GetDB(path ...string) (*sql.DB, error) {
|
||||
pathStr := "./data.db"
|
||||
if len(path) > 0 {
|
||||
if len(path) > 1 {
|
||||
return nil, errors.New("len(path) must be <= 1")
|
||||
}
|
||||
pathStr = path[0]
|
||||
}
|
||||
db, err := sql.Open("sqlite", pathStr)
|
||||
if err != nil {
|
||||
log.Fatalln("sql.Open:", err)
|
||||
return nil, fmt.Errorf("sql.Open: %w", err)
|
||||
}
|
||||
return db, nil
|
||||
}
|
||||
|
||||
// MustGetDB 获取数据库连接,失败时 panic(用于初始化阶段)
|
||||
// 推荐在 main 函数中使用 GetDB 并处理错误
|
||||
func MustGetDB(path ...string) *sql.DB {
|
||||
db, err := GetDB(path...)
|
||||
if err != nil {
|
||||
panic(fmt.Sprintf("MustGetDB: %v", err))
|
||||
}
|
||||
return db
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user