2021-08-28 13:44:41 +02:00
|
|
|
package cmd
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"github.com/ansible-semaphore/semaphore/db"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"os"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
for _, cmd := range []*cobra.Command{userChangeByLoginCmd, userChangeByEmailCmd} {
|
|
|
|
cmd.PersistentFlags().StringVar(&targetUserArgs.login, "login", "", "User login")
|
|
|
|
cmd.PersistentFlags().StringVar(&targetUserArgs.name, "name", "", "User's new name")
|
|
|
|
cmd.PersistentFlags().StringVar(&targetUserArgs.email, "email", "", "User's new email")
|
|
|
|
cmd.PersistentFlags().StringVar(&targetUserArgs.password, "password", "", "User's new password")
|
|
|
|
cmd.PersistentFlags().BoolVar(&targetUserArgs.admin, "admin", false, "Mark user as admin")
|
|
|
|
userCmd.AddCommand(cmd)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func applyChangeUserArgsForUser(user db.User, store db.Store) {
|
|
|
|
if targetUserArgs.name != "" {
|
|
|
|
user.Name = targetUserArgs.name
|
|
|
|
}
|
|
|
|
|
|
|
|
if targetUserArgs.email != "" {
|
|
|
|
user.Email = targetUserArgs.email
|
|
|
|
}
|
|
|
|
|
|
|
|
if targetUserArgs.login != "" {
|
|
|
|
user.Username = targetUserArgs.login
|
|
|
|
}
|
|
|
|
|
|
|
|
if targetUserArgs.name != "" {
|
|
|
|
user.Name = targetUserArgs.name
|
|
|
|
}
|
|
|
|
|
2021-08-28 18:24:54 +02:00
|
|
|
if targetUserArgs.admin {
|
2021-08-28 13:44:41 +02:00
|
|
|
user.Admin = true
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := store.UpdateUser(db.UserWithPwd{
|
|
|
|
User: user,
|
|
|
|
Pwd: targetUserArgs.password,
|
|
|
|
}); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Printf("User %s <%s> changed!\n", user.Username, user.Email)
|
|
|
|
}
|
|
|
|
|
|
|
|
var userChangeByLoginCmd = &cobra.Command{
|
|
|
|
Use: "change-by-login",
|
|
|
|
Short: "Change user found by login",
|
|
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
|
|
|
|
ok := true
|
|
|
|
|
|
|
|
if targetUserArgs.login == "" {
|
|
|
|
fmt.Println("Argument --login required")
|
|
|
|
ok = false
|
|
|
|
}
|
|
|
|
|
|
|
|
if !ok {
|
|
|
|
fmt.Println("Use command `semaphore user change-by-login --help` for details.")
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
store := createStore()
|
|
|
|
defer store.Close()
|
|
|
|
|
|
|
|
user, err := store.GetUserByLoginOrEmail(targetUserArgs.login, "")
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
applyChangeUserArgsForUser(user, store)
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
var userChangeByEmailCmd = &cobra.Command{
|
|
|
|
Use: "change-by-email",
|
|
|
|
Short: "Change user found by email",
|
|
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
|
|
|
|
ok := true
|
|
|
|
|
|
|
|
if targetUserArgs.email == "" {
|
|
|
|
fmt.Println("Argument --email required")
|
|
|
|
ok = false
|
|
|
|
}
|
|
|
|
|
|
|
|
if !ok {
|
|
|
|
fmt.Println("Use command `semaphore user change-by-email --help` for details.")
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
store := createStore()
|
|
|
|
defer store.Close()
|
|
|
|
|
|
|
|
user, err := store.GetUserByLoginOrEmail("", targetUserArgs.email)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
applyChangeUserArgsForUser(user, store)
|
|
|
|
},
|
|
|
|
}
|