加入首次使用的引导页、写入readme文件

This commit is contained in:
2026-07-23 22:17:48 +08:00
parent 892fc98be2
commit 55fb5d49f7
11 changed files with 766 additions and 1828 deletions
+11 -18
View File
@@ -5,13 +5,11 @@ import (
"database/sql"
"encoding/hex"
"log"
"sync"
_ "modernc.org/sqlite"
)
var DB *sql.DB
var dbInitOnce sync.Once
// ===== 全局配置表(A表)=====
type GlobalConfig struct {
@@ -90,7 +88,6 @@ func InitDB() error {
return err
}
// 确保全局配置有一行数据
var count int
DB.QueryRow("SELECT COUNT(*) FROM global_config").Scan(&count)
if count == 0 {
@@ -124,7 +121,7 @@ func InitDB() error {
return err
}
// 🟢 新增:应用配置表(用于存储 JWT 密钥等全局配置
// 应用配置表(JWT密钥等)
_, err = DB.Exec(`
CREATE TABLE IF NOT EXISTS app_config (
key TEXT PRIMARY KEY,
@@ -136,7 +133,6 @@ func InitDB() error {
return err
}
// 🟢 确保 JWT 密钥存在
if err := ensureJwtSecret(); err != nil {
return err
}
@@ -145,25 +141,20 @@ func InitDB() error {
return nil
}
// ===== 🟢 新增:JWT 密钥管理 =====
// ensureJwtSecret 检查 app_config 表里是否有 jwt_secret,没有则生成一个
// ===== JWT 密钥管理 =====
func ensureJwtSecret() error {
var value string
err := DB.QueryRow("SELECT value FROM app_config WHERE key = 'jwt_secret'").Scan(&value)
if err == nil && value != "" {
// 密钥已存在
return nil
}
// 生成 32 字节随机密钥
bytes := make([]byte, 32)
if _, err := rand.Read(bytes); err != nil {
return err
}
secret := hex.EncodeToString(bytes)
// 存入数据库
_, err = DB.Exec(`
INSERT INTO app_config (key, value) VALUES ('jwt_secret', ?)
`, secret)
@@ -174,7 +165,6 @@ func ensureJwtSecret() error {
return nil
}
// GetJwtSecret 从数据库读取 JWT 密钥
func GetJwtSecret() (string, error) {
var secret string
err := DB.QueryRow("SELECT value FROM app_config WHERE key = 'jwt_secret'").Scan(&secret)
@@ -199,17 +189,15 @@ func GetGlobalConfig() (*GlobalConfig, error) {
if err != nil {
return nil, err
}
// 🟢 强制开启 tcpMux,忽略数据库中存储的值
cfg.TcpMux = true
return &cfg, nil
}
func UpdateGlobalConfig(cfg *GlobalConfig) error {
// 忽略前端传过来的 TcpMux,强制保持为 true
_, err := DB.Exec(`
UPDATE global_config SET
server_addr = ?, server_port = ?, token = ?, log_level = ?, log_max_days = ?,
tcp_mux = 1, -- 🟢 强制写死为 1
tcp_mux = 1,
tcp_mux_keepalive = ?, heartbeat_interval = ?, heartbeat_timeout = ?, pool_count = ?,
updated_at = CURRENT_TIMESTAMP
WHERE id = 1
@@ -238,12 +226,9 @@ func GetProxies() ([]Proxy, error) {
}
proxies = append(proxies, p)
}
// 🟢 关键:检查遍历过程中是否有错误
if err = rows.Err(); err != nil {
return nil, err
}
return proxies, nil
}
@@ -307,6 +292,14 @@ func CreateUser(username, passwordHash string) error {
return err
}
func UpdatePassword(username, passwordHash string) error {
_, err := DB.Exec(`
UPDATE users SET password_hash = ?, updated_at = CURRENT_TIMESTAMP
WHERE username = ?
`, passwordHash, username)
return err
}
func CountUsers() (int, error) {
var count int
err := DB.QueryRow("SELECT COUNT(*) FROM users").Scan(&count)