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
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
|
|
}
|