-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathmain.go
More file actions
91 lines (75 loc) · 2.49 KB
/
main.go
File metadata and controls
91 lines (75 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package main
import (
"embed"
"flag"
"log"
"m3u8dweb/backend"
"m3u8dweb/config"
"m3u8dweb/db"
"m3u8dweb/handlers"
"net/http"
"runtime"
)
//go:embed templates/*
var fs embed.FS
// 声明将在编译时注入的变量
var (
version = "VERSION_NO" // 版本号
buildTime = "BUILD_TIME" // 编译时间
commit = "COMMIT_ID_HASH" // Git提交哈希
)
// basicAuth 中间件实现HTTP基本认证
func basicAuth(username, password string, handler http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
user, pass, ok := r.BasicAuth()
if !ok || user != username || pass != password {
w.Header().Set("WWW-Authenticate", `Basic realm="m3u8dweb"`)
w.WriteHeader(http.StatusUnauthorized)
w.Write([]byte("未授权访问\n"))
return
}
handler.ServeHTTP(w, r)
}
}
func main() {
handlers.GTemplateFs = &fs
// 打印版本信息
log.Printf("m3u8dweb - 版本: %s, 构建时间: %s, 提交: %s, GOOS:%s, GOARCH: %s", version, buildTime, commit, runtime.GOOS, runtime.GOARCH)
// 定义命令行参数
listenAddr := flag.String("listen", ":8080", "HTTP服务监听地址")
dbPath := flag.String("db", "downloads.db", "数据库文件路径")
authUser := flag.String("auth-user", "", "Basic认证用户名")
authPass := flag.String("auth-pass", "", "Basic认证密码")
// 解析命令行参数
flag.Parse()
// 初始化数据库
if err := db.InitDB(*dbPath); err != nil {
log.Fatalf("无法初始化数据库: %v", err)
}
defer db.CloseDB()
// 初始化默认配置
config.InitDefaultSettings()
go backend.RunBackendDownloader()
ch := make(chan []byte, 1)
go backend.RunFastPushThread(ch)
go handlers.BroadcastTaskThread(ch)
// 注册路由,根据是否提供认证信息决定是否启用BasicAuth
registerHandler := func(path string, handler http.HandlerFunc) {
if *authUser != "" && *authPass != "" {
http.HandleFunc(path, basicAuth(*authUser, *authPass, handler))
} else {
http.HandleFunc(path, handler)
}
}
// 注册页面路由
registerHandler("/", handlers.AllTasksHandler)
registerHandler("/new-download", handlers.NewDownloadHandler)
registerHandler("/settings", handlers.SettingsHandler)
// 注册API路由
registerHandler("/api/tasks", handlers.TaskAPIHandler)
registerHandler("/api/settings", handlers.SettingsAPIHandler)
//快速推送
registerHandler("/ws/progress", handlers.TaskWebSocketHandler)
log.Printf("服务器启动在 %s 端口", *listenAddr)
log.Fatal(http.ListenAndServe(*listenAddr, nil))
}