From 3ae28b1f2091a1fef6d3e7a02e64e07c8690c1dc Mon Sep 17 00:00:00 2001 From: James Brechtel Date: Wed, 8 Jul 2026 21:32:03 -0400 Subject: [PATCH] Add adduser CLI command for creating users from the command line --- main.go | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/main.go b/main.go index ae3a230..a599225 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,8 @@ import ( "net/http" "os" + "golang.org/x/crypto/bcrypt" + "podstalk/handler" "podstalk/store" ) @@ -19,6 +21,11 @@ var templateFS embed.FS var staticFS embed.FS func main() { + if len(os.Args) > 1 && os.Args[1] == "adduser" { + runAddUser() + return + } + dbPath := os.Getenv("PODSTALK_DB") if dbPath == "" { dbPath = "podstalk.db" @@ -93,6 +100,38 @@ func main() { log.Fatal(http.ListenAndServe(addr, nil)) } +func runAddUser() { + if len(os.Args) != 4 { + log.Fatalf("Usage: podstalk adduser ") + } + + email := os.Args[2] + password := os.Args[3] + + dbPath := os.Getenv("PODSTALK_DB") + if dbPath == "" { + dbPath = "podstalk.db" + } + + st, err := store.New(dbPath) + if err != nil { + log.Fatalf("failed to open database: %v", err) + } + defer st.Close() + + hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) + if err != nil { + log.Fatalf("failed to hash password: %v", err) + } + + userID, err := st.CreateUser(email, string(hash)) + if err != nil { + log.Fatalf("failed to create user: %v", err) + } + + log.Printf("User created (id=%d)", userID) +} + func envOrDefault(key, def string) string { if v := os.Getenv(key); v != "" { return v