You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

73 lines
2.7 KiB

package admin
import (
"fmt"
"git.devices.local/mawas/golang-api-skeleton/lib/common"
"git.devices.local/mawas/golang-api-skeleton/lib/config"
"git.devices.local/mawas/golang-api-skeleton/lib/database"
"git.devices.local/mawas/golang-api-skeleton/models"
"git.devices.local/mawas/golang-api-skeleton/repositories"
"git.devices.local/mawas/golang-api-skeleton/services"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
func Command(appName string, cfgFile string, flagCfg map[string]interface{}) *cobra.Command {
var username, firstname, lastname, email string
cmd := &cobra.Command{
Use: "admin",
Short: "Create admin user if non existent",
Long: "Create admin user if non existent",
// SilenceUsage: true,
// SilenceErrors: true,
DisableAutoGenTag: true,
RunE: func(cmd *cobra.Command, args []string) error {
return createAdminUser(appName, cfgFile, flagCfg, username, firstname, lastname, email)
},
}
cmd.Flags().StringVarP(&username, "username", "U", "admin", "desired admin user name")
cmd.Flags().StringVarP(&firstname, "firstname", "F", "", "admin user fistname")
if err := cmd.MarkFlagRequired("firstname"); err != nil {
panic(err)
}
cmd.Flags().StringVarP(&lastname, "lastname", "L", "", "admin user lastname")
if err := cmd.MarkFlagRequired("lastname"); err != nil {
panic(err)
}
cmd.Flags().StringVarP(&email, "email", "M", "", "admin user email address")
if err := cmd.MarkFlagRequired("email"); err != nil {
panic(err)
}
return cmd
}
func createAdminUser(appName, cfgFile string, flagCfg map[string]interface{}, username, firstname, lastname, email string) error {
if err := config.Initialize(appName, cfgFile, flagCfg); err != nil {
return fmt.Errorf("config:%v", err)
}
db, err := database.Connect(database.Credentials{
Host: viper.GetString("database.host"),
Port: viper.GetInt("database.port"),
Dialect: viper.GetString("database.dialect"),
Database: viper.GetString("database.database"),
User: viper.GetString("database.user"),
Password: viper.GetString("database.password"),
MaxOpenConn: viper.GetInt("database.port"),
MaxIdleConn: viper.GetInt("database.port"),
MaxLifeTime: viper.GetInt("database.port"),
Debug: true,
})
if err != nil {
return fmt.Errorf("database:%v", err)
}
if err := db.AutoMigrate(&models.User{}); err != nil {
return fmt.Errorf("database:%v", err)
}
userRepo := repositories.NewUserRepository(db, common.CLIUserID, common.CLIUsername, nil)
userService := services.NewUserService(userRepo)
adminUser := services.NewUser(username, firstname, lastname, email)
adminUser.Active = true
_, err = userService.Create([]*models.User{&adminUser})
return err
}