2018-10-30 20:08:48 +01:00
|
|
|
package cli
|
2018-09-26 14:44:13 +02:00
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
|
|
"github.com/urfave/cli"
|
|
|
|
"github.com/usefathom/fathom/pkg/datastore"
|
|
|
|
"github.com/usefathom/fathom/pkg/models"
|
|
|
|
)
|
|
|
|
|
|
|
|
var userCmd = cli.Command{
|
|
|
|
Name: "user",
|
|
|
|
Usage: "manage registered admin users",
|
|
|
|
Action: userAdd,
|
|
|
|
Subcommands: []cli.Command{
|
|
|
|
cli.Command{
|
|
|
|
Name: "add",
|
|
|
|
Aliases: []string{"register"},
|
|
|
|
Action: userAdd,
|
|
|
|
Flags: []cli.Flag{
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "email, e",
|
|
|
|
Usage: "user email",
|
|
|
|
},
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "password, p",
|
|
|
|
Usage: "user password",
|
|
|
|
},
|
|
|
|
cli.BoolFlag{
|
|
|
|
Name: "skip-bcrypt",
|
|
|
|
Usage: "store password string as-is, skipping bcrypt",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
cli.Command{
|
|
|
|
Name: "delete",
|
|
|
|
Action: userDelete,
|
|
|
|
Flags: []cli.Flag{
|
|
|
|
cli.StringFlag{
|
|
|
|
Name: "email, e",
|
|
|
|
Usage: "user email",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
func userAdd(c *cli.Context) error {
|
|
|
|
email := c.String("email")
|
|
|
|
if email == "" {
|
|
|
|
return errors.New("Invalid arguments: missing email")
|
|
|
|
}
|
|
|
|
|
|
|
|
password := c.String("password")
|
|
|
|
if password == "" {
|
|
|
|
return errors.New("Invalid arguments: missing password")
|
|
|
|
}
|
|
|
|
|
|
|
|
user := models.NewUser(email, password)
|
|
|
|
|
|
|
|
// set password manually if --skip-bcrypt was given
|
|
|
|
// this is used to supply an already encrypted password string
|
|
|
|
if c.Bool("skip-bcrypt") {
|
|
|
|
user.Password = password
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := app.database.SaveUser(&user); err != nil {
|
|
|
|
return fmt.Errorf("Error creating user: %s", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Infof("Created user %s", user.Email)
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func userDelete(c *cli.Context) error {
|
|
|
|
email := c.String("email")
|
|
|
|
if email == "" {
|
|
|
|
return errors.New("Invalid arguments: missing email")
|
|
|
|
}
|
|
|
|
|
|
|
|
user, err := app.database.GetUserByEmail(email)
|
|
|
|
if err != nil {
|
|
|
|
if err == datastore.ErrNoResults {
|
|
|
|
return fmt.Errorf("No user with email %s", email)
|
|
|
|
}
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := app.database.DeleteUser(user); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Infof("Deleted user %s", user.Email)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|