156 lines
4.4 KiB
Go
156 lines
4.4 KiB
Go
package db
|
|
|
|
// ================================================================
|
|
// 全局配置
|
|
// ================================================================
|
|
|
|
// internal/db/repository.go
|
|
|
|
func GetGlobalConfig() (*GlobalConfig, error) {
|
|
var cfg GlobalConfig
|
|
err := DB.QueryRow(`
|
|
SELECT id, server_addr, server_port, token, admin_port,
|
|
log_level, log_max_days,
|
|
tcp_mux, tcp_mux_keepalive, heartbeat_interval, heartbeat_timeout, pool_count,
|
|
wire_protocol_v2
|
|
FROM global_config WHERE id = 1
|
|
`).Scan(
|
|
&cfg.ID, &cfg.ServerAddr, &cfg.ServerPort, &cfg.Token, &cfg.AdminPort,
|
|
&cfg.LogLevel, &cfg.LogMaxDays,
|
|
&cfg.TcpMux, &cfg.TcpMuxKeepalive,
|
|
&cfg.HeartbeatInterval, &cfg.HeartbeatTimeout, &cfg.PoolCount,
|
|
&cfg.WireProtocolV2,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
cfg.TcpMux = true
|
|
return &cfg, nil
|
|
}
|
|
|
|
func UpdateGlobalConfig(cfg *GlobalConfig) error {
|
|
_, err := DB.Exec(`
|
|
UPDATE global_config SET
|
|
server_addr = ?, server_port = ?, token = ?, admin_port = ?,
|
|
log_level = ?, log_max_days = ?,
|
|
tcp_mux = 1,
|
|
tcp_mux_keepalive = ?, heartbeat_interval = ?, heartbeat_timeout = ?, pool_count = ?,
|
|
wire_protocol_v2 = ?,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = 1
|
|
`, cfg.ServerAddr, cfg.ServerPort, cfg.Token, cfg.AdminPort,
|
|
cfg.LogLevel, cfg.LogMaxDays,
|
|
cfg.TcpMuxKeepalive, cfg.HeartbeatInterval, cfg.HeartbeatTimeout, cfg.PoolCount,
|
|
cfg.WireProtocolV2)
|
|
return err
|
|
}
|
|
|
|
// ================================================================
|
|
// 隧道管理
|
|
// ================================================================
|
|
|
|
func GetProxies() ([]Proxy, error) {
|
|
rows, err := DB.Query(`
|
|
SELECT id, name, type, local_ip, local_port, remote_port, enabled
|
|
FROM proxies ORDER BY id
|
|
`)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var proxies []Proxy
|
|
for rows.Next() {
|
|
var p Proxy
|
|
err := rows.Scan(&p.ID, &p.Name, &p.Type, &p.LocalIP, &p.LocalPort, &p.RemotePort, &p.Enabled)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
proxies = append(proxies, p)
|
|
}
|
|
return proxies, rows.Err()
|
|
}
|
|
|
|
func GetProxy(id int) (*Proxy, error) {
|
|
var p Proxy
|
|
err := DB.QueryRow(`
|
|
SELECT id, name, type, local_ip, local_port, remote_port, enabled
|
|
FROM proxies WHERE id = ?
|
|
`, id).Scan(&p.ID, &p.Name, &p.Type, &p.LocalIP, &p.LocalPort, &p.RemotePort, &p.Enabled)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &p, nil
|
|
}
|
|
|
|
func CreateProxy(p *Proxy) error {
|
|
result, err := DB.Exec(`
|
|
INSERT INTO proxies (name, type, local_ip, local_port, remote_port, enabled)
|
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
`, p.Name, p.Type, p.LocalIP, p.LocalPort, p.RemotePort, p.Enabled)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
id, _ := result.LastInsertId()
|
|
p.ID = int(id)
|
|
return nil
|
|
}
|
|
|
|
func UpdateProxy(p *Proxy) error {
|
|
_, err := DB.Exec(`
|
|
UPDATE proxies SET
|
|
name = ?, type = ?, local_ip = ?, local_port = ?, remote_port = ?, enabled = ?,
|
|
updated_at = CURRENT_TIMESTAMP
|
|
WHERE id = ?
|
|
`, p.Name, p.Type, p.LocalIP, p.LocalPort, p.RemotePort, p.Enabled, p.ID)
|
|
return err
|
|
}
|
|
|
|
func DeleteProxy(id int) error {
|
|
_, err := DB.Exec("DELETE FROM proxies WHERE id = ?", id)
|
|
return err
|
|
}
|
|
|
|
// ================================================================
|
|
// 用户管理
|
|
// ================================================================
|
|
|
|
func GetUserByUsername(username string) (*User, error) {
|
|
var u User
|
|
err := DB.QueryRow(`
|
|
SELECT id, username, password_hash, created_at
|
|
FROM users WHERE username = ?
|
|
`, username).Scan(&u.ID, &u.Username, &u.PasswordHash, &u.CreatedAt)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &u, nil
|
|
}
|
|
|
|
func UserExists(username string) (bool, error) {
|
|
var count int
|
|
err := DB.QueryRow("SELECT COUNT(*) FROM users WHERE username = ?", username).Scan(&count)
|
|
return count > 0, err
|
|
}
|
|
|
|
func CreateUser(username, passwordHash string) error {
|
|
_, err := DB.Exec(`
|
|
INSERT INTO users (username, password_hash) VALUES (?, ?)
|
|
`, username, passwordHash)
|
|
return err
|
|
}
|
|
|
|
func UpdateUserPassword(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)
|
|
return count, err
|
|
}
|