77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
|
package backup
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
"fmt"
|
||
|
"log"
|
||
|
_ "github.com/go-sql-driver/mysql"
|
||
|
"pixelridgesoftworks.com/BackGo/config"
|
||
|
)
|
||
|
|
||
|
type DBManager struct {
|
||
|
DB *sql.DB
|
||
|
}
|
||
|
|
||
|
// NewDBManager creates a new DBManager instance using the provided configuration
|
||
|
func NewDBManager(cfg *config.Config) *DBManager {
|
||
|
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true",
|
||
|
cfg.MySQLUser, cfg.MySQLPassword, cfg.MySQLHost, cfg.MySQLPort, cfg.MySQLDBName)
|
||
|
|
||
|
db, err := sql.Open("mysql", dsn)
|
||
|
if err != nil {
|
||
|
log.Fatalf("Could not connect to MySQL: %v", err)
|
||
|
}
|
||
|
|
||
|
if err := db.Ping(); err != nil {
|
||
|
log.Fatalf("Could not ping MySQL: %v", err)
|
||
|
}
|
||
|
|
||
|
manager := &DBManager{DB: db}
|
||
|
manager.InitDB()
|
||
|
|
||
|
return manager
|
||
|
}
|
||
|
|
||
|
// InitDB initializes the database tables
|
||
|
func (manager *DBManager) InitDB() {
|
||
|
// Creating a tokens table
|
||
|
createTokensTableSQL := `CREATE TABLE IF NOT EXISTS tokens (
|
||
|
token VARCHAR(255) PRIMARY KEY,
|
||
|
hostname VARCHAR(255) NOT NULL UNIQUE
|
||
|
);`
|
||
|
|
||
|
if _, err := manager.DB.Exec(createTokensTableSQL); err != nil {
|
||
|
log.Fatalf("Failed to create tokens table: %v", err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (manager *DBManager) AddToken(token, hostname string) error {
|
||
|
_, err := manager.DB.Exec("INSERT INTO tokens (token, hostname) VALUES (?, ?)", token, hostname)
|
||
|
if err != nil {
|
||
|
log.Printf("Failed to add token: %v", err)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (manager *DBManager) VerifyToken(token string) bool {
|
||
|
var retrievedToken string
|
||
|
err := manager.DB.QueryRow("SELECT token FROM tokens WHERE token = ?", token).Scan(&retrievedToken)
|
||
|
if err != nil {
|
||
|
if err != sql.ErrNoRows {
|
||
|
log.Printf("Failed to verify token: %v", err)
|
||
|
}
|
||
|
return false
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func (manager *DBManager) RemoveToken(token string) error {
|
||
|
_, err := manager.DB.Exec("DELETE FROM tokens WHERE token = ?", token)
|
||
|
if err != nil {
|
||
|
log.Printf("Failed to remove token: %v", err)
|
||
|
return err
|
||
|
}
|
||
|
return nil
|
||
|
}
|