func addUser(c *gin.Context) { var user models.User if err := c.Bind(&user); err != nil { return } user.Created = time.Now() if err := database.Mysql.Insert(&user); err != nil { panic(err) } c.JSON(201, user) }
func doSetup() int { fmt.Print(` Hello! You will now be guided through a setup to: 1. Set up configuration for a MySQL/MariaDB database 2. Set up a path for your playbooks (auto-created) 3. Run database Migrations 4. Set up initial seamphore user & password `) var b []byte setup := util.NewConfig() for { setup.Scan() setup.GenerateCookieSecrets() var err error b, err = json.MarshalIndent(&setup, " ", "\t") if err != nil { panic(err) } fmt.Printf("\n Generated configuration:\n %v\n\n", string(b)) fmt.Print(" > Is this correct? (yes/no): ") var answer string fmt.Scanln(&answer) if answer == "yes" || answer == "y" { break } fmt.Println() setup = util.NewConfig() } fmt.Printf(" Running: mkdir -p %v..\n", setup.TmpPath) os.MkdirAll(setup.TmpPath, 0755) configPath := path.Join(setup.TmpPath, "/semaphore_config.json") fmt.Printf(" Configuration written to %v..\n", configPath) if err := ioutil.WriteFile(configPath, b, 0644); err != nil { panic(err) } fmt.Println(" Pinging database..") util.Config = setup if err := database.Connect(); err != nil { fmt.Printf("\n Cannot connect to database!\n %v\n", err.Error()) os.Exit(1) } fmt.Println("\n Running DB Migrations..") if err := database.MigrateAll(); err != nil { fmt.Printf("\n Database migrations failed!\n %v\n", err.Error()) os.Exit(1) } stdin := bufio.NewReader(os.Stdin) var user models.User user.Username = readNewline("\n\n > Username: "******" > Email: ", stdin) user.Email = strings.ToLower(user.Email) var existingUser models.User database.Mysql.SelectOne(&existingUser, "select * from user where email=? or username=?", user.Email, user.Username) if existingUser.ID > 0 { // user already exists fmt.Printf("\n Welcome back, %v! (a user with this username/email is already set up..)\n\n", existingUser.Name) } else { user.Name = readNewline(" > Your name: ", stdin) user.Password = readNewline(" > Password: "******"insert into user set name=?, username=?, email=?, password=?, created=NOW()", user.Name, user.Username, user.Email, pwdHash); err != nil { fmt.Printf(" Inserting user failed. If you already have a user, you can disregard this error.\n %v\n", err.Error()) os.Exit(1) } fmt.Printf("\n You are all setup %v!\n", user.Name) } fmt.Printf(" Re-launch this program pointing to the configuration file\n\n./semaphore -config %v\n\n", configPath) fmt.Printf(" To run as daemon:\n\nnohup ./semaphore -config %v &\n\n", configPath) fmt.Printf(" You can login with %v or %v.\n", user.Email, user.Username) return 0 }