Skip to content

Commit

Permalink
Merge pull request #139 from usefathom/cli-user-management
Browse files Browse the repository at this point in the history
rework user cli management
  • Loading branch information
dannyvankooten authored Sep 26, 2018
2 parents bbdf67f + fe62c65 commit cce5d1d
Show file tree
Hide file tree
Showing 6 changed files with 109 additions and 59 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ For getting a development version of Fathom up & running, go through the followi
1. Get code: `git clone https://github.com/usefathom/fathom.git $GOPATH/src/github.com/usefathom/fathom`
1. Compile into binary & prepare assets: `make build`
1. (Optional) Set your [custom configuration values](https://github.com/usefathom/fathom/wiki/Configuration-file).
1. Register your user account: `fathom register --email=<email> --password=<password>`
1. Register your user account: `fathom user add --email=<email> --password=<password>`
1. Start the webserver: `fathom server` and then visit **http://localhost:8080** to access your analytics dashboard.

To install and run Fathom in production, [have a look at the installation instructions](https://github.com/usefathom/fathom/wiki/Installing-&-running-Fathom).
Expand Down
2 changes: 1 addition & 1 deletion cmd/fathom/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func main() {
app.After = after
app.Commands = []cli.Command{
serverCmd,
registerCmd,
userCmd,
statsCmd,
}

Expand Down
57 changes: 0 additions & 57 deletions cmd/fathom/register.go

This file was deleted.

99 changes: 99 additions & 0 deletions cmd/fathom/user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
package main

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
}
1 change: 1 addition & 0 deletions pkg/datastore/datastore.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ type Datastore interface {
GetUser(int64) (*models.User, error)
GetUserByEmail(string) (*models.User, error)
SaveUser(*models.User) error
DeleteUser(*models.User) error
CountUsers() (int64, error)

// site stats
Expand Down
7 changes: 7 additions & 0 deletions pkg/datastore/sqlstore/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,13 @@ func (db *sqlstore) SaveUser(u *models.User) error {
return nil
}

// DeleteUser deletes the user in the datastore
func (db *sqlstore) DeleteUser(user *models.User) error {
query := db.Rebind("DELETE FROM users WHERE id = ?")
_, err := db.Exec(query, user.ID)
return err
}

// CountUsers returns the number of users
func (db *sqlstore) CountUsers() (int64, error) {
var c int64
Expand Down

0 comments on commit cce5d1d

Please sign in to comment.