From f84b8a0bb39bbe8dffafb0c87b306e38b429642b Mon Sep 17 00:00:00 2001 From: Liz Fong-Jones Date: Sat, 14 Dec 2024 06:06:05 +0100 Subject: [PATCH 1/3] feat(cmd/goat): allow specifying authFactorToken --- cmd/goat/account.go | 8 +++++++- cmd/goat/auth.go | 15 ++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/cmd/goat/account.go b/cmd/goat/account.go index 347ebc02f..9005c3ffb 100644 --- a/cmd/goat/account.go +++ b/cmd/goat/account.go @@ -37,6 +37,12 @@ var cmdAccount = &cli.Command{ Usage: "password (app password recommended)", EnvVars: []string{"ATP_AUTH_PASSWORD"}, }, + &cli.StringFlag{ + Name: "auth-factor-token", + Aliases: []string{"t"}, + Usage: "token required if password is used and 2fa is required", + EnvVars: []string{"ATP_AUTH_TOKEN"}, + }, &cli.StringFlag{ Name: "pds-host", Usage: "URL of the PDS to create account on (overrides DID doc)", @@ -163,7 +169,7 @@ func runAccountLogin(cctx *cli.Context) error { return err } - _, err = refreshAuthSession(ctx, *username, cctx.String("app-password"), cctx.String("pds-host")) + _, err = refreshAuthSession(ctx, *username, cctx.String("app-password"), cctx.String("auth-factor-token"), cctx.String("pds-host")) return err } diff --git a/cmd/goat/auth.go b/cmd/goat/auth.go index 5eaf2b29e..9d636dd57 100644 --- a/cmd/goat/auth.go +++ b/cmd/goat/auth.go @@ -77,9 +77,9 @@ func loadAuthClient(ctx context.Context) (*xrpc.Client, error) { } resp, err := comatproto.ServerRefreshSession(ctx, &client) if err != nil { - // TODO: if failure, try creating a new session from password + // TODO: if failure, try creating a new session from password (2fa tokens are only valid once, so not reused) fmt.Println("trying to refresh auth from password...") - as, err := refreshAuthSession(ctx, sess.DID.AtIdentifier(), sess.Password, sess.PDS) + as, err := refreshAuthSession(ctx, sess.DID.AtIdentifier(), sess.Password, "", sess.PDS) if err != nil { return nil, err } @@ -96,7 +96,7 @@ func loadAuthClient(ctx context.Context) (*xrpc.Client, error) { return &client, nil } -func refreshAuthSession(ctx context.Context, username syntax.AtIdentifier, password, pdsURL string) (*AuthSession, error) { +func refreshAuthSession(ctx context.Context, username syntax.AtIdentifier, password, authFactorToken, pdsURL string) (*AuthSession, error) { var did syntax.DID if pdsURL == "" { @@ -120,9 +120,14 @@ func refreshAuthSession(ctx context.Context, username syntax.AtIdentifier, passw client := xrpc.Client{ Host: pdsURL, } + var token *string + if authFactorToken != "" { + token = &authFactorToken + } sess, err := comatproto.ServerCreateSession(ctx, &client, &comatproto.ServerCreateSession_Input{ - Identifier: username.String(), - Password: password, + Identifier: username.String(), + Password: password, + AuthFactorToken: token, }) if err != nil { return nil, err From 8d977e686ea46933031ba62e15aa53d2c0241dc4 Mon Sep 17 00:00:00 2001 From: Liz Fong-Jones Date: Mon, 16 Dec 2024 18:40:55 -0800 Subject: [PATCH 2/3] respond to feedback --- cmd/goat/account.go | 5 ++--- cmd/goat/auth.go | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/cmd/goat/account.go b/cmd/goat/account.go index 9005c3ffb..8d83859f3 100644 --- a/cmd/goat/account.go +++ b/cmd/goat/account.go @@ -39,9 +39,8 @@ var cmdAccount = &cli.Command{ }, &cli.StringFlag{ Name: "auth-factor-token", - Aliases: []string{"t"}, Usage: "token required if password is used and 2fa is required", - EnvVars: []string{"ATP_AUTH_TOKEN"}, + EnvVars: []string{"ATP_AUTH_2FA_TOKEN"}, }, &cli.StringFlag{ Name: "pds-host", @@ -169,7 +168,7 @@ func runAccountLogin(cctx *cli.Context) error { return err } - _, err = refreshAuthSession(ctx, *username, cctx.String("app-password"), cctx.String("auth-factor-token"), cctx.String("pds-host")) + _, err = refreshAuthSession(ctx, *username, cctx.String("app-password"), cctx.String("pds-host"), cctx.String("auth-factor-token")) return err } diff --git a/cmd/goat/auth.go b/cmd/goat/auth.go index 9d636dd57..cfa441262 100644 --- a/cmd/goat/auth.go +++ b/cmd/goat/auth.go @@ -79,7 +79,7 @@ func loadAuthClient(ctx context.Context) (*xrpc.Client, error) { if err != nil { // TODO: if failure, try creating a new session from password (2fa tokens are only valid once, so not reused) fmt.Println("trying to refresh auth from password...") - as, err := refreshAuthSession(ctx, sess.DID.AtIdentifier(), sess.Password, "", sess.PDS) + as, err := refreshAuthSession(ctx, sess.DID.AtIdentifier(), sess.Password, sess.PDS, "") if err != nil { return nil, err } @@ -96,7 +96,7 @@ func loadAuthClient(ctx context.Context) (*xrpc.Client, error) { return &client, nil } -func refreshAuthSession(ctx context.Context, username syntax.AtIdentifier, password, authFactorToken, pdsURL string) (*AuthSession, error) { +func refreshAuthSession(ctx context.Context, username syntax.AtIdentifier, password, pdsURL, authFactorToken string) (*AuthSession, error) { var did syntax.DID if pdsURL == "" { From e33987956054f54ff47f1d13a2a14e8532773fbc Mon Sep 17 00:00:00 2001 From: Liz Fong-Jones Date: Tue, 17 Dec 2024 04:30:33 +0100 Subject: [PATCH 3/3] Update account.go yeah I'm going to make it consistent --- cmd/goat/account.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/goat/account.go b/cmd/goat/account.go index 8d83859f3..e077dca10 100644 --- a/cmd/goat/account.go +++ b/cmd/goat/account.go @@ -40,7 +40,7 @@ var cmdAccount = &cli.Command{ &cli.StringFlag{ Name: "auth-factor-token", Usage: "token required if password is used and 2fa is required", - EnvVars: []string{"ATP_AUTH_2FA_TOKEN"}, + EnvVars: []string{"ATP_AUTH_FACTOR_TOKEN"}, }, &cli.StringFlag{ Name: "pds-host",