diff --git a/login_auto.go b/login_auto.go index d215c20..2a53185 100644 --- a/login_auto.go +++ b/login_auto.go @@ -30,6 +30,7 @@ const ( idUnknownBrowser = `#enter_code_app_root` idDigitN = `[aria-label="digit %d of 6"]` + idCodeError = `[data-qa="2fa_code_error_alert"]` debugDelay = 1 * time.Second ) @@ -235,7 +236,13 @@ func (c *Client) doAutoLogin(ctx context.Context, page *rod.Page, email, passwor if err := enterCode(wrapped, code); err != nil { return ErrBrowser{Err: err, FailedTo: "enter challenge code"} } - return nil + _, err = page.Race(). + Element(idRedirect).Handle(click). + Element(idCodeError).Handle( + func(e *rod.Element) error { + return ErrInvalidChallengeCode + }).Do() + return err }).Element(idRedirect).Handle(click) // success if _, err := rctx.Do(); err != nil { return ErrBrowser{Err: err, FailedTo: "wait for login to complete"} diff --git a/slackauth.go b/slackauth.go index e7c0cae..c743622 100644 --- a/slackauth.go +++ b/slackauth.go @@ -186,6 +186,8 @@ var ( ErrLoginError = errors.New("slack reported an error during login") // ErrWorkspaceNotFound indicates that the workspace name was invalid. ErrWorkspaceNotFound = errors.New("workspace not found") + // ErrInvalidChallengeCode indicates that the challenge code was invalid. + ErrInvalidChallengeCode = errors.New("invalid challenge code") ) // ErrBadWorkspace is returned when the workspace name is invalid.