()
| 19 | ) |
| 20 | |
| 21 | func (*RootCmd) resetPassword() *serpent.Command { |
| 22 | var ( |
| 23 | postgresURL string |
| 24 | postgresAuth string |
| 25 | ) |
| 26 | |
| 27 | root := &serpent.Command{ |
| 28 | Use: "reset-password <username>", |
| 29 | Short: "Directly connect to the database to reset a user's password", |
| 30 | Middleware: serpent.RequireNArgs(1), |
| 31 | Handler: func(inv *serpent.Invocation) error { |
| 32 | username := inv.Args[0] |
| 33 | |
| 34 | logger := slog.Make(sloghuman.Sink(inv.Stdout)) |
| 35 | if ok, _ := inv.ParsedFlags().GetBool("verbose"); ok { |
| 36 | logger = logger.Leveled(slog.LevelDebug) |
| 37 | } |
| 38 | |
| 39 | sqlDriver := "postgres" |
| 40 | if codersdk.PostgresAuth(postgresAuth) == codersdk.PostgresAuthAWSIAMRDS { |
| 41 | var err error |
| 42 | sqlDriver, err = awsiamrds.Register(inv.Context(), sqlDriver) |
| 43 | if err != nil { |
| 44 | return xerrors.Errorf("register aws rds iam auth: %w", err) |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | sqlDB, err := ConnectToPostgres(inv.Context(), logger, sqlDriver, postgresURL, nil) |
| 49 | if err != nil { |
| 50 | return xerrors.Errorf("dial postgres: %w", err) |
| 51 | } |
| 52 | defer sqlDB.Close() |
| 53 | |
| 54 | db := database.New(sqlDB) |
| 55 | |
| 56 | user, err := db.GetUserByEmailOrUsername(inv.Context(), database.GetUserByEmailOrUsernameParams{ |
| 57 | Username: username, |
| 58 | }) |
| 59 | if err != nil { |
| 60 | return xerrors.Errorf("retrieving user: %w", err) |
| 61 | } |
| 62 | |
| 63 | password, err := cliui.Prompt(inv, cliui.PromptOptions{ |
| 64 | Text: "Enter new " + pretty.Sprint(cliui.DefaultStyles.Field, "password") + ":", |
| 65 | Secret: true, |
| 66 | Validate: userpassword.Validate, |
| 67 | }) |
| 68 | if err != nil { |
| 69 | return xerrors.Errorf("password prompt: %w", err) |
| 70 | } |
| 71 | confirmedPassword, err := cliui.Prompt(inv, cliui.PromptOptions{ |
| 72 | Text: "Confirm " + pretty.Sprint(cliui.DefaultStyles.Field, "password") + ":", |
| 73 | Secret: true, |
| 74 | Validate: cliui.ValidateNotEmpty, |
| 75 | }) |
| 76 | if err != nil { |
| 77 | return xerrors.Errorf("confirm password prompt: %w", err) |
| 78 | } |
no test coverage detected