添加 WebSocket VPN 接口及用户认证

- 移动 config 包到 internal/config,新增 DatabaseConfig
- 使用 GORM + SQLite 管理用户数据,预留 MySQL 支持
- 新增 internal/model/user.go GORM 用户模型
- 新增 internal/db/db.go 数据库初始化及默认管理员
- 新增 internal/vpn/ WebSocket 鉴权与隧道骨架
- /ws 路径支持用户名+密码鉴权 (bcrypt)
- 心跳保活 + echo 隧道模式
This commit is contained in:
2026-07-02 20:30:11 +08:00
parent 5dddc93233
commit 91c9e12c3c
9 changed files with 337 additions and 10 deletions
+13 -5
View File
@@ -9,7 +9,9 @@ import (
"path/filepath"
"strings"
"lmvpn/config"
"lmvpn/internal/config"
"lmvpn/internal/db"
"lmvpn/internal/vpn"
"github.com/gin-gonic/gin"
)
@@ -20,18 +22,24 @@ func main() {
log.Fatalf("加载配置失败: %v", err)
}
if err := db.Init(&cfg.Database); err != nil {
log.Fatalf("数据库初始化失败: %v", err)
}
r := gin.Default()
// 静态文件服务
r.GET("/ws", vpn.HandleWS)
fs := http.FileServer(http.Dir("./dist"))
// 中间件处理路由
r.Use(func(c *gin.Context) {
if strings.HasPrefix(c.Request.URL.Path, "/ws") {
return
}
if strings.HasPrefix(c.Request.URL.Path, "/api") {
c.Next() // 继续处理API请求
c.Next()
return
}
// 处理静态文件
fs.ServeHTTP(c.Writer, c.Request)
c.Abort()
})