hmn/src/admintools/admintools.go

63 lines
1.4 KiB
Go
Raw Normal View History

2021-05-04 13:22:15 +00:00
package admintools
import (
"context"
"errors"
"fmt"
"os"
"git.handmade.network/hmn/hmn/src/auth"
"git.handmade.network/hmn/hmn/src/db"
"git.handmade.network/hmn/hmn/src/website"
"github.com/jackc/pgx/v4"
"github.com/spf13/cobra"
)
func init() {
setPasswordCommand := &cobra.Command{
Use: "setpassword [username] [new password]",
Short: "Replace a user's password",
Run: func(cmd *cobra.Command, args []string) {
if len(args) < 2 {
fmt.Printf("You must provide a username and a password.\n\n")
cmd.Usage()
os.Exit(1)
}
username := args[0]
password := args[1]
ctx := context.Background()
conn := db.NewConnPool(1, 1)
defer conn.Close()
row := conn.QueryRow(ctx, "SELECT id, username FROM auth_user WHERE lower(username) = lower($1)", username)
var id int
var canonicalUsername string
err := row.Scan(&id, &canonicalUsername)
if err != nil {
if errors.Is(err, pgx.ErrNoRows) {
fmt.Printf("User '%s' not found\n", username)
os.Exit(1)
} else {
panic(err)
}
}
hashedPassword, err := auth.HashPassword(password)
if err != nil {
panic(err)
}
err = auth.UpdatePassword(ctx, conn, canonicalUsername, hashedPassword)
if err != nil {
panic(err)
}
fmt.Printf("Successfully updated password for '%s'\n", canonicalUsername)
},
}
website.WebsiteCommand.AddCommand(setPasswordCommand)
}