github.com/kotovmak/go-admin@v1.1.1/adm/add.go (about)

     1  package main
     2  
     3  import (
     4  	"runtime"
     5  	"strings"
     6  
     7  	"github.com/kotovmak/go-admin/modules/auth"
     8  	"github.com/kotovmak/go-admin/modules/db"
     9  	"github.com/kotovmak/go-admin/modules/db/dialect"
    10  	"gopkg.in/ini.v1"
    11  )
    12  
    13  func addUser(cfgFile string) {
    14  
    15  	clear(runtime.GOOS)
    16  	cliInfo()
    17  
    18  	var (
    19  		driverName, host, port, dbFile, user, password,
    20  		database, schema, name, nickname, userPassword string
    21  	)
    22  
    23  	if cfgFile != "" {
    24  		cfgModel, err := ini.Load(cfgFile)
    25  
    26  		if err != nil {
    27  			panic(newError("wrong config file path"))
    28  		}
    29  
    30  		languageCfg, err := cfgModel.GetSection("language")
    31  
    32  		if err == nil {
    33  			setDefaultLangSet(languageCfg.Key("language").Value())
    34  		}
    35  
    36  		userCfg, err := cfgModel.GetSection("user")
    37  
    38  		if err == nil {
    39  			name = userCfg.Key("name").Value()
    40  			nickname = userCfg.Key("nickname").Value()
    41  			userPassword = userCfg.Key("password").Value()
    42  		}
    43  
    44  		dbCfgModel, exist := cfgModel.GetSection("database")
    45  
    46  		if exist == nil {
    47  			driverName = dbCfgModel.Key("driver").Value()
    48  			host = dbCfgModel.Key("host").Value()
    49  			user = dbCfgModel.Key("username").Value()
    50  			port = dbCfgModel.Key("port").Value()
    51  			dbFile = dbCfgModel.Key("file").Value()
    52  			password = dbCfgModel.Key("password").Value()
    53  			database = dbCfgModel.Key("database").Value()
    54  		}
    55  	}
    56  
    57  	conn := askForDBConnection(&dbInfo{
    58  		File:       dbFile,
    59  		DriverName: driverName,
    60  		Host:       host,
    61  		Port:       port,
    62  		User:       user,
    63  		Password:   password,
    64  		Schema:     schema,
    65  		Database:   database,
    66  	})
    67  
    68  	if name == "" {
    69  		name = promptWithDefault("user login name", "")
    70  	}
    71  
    72  	if nickname == "" {
    73  		nickname = promptWithDefault("user nickname", "")
    74  	}
    75  
    76  	if userPassword == "" {
    77  		userPassword = promptWithDefault("user password", "")
    78  	}
    79  
    80  	checkExist, err := db.WithDriver(conn).Table("goadmin_users").
    81  		Where("name", "=", name).
    82  		First()
    83  
    84  	if db.CheckError(err, db.QUERY) {
    85  		panic(err)
    86  	}
    87  
    88  	if checkExist != nil {
    89  		panic(newError("user record exists"))
    90  	}
    91  
    92  	_, err = db.WithDriver(conn).Table("goadmin_users").
    93  		Insert(dialect.H{
    94  			"name":     name,
    95  			"username": nickname,
    96  			"password": auth.EncodePassword([]byte(userPassword)),
    97  		})
    98  
    99  	if db.CheckError(err, db.INSERT) {
   100  		panic(err)
   101  	}
   102  
   103  	printSuccessInfo("Add admin user success~~🍺🍺")
   104  }
   105  
   106  func addPermission(cfgFile string) {
   107  
   108  	clear(runtime.GOOS)
   109  	cliInfo()
   110  
   111  	var (
   112  		driverName, host, port, dbFile, user, password,
   113  		database, schema, tablesStr string
   114  		tables []string
   115  	)
   116  
   117  	if cfgFile != "" {
   118  		cfgModel, err := ini.Load(cfgFile)
   119  
   120  		if err != nil {
   121  			panic(newError("wrong config file path"))
   122  		}
   123  
   124  		languageCfg, err := cfgModel.GetSection("language")
   125  
   126  		if err == nil {
   127  			setDefaultLangSet(languageCfg.Key("language").Value())
   128  		}
   129  
   130  		userCfg, err := cfgModel.GetSection("permission")
   131  
   132  		if err == nil {
   133  			tablesStr = userCfg.Key("tables").Value()
   134  		}
   135  
   136  		if tablesStr != "" {
   137  			tables = strings.Split(strings.TrimSpace(tablesStr), ",")
   138  		}
   139  
   140  		dbCfgModel, exist := cfgModel.GetSection("database")
   141  
   142  		if exist == nil {
   143  			driverName = dbCfgModel.Key("driver").Value()
   144  			host = dbCfgModel.Key("host").Value()
   145  			user = dbCfgModel.Key("username").Value()
   146  			port = dbCfgModel.Key("port").Value()
   147  			dbFile = dbCfgModel.Key("file").Value()
   148  			password = dbCfgModel.Key("password").Value()
   149  			database = dbCfgModel.Key("database").Value()
   150  		}
   151  	}
   152  
   153  	conn := askForDBConnection(&dbInfo{
   154  		File:       dbFile,
   155  		DriverName: driverName,
   156  		Host:       host,
   157  		Port:       port,
   158  		User:       user,
   159  		Password:   password,
   160  		Schema:     schema,
   161  		Database:   database,
   162  	})
   163  
   164  	if tablesStr == "" {
   165  		tablesStr = promptWithDefault("tables to generate, use comma to split", "")
   166  	}
   167  
   168  	if tablesStr == "" {
   169  		panic(newError("empty tables"))
   170  	}
   171  
   172  	tables = strings.Split(strings.TrimSpace(tablesStr), ",")
   173  
   174  	for _, table := range tables {
   175  		insertPermissionOfTable(conn, table)
   176  	}
   177  
   178  	printSuccessInfo("Add table permissions success~~🍺🍺")
   179  }
   180  
   181  func insertPermissionOfTable(conn db.Connection, table string) {
   182  	table = strings.ToLower(table)
   183  	insertPermissionInfoDB(conn, table+" "+getWord("Query"), table+"_query", "GET", "/info/"+table)
   184  	insertPermissionInfoDB(conn, table+" "+getWord("Show Edit Form Page"), table+"_show_edit", "GET",
   185  		"/info/"+table+"/edit")
   186  	insertPermissionInfoDB(conn, table+" "+getWord("Show Create Form Page"), table+"_show_create", "GET",
   187  		"/info/"+table+"/new")
   188  	insertPermissionInfoDB(conn, table+" "+getWord("Edit"), table+"_edit", "POST",
   189  		"/edit/"+table)
   190  	insertPermissionInfoDB(conn, table+" "+getWord("Create"), table+"_create", "POST",
   191  		"/new/"+table)
   192  	insertPermissionInfoDB(conn, table+" "+getWord("Delete"), table+"_delete", "POST",
   193  		"/delete/"+table)
   194  	insertPermissionInfoDB(conn, table+" "+getWord("Export"), table+"_export", "POST",
   195  		"/export/"+table)
   196  }
   197  
   198  func insertPermissionInfoDB(conn db.Connection, name, slug, httpMethod, httpPath string) {
   199  	checkExist, err := db.WithDriver(conn).Table("goadmin_permissions").
   200  		Where("slug", "=", slug).
   201  		First()
   202  
   203  	if db.CheckError(err, db.QUERY) {
   204  		panic(err)
   205  	}
   206  
   207  	if checkExist != nil {
   208  		return
   209  	}
   210  
   211  	_, err = db.WithDriver(conn).Table("goadmin_permissions").
   212  		Insert(dialect.H{
   213  			"name":        name,
   214  			"slug":        slug,
   215  			"http_method": httpMethod,
   216  			"http_path":   httpPath,
   217  		})
   218  
   219  	if db.CheckError(err, db.INSERT) {
   220  		panic(err)
   221  	}
   222  }