78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
package storage
|
|
|
|
import (
|
|
"database/sql"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
type Database struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func InitDB() Database {
|
|
const dbPath = "/root/database/license.db"
|
|
|
|
// 确保目录存在
|
|
_ = os.MkdirAll(filepath.Dir(dbPath), 0700)
|
|
|
|
db, _ := sql.Open("sqlite3", dbPath)
|
|
|
|
db.Exec(`CREATE TABLE IF NOT EXISTS activations (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
machine_id TEXT UNIQUE,
|
|
license TEXT,
|
|
activated INTEGER
|
|
)`)
|
|
db.Exec(`CREATE TABLE IF NOT EXISTS generations (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
machine_id TEXT UNIQUE,
|
|
license TEXT
|
|
)`)
|
|
|
|
/* ➊ 额外表:持久化私钥(仅一行) */
|
|
db.Exec(`CREATE TABLE IF NOT EXISTS private (
|
|
id INTEGER PRIMARY KEY,
|
|
key TEXT
|
|
)`)
|
|
|
|
return Database{db}
|
|
}
|
|
|
|
func (d Database) HasActivated(machineID string) bool {
|
|
row := d.db.QueryRow("SELECT activated FROM activations WHERE machine_id = ?", machineID)
|
|
var activated int
|
|
err := row.Scan(&activated)
|
|
return err == nil && activated == 1
|
|
}
|
|
|
|
func (d Database) SaveActivation(machineID string, licenseText string) {
|
|
d.db.Exec("INSERT OR REPLACE INTO activations(machine_id, license, activated) VALUES (?, ?, 1)",
|
|
machineID, licenseText)
|
|
}
|
|
|
|
func (d Database) HasGenerated(machineID string) bool {
|
|
row := d.db.QueryRow("SELECT license FROM generations WHERE machine_id = ?", machineID)
|
|
var license string
|
|
err := row.Scan(&license)
|
|
return err == nil
|
|
}
|
|
|
|
func (d Database) SaveGenerated(machineID string, licenseText string) {
|
|
d.db.Exec("INSERT OR REPLACE INTO generations(machine_id, license) VALUES (?, ?)",
|
|
machineID, licenseText)
|
|
}
|
|
|
|
/* ===== 新增两个工具方法 ===== */
|
|
func (d Database) GetPrivateKey() (string, bool) {
|
|
row := d.db.QueryRow("SELECT key FROM private WHERE id = 1")
|
|
var key string
|
|
return key, row.Scan(&key) == nil
|
|
}
|
|
|
|
func (d Database) SavePrivateKey(key string) {
|
|
d.db.Exec("INSERT OR REPLACE INTO private(id, key) VALUES (1, ?)", key)
|
|
}
|