Files
ersteller/starter/cli/create-user.go
T
Achim Rohn a15ca501b8 Add authentication, styling needs to be fixed
# Conflicts:
#	starter/ent/runtime.go
#	starter/go.mod
#	starter/go.sum
#	starter/routes/routing.go
2026-03-21 14:00:47 +00:00

78 lines
2.0 KiB
Go

package main
import (
"context"
"flag"
"log"
"time"
"entgo.io/ent/dialect"
"git.gorlug.de/code/ersteller/starter/ent"
"git.gorlug.de/code/ersteller/starter/ent/user"
"git.gorlug.de/code/ersteller/starter/env"
"golang.org/x/crypto/bcrypt"
)
// This CLI creates a new user with email and password, or changes an existing user's password.
func main() {
email := flag.String("email", "", "User email (required)")
password := flag.String("password", "", "User password (required)")
changePassword := flag.Bool("change-password", false, "Change password for existing user")
flag.Parse()
if *email == "" || *password == "" {
log.Fatal("Both -email and -password flags are required")
}
environment := env.LoadEnvironment()
// Open mediator database client
dbClient, err := ent.Open(dialect.SQLite, environment.DatabaseUrl, ent.Log(log.Println), ent.Debug())
if err != nil {
log.Fatalf("failed opening mediator DB: %v", err)
}
defer dbClient.Close()
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
// Hash the password
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(*password), bcrypt.DefaultCost)
if err != nil {
log.Fatalf("failed to hash password: %v", err)
}
if *changePassword {
// Change password for existing user
u, err := dbClient.User.
Query().
Where(user.EmailEQ(*email)).
Only(ctx)
if err != nil {
log.Fatalf("failed to find user with email %s: %v", *email, err)
}
u, err = u.
Update().
SetPasswordHash(string(hashedPassword)).
Save(ctx)
if err != nil {
log.Fatalf("failed to update password: %v", err)
}
log.Printf("Successfully changed password for user: ID=%d, Email=%s\n", u.ID, u.Email)
} else {
// Create the user
u, err := dbClient.User.
Create().
SetEmail(*email).
SetPasswordHash(string(hashedPassword)).
Save(ctx)
if err != nil {
log.Fatalf("failed to create user: %v", err)
}
log.Printf("Successfully created user: ID=%d, Email=%s\n", u.ID, u.Email)
}
}