Add authentication, styling needs to be fixed
# Conflicts: # starter/ent/runtime.go # starter/go.mod # starter/go.sum # starter/routes/routing.go
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user