From d8073629a642b933d66d9d0d2442aeb047beceae Mon Sep 17 00:00:00 2001 From: joaoaodt Date: Thu, 26 Feb 2026 18:43:40 -0300 Subject: [PATCH] =?UTF-8?q?feat(cli):=20adiciona=20comando=20para=20reset?= =?UTF-8?q?=20de=20senha=20de=20usu=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- backend/cmd/reset_password/main.go | 56 ++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 backend/cmd/reset_password/main.go diff --git a/backend/cmd/reset_password/main.go b/backend/cmd/reset_password/main.go new file mode 100644 index 0000000..809d915 --- /dev/null +++ b/backend/cmd/reset_password/main.go @@ -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") +}