mirror of
https://github.com/hay-kot/homebox.git
synced 2024-12-24 15:56:31 +00:00
106 lines
2.2 KiB
Go
106 lines
2.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"text/tabwriter"
|
||
|
|
||
|
"github.com/google/uuid"
|
||
|
"github.com/hay-kot/git-web-template/backend/app/cli/reader"
|
||
|
"github.com/hay-kot/git-web-template/backend/internal/types"
|
||
|
"github.com/hay-kot/git-web-template/backend/pkgs/hasher"
|
||
|
"github.com/urfave/cli/v2"
|
||
|
)
|
||
|
|
||
|
func (a *app) UserCreate(c *cli.Context) error {
|
||
|
var defaultValidators = []reader.StringValidator{
|
||
|
reader.StringRequired,
|
||
|
reader.StringNoLeadingOrTrailingWhitespace,
|
||
|
}
|
||
|
// Get Flags
|
||
|
name := reader.ReadString("Name: ",
|
||
|
defaultValidators...,
|
||
|
)
|
||
|
password := reader.ReadString("Password: ",
|
||
|
defaultValidators...,
|
||
|
)
|
||
|
|
||
|
email := reader.ReadString("Email: ",
|
||
|
reader.StringRequired,
|
||
|
reader.StringNoLeadingOrTrailingWhitespace,
|
||
|
reader.StringContainsAt,
|
||
|
)
|
||
|
isSuper := reader.ReadBool("Is Superuser?")
|
||
|
|
||
|
pwHash, err := hasher.HashPassword(password)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
usr := types.UserCreate{
|
||
|
Name: name,
|
||
|
Email: email,
|
||
|
Password: pwHash,
|
||
|
IsSuperuser: isSuper,
|
||
|
}
|
||
|
|
||
|
_, err = a.repos.Users.Create(context.Background(), usr)
|
||
|
|
||
|
if err == nil {
|
||
|
fmt.Println("Super user created")
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (a *app) UserDelete(c *cli.Context) error {
|
||
|
// Get Flags
|
||
|
id := c.String("id")
|
||
|
uid := uuid.MustParse(id)
|
||
|
|
||
|
fmt.Printf("Deleting user with id: %s\n", id)
|
||
|
|
||
|
// Confirm Action
|
||
|
fmt.Printf("Are you sure you want to delete this user? (y/n) ")
|
||
|
var answer string
|
||
|
_, err := fmt.Scanln(&answer)
|
||
|
if answer != "y" || err != nil {
|
||
|
fmt.Println("Aborting")
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
err = a.repos.Users.Delete(context.Background(), uid)
|
||
|
|
||
|
if err == nil {
|
||
|
fmt.Printf("%v User(s) deleted (id=%v)\n", 1, id)
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (a *app) UserList(c *cli.Context) error {
|
||
|
fmt.Println("Superuser List")
|
||
|
|
||
|
users, err := a.repos.Users.GetAll(context.Background())
|
||
|
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
tabWriter := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
|
||
|
defer func(tabWriter *tabwriter.Writer) {
|
||
|
_ = tabWriter.Flush()
|
||
|
}(tabWriter)
|
||
|
|
||
|
_, err = fmt.Fprintln(tabWriter, "Id\tName\tEmail\tIsSuper")
|
||
|
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
for _, u := range users {
|
||
|
_, _ = fmt.Fprintf(tabWriter, "%v\t%s\t%s\t%v\n", u.ID, u.Name, u.Email, u.IsSuperuser)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|