()
| 183 | } |
| 184 | |
| 185 | func (*RootCmd) dbcryptDeleteCmd() *serpent.Command { |
| 186 | var flags deleteFlags |
| 187 | cmd := &serpent.Command{ |
| 188 | Use: "delete", |
| 189 | Short: "Delete all encrypted data from the database. THIS IS A DESTRUCTIVE OPERATION.", |
| 190 | Handler: func(inv *serpent.Invocation) error { |
| 191 | ctx, cancel := context.WithCancel(inv.Context()) |
| 192 | defer cancel() |
| 193 | logger := slog.Make(sloghuman.Sink(inv.Stdout)) |
| 194 | if ok, _ := inv.ParsedFlags().GetBool("verbose"); ok { |
| 195 | logger = logger.Leveled(slog.LevelDebug) |
| 196 | } |
| 197 | |
| 198 | if err := flags.valid(); err != nil { |
| 199 | return err |
| 200 | } |
| 201 | msg := `All encrypted data will be deleted from the database: |
| 202 | - Encrypted user OAuth access and refresh tokens |
| 203 | - Encrypted user Git authentication access and refresh tokens |
| 204 | |
| 205 | Are you sure you want to continue?` |
| 206 | if _, err := cliui.Prompt(inv, cliui.PromptOptions{ |
| 207 | Text: msg, |
| 208 | IsConfirm: true, |
| 209 | }); err != nil { |
| 210 | return err |
| 211 | } |
| 212 | |
| 213 | var err error |
| 214 | sqlDriver := "postgres" |
| 215 | if codersdk.PostgresAuth(flags.PostgresAuth) == codersdk.PostgresAuthAWSIAMRDS { |
| 216 | sqlDriver, err = awsiamrds.Register(inv.Context(), sqlDriver) |
| 217 | if err != nil { |
| 218 | return xerrors.Errorf("register aws rds iam auth: %w", err) |
| 219 | } |
| 220 | } |
| 221 | |
| 222 | sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, sqlDriver, flags.PostgresURL, nil) |
| 223 | if err != nil { |
| 224 | return xerrors.Errorf("connect to postgres: %w", err) |
| 225 | } |
| 226 | defer func() { |
| 227 | _ = sqlDB.Close() |
| 228 | }() |
| 229 | logger.Info(ctx, "connected to postgres") |
| 230 | if err := dbcrypt.Delete(ctx, logger, sqlDB); err != nil { |
| 231 | return xerrors.Errorf("delete encrypted data: %w", err) |
| 232 | } |
| 233 | logger.Info(ctx, "operation completed successfully") |
| 234 | return nil |
| 235 | }, |
| 236 | } |
| 237 | flags.attach(&cmd.Options) |
| 238 | return cmd |
| 239 | } |
| 240 | |
| 241 | type rotateFlags struct { |
| 242 | PostgresURL string |
no test coverage detected