From deb4b0509b7d6638da2472e5d7761740d5a437ab Mon Sep 17 00:00:00 2001 From: Vicente Ferrari Smith Date: Sun, 10 May 2026 15:03:26 +0200 Subject: [PATCH] create admin --- cmd/party/create_admin.go | 65 +++++++++++++++++++++++++++++++++++++++ cmd/party/main.go | 5 +++ 2 files changed, 70 insertions(+) create mode 100644 cmd/party/create_admin.go diff --git a/cmd/party/create_admin.go b/cmd/party/create_admin.go new file mode 100644 index 0000000..692a09a --- /dev/null +++ b/cmd/party/create_admin.go @@ -0,0 +1,65 @@ +package main + +import ( + "flag" + "fmt" + "os" + + "party.at/party/cmd/party/common" + "party.at/party/internal/data" +) + +func runCreateAdmin(args []string) { + fs := flag.NewFlagSet("create-admin", flag.ExitOnError) + email := fs.String("email", "", "Admin email (required)") + password := fs.String("password", "", "Admin password (required)") + name := fs.String("name", "", "Admin name (required)") + fs.Parse(args) + + if *email == "" || *password == "" || *name == "" { + fmt.Fprintln(os.Stderr, "usage: party create-admin -email EMAIL -password PASSWORD -name NAME") + os.Exit(1) + } + + var cfg common.Config + cfg.DB.DSN = os.Getenv("PARTY_DB_DSN") + cfg.DB.MaxOpenConns = 5 + cfg.DB.MaxIdleConns = 5 + cfg.DB.MaxIdleTime = "15m" + + db, err := openDB(cfg) + if err != nil { + fmt.Fprintf(os.Stderr, "db: %v\n", err) + os.Exit(1) + } + defer db.Close() + + models := data.NewModels(db) + + user := &data.User{ + Email: *email, + Name: *name, + Activated: true, + } + + userIdentity := &data.UserIdentity{ + ProviderID: int64(data.ProviderLocal), + ProviderUserID: *email, + } + if err := userIdentity.Password.Set(*password); err != nil { + fmt.Fprintf(os.Stderr, "password: %v\n", err) + os.Exit(1) + } + + if err := models.Users.ExecuteRegistrationTx(user, userIdentity); err != nil { + fmt.Fprintf(os.Stderr, "create user: %v\n", err) + os.Exit(1) + } + + if err := models.Roles.AssignToUser(user.ID, data.RoleAdmin); err != nil { + fmt.Fprintf(os.Stderr, "assign role: %v\n", err) + os.Exit(1) + } + + fmt.Printf("created admin: id=%d email=%s\n", user.ID, user.Email) +} diff --git a/cmd/party/main.go b/cmd/party/main.go index 7ac4d2d..739461f 100644 --- a/cmd/party/main.go +++ b/cmd/party/main.go @@ -41,6 +41,11 @@ var upgrader = websocket.Upgrader{ func main() { + if len(os.Args) > 1 && os.Args[1] == "create-admin" { + runCreateAdmin(os.Args[2:]) + return + } + var cfg common.Config flag.IntVar(&cfg.Port, "port", 4100, "API server port")