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 }