3
3
package cli
4
4
5
5
import (
6
- "database/sql"
7
6
"fmt"
8
7
9
8
"golang.org/x/xerrors"
10
9
10
+ "cdr.dev/slog"
11
+ "cdr.dev/slog/sloggers/sloghuman"
12
+ "github.com/coder/coder/v2/coderd/database/awsiamrds"
13
+ "github.com/coder/coder/v2/codersdk"
11
14
"github.com/coder/pretty"
12
15
"github.com/coder/serpent"
13
16
14
17
"github.com/coder/coder/v2/cli/cliui"
15
18
"github.com/coder/coder/v2/coderd/database"
16
- "github.com/coder/coder/v2/coderd/database/migrations"
17
19
"github.com/coder/coder/v2/coderd/userpassword"
18
20
)
19
21
20
22
func (* RootCmd ) resetPassword () * serpent.Command {
21
- var postgresURL string
23
+ var (
24
+ postgresURL string
25
+ postgresAuth string
26
+ )
22
27
23
28
root := & serpent.Command {
24
29
Use : "reset-password <username>" ,
@@ -27,20 +32,25 @@ func (*RootCmd) resetPassword() *serpent.Command {
27
32
Handler : func (inv * serpent.Invocation ) error {
28
33
username := inv .Args [0 ]
29
34
30
- sqlDB , err := sql . Open ( "postgres" , postgresURL )
31
- if err != nil {
32
- return xerrors . Errorf ( "dial postgres: %w" , err )
35
+ logger := slog . Make ( sloghuman . Sink ( inv . Stdout ) )
36
+ if ok , _ := inv . ParsedFlags (). GetBool ( "verbose" ); ok {
37
+ logger = logger . Leveled ( slog . LevelDebug )
33
38
}
34
- defer sqlDB .Close ()
35
- err = sqlDB .Ping ()
36
- if err != nil {
37
- return xerrors .Errorf ("ping postgres: %w" , err )
39
+
40
+ sqlDriver := "postgres"
41
+ if codersdk .PostgresAuth (postgresAuth ) == codersdk .PostgresAuthAWSIAMRDS {
42
+ var err error
43
+ sqlDriver , err = awsiamrds .Register (inv .Context (), sqlDriver )
44
+ if err != nil {
45
+ return xerrors .Errorf ("register aws rds iam auth: %w" , err )
46
+ }
38
47
}
39
48
40
- err = migrations . EnsureClean ( sqlDB )
49
+ sqlDB , err := ConnectToPostgres ( inv . Context (), logger , false , sqlDriver , postgresURL )
41
50
if err != nil {
42
- return xerrors .Errorf ("database needs migration : %w" , err )
51
+ return xerrors .Errorf ("dial postgres : %w" , err )
43
52
}
53
+
44
54
db := database .New (sqlDB )
45
55
46
56
user , err := db .GetUserByEmailOrUsername (inv .Context (), database.GetUserByEmailOrUsernameParams {
@@ -97,6 +107,14 @@ func (*RootCmd) resetPassword() *serpent.Command {
97
107
Env : "CODER_PG_CONNECTION_URL" ,
98
108
Value : serpent .StringOf (& postgresURL ),
99
109
},
110
+ serpent.Option {
111
+ Name : "Postgres Connection Auth" ,
112
+ Description : "Type of auth to use when connecting to postgres." ,
113
+ Flag : "postgres-connection-auth" ,
114
+ Env : "CODER_PG_CONNECTION_AUTH" ,
115
+ Default : "password" ,
116
+ Value : serpent .EnumOf (& postgresAuth , codersdk .PostgresAuthDrivers ... ),
117
+ },
100
118
}
101
119
102
120
return root
0 commit comments