diff --git a/cmd/root.go b/cmd/root.go index 77c6ee7..f249d86 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -2,14 +2,13 @@ package cmd import ( "fmt" + "github.com/spf13/cobra" "os" "path/filepath" - "strings" - - "github.com/spf13/cobra" "stackroost/config" "stackroost/internal" "stackroost/internal/logger" + "strings" ) var rootCmd = &cobra.Command{ @@ -128,6 +127,11 @@ var createDomainCmd = &cobra.Command{ os.Exit(1) } + if err := internal.CreateMySQLUserAndDatabase(username, password); err != nil { + logger.Error(fmt.Sprintf("Database setup failed for %s: %v", username, err)) + os.Exit(1) + } + logger.Success("Configuration file created") filename := fmt.Sprintf("%s%s", domain, configGen.GetFileExtension()) diff --git a/internal/database.go b/internal/database.go new file mode 100644 index 0000000..930cc45 --- /dev/null +++ b/internal/database.go @@ -0,0 +1,22 @@ +package internal + +import ( + "fmt" + "stackroost/internal/logger" +) +func CreateMySQLUserAndDatabase(username, password string) error { + logger.Info(fmt.Sprintf("Creating MySQL user and database for '%s'", username)) + + createUserCmd := fmt.Sprintf(`CREATE USER IF NOT EXISTS '%s'@'localhost' IDENTIFIED BY '%s';`, username, password) + createDBCmd := fmt.Sprintf(`CREATE DATABASE IF NOT EXISTS %s;`, username) + grantCmd := fmt.Sprintf(`GRANT ALL PRIVILEGES ON %s.* TO '%s'@'localhost';`, username, username) + flushCmd := `FLUSH PRIVILEGES;` + fullSQL := fmt.Sprintf("%s %s %s %s", createUserCmd, createDBCmd, grantCmd, flushCmd) + mysqlCmd := []string{"-e", fullSQL} + if err := RunCommand("sudo", append([]string{"mysql"}, mysqlCmd...)...); err != nil { + return fmt.Errorf("failed to create MySQL user or database: %v", err) + } + + logger.Success(fmt.Sprintf("MySQL user and database '%s' created", username)) + return nil +}