BackGo/pkg/backup/database-manager.go

77 lines
1.9 KiB
Go

package backup
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
"git.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
}