feat(cli): adiciona comando para reset de senha de usuários
Implementa comando CLI que permite resetar a senha de usuários diretamente no banco de dados para casos de recuperação de acesso. Funcionalidades: - Conecta com PostgreSQL usando pgx - Gera hash bcrypt da nova senha com pepper - Atualiza senha do usuário por email - Valida existência do usuário Uso: go run cmd/reset_password/main.go Email padrão: usuario@saveinmed.com Senha padrão: senha123
This commit is contained in:
parent
dca3725864
commit
d8073629a6
1 changed files with 56 additions and 0 deletions
56
backend/cmd/reset_password/main.go
Normal file
56
backend/cmd/reset_password/main.go
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
_ "github.com/jackc/pgx/v5/stdlib"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
|
||||
"github.com/saveinmed/backend-go/internal/config"
|
||||
)
|
||||
|
||||
func main() {
|
||||
cfg, err := config.Load()
|
||||
if err != nil {
|
||||
log.Fatalf("failed to load config: %v", err)
|
||||
}
|
||||
|
||||
db, err := sqlx.Open("pgx", cfg.DatabaseURL)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to connect to DB: %v", err)
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
if err := db.Ping(); err != nil {
|
||||
log.Fatalf("Failed to ping DB: %v", err)
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
// Nova senha: senha123
|
||||
newPassword := "senha123"
|
||||
|
||||
// Hash da senha com bcrypt
|
||||
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(newPassword+cfg.PasswordPepper), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to hash password: %v", err)
|
||||
}
|
||||
|
||||
// Atualizar senha do usuário
|
||||
query := `UPDATE users SET password_hash = $1 WHERE email = $2`
|
||||
result, err := db.ExecContext(ctx, query, string(hashedPassword), "usuario@saveinmed.com")
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to update password: %v", err)
|
||||
}
|
||||
|
||||
rowsAffected, _ := result.RowsAffected()
|
||||
if rowsAffected == 0 {
|
||||
log.Fatalf("User not found: usuario@saveinmed.com")
|
||||
}
|
||||
|
||||
log.Println("✅ Password reset successful!")
|
||||
log.Println("📧 Email: usuario@saveinmed.com")
|
||||
log.Println("🔑 New Password: senha123")
|
||||
}
|
||||
Loading…
Reference in a new issue