Skip to content

Commit

Permalink
fix(link): resolve incorrect response types when opening API recovery…
Browse files Browse the repository at this point in the history
… link in browser
  • Loading branch information
aeneasr committed Oct 19, 2021
1 parent af10b03 commit 35ea8db
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 8 deletions.
14 changes: 9 additions & 5 deletions selfservice/strategy/link/strategy_recovery.go
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ func (s *Strategy) recoveryUseToken(w http.ResponseWriter, r *http.Request, body
func (s *Strategy) retryRecoveryFlowWithMessage(w http.ResponseWriter, r *http.Request, ft flow.Type, message *text.Message) error {
s.d.Logger().WithRequest(r).WithField("message", message).Debug("A recovery flow is being retried because a validation error occurred.")

req, err := recovery.NewFlow(s.d.Config(r.Context()), s.d.Config(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), s.d.GenerateCSRFToken(r), r, s.d.RecoveryStrategies(r.Context()), ft)
req, err := recovery.NewFlow(s.d.Config(r.Context()), s.d.Config(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), s.d.CSRFHandler().RegenerateToken(w, r), r, s.d.RecoveryStrategies(r.Context()), ft)
if err != nil {
return err
}
Expand All @@ -361,15 +361,19 @@ func (s *Strategy) retryRecoveryFlowWithMessage(w http.ResponseWriter, r *http.R
}

func (s *Strategy) retryRecoveryFlowWithError(w http.ResponseWriter, r *http.Request, ft flow.Type, recErr error) error {
s.d.Logger().WithRequest(r).WithError( recErr).Debug("A recovery flow is being retried because a validation error occurred.")
s.d.Logger().WithRequest(r).WithError(recErr).Debug("A recovery flow is being retried because a validation error occurred.")

req, err := recovery.NewFlow(s.d.Config(r.Context()), s.d.Config(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), s.d.CSRFHandler().RegenerateToken(w,r), r, s.d.RecoveryStrategies(r.Context()), ft)
req, err := recovery.NewFlow(s.d.Config(r.Context()), s.d.Config(r.Context()).SelfServiceFlowRecoveryRequestLifespan(), s.d.CSRFHandler().RegenerateToken(w, r), r, s.d.RecoveryStrategies(r.Context()), ft)
if err != nil {
return err
}

if err := req.UI.ParseError(node.RecoveryLinkGroup,recErr); err != nil {
return err
if expired := new(flow.ExpiredError); errors.As(recErr, &expired) {
return s.retryRecoveryFlowWithMessage(w, r, ft, text.NewErrorValidationRecoveryFlowExpired(expired.Ago))
} else {
if err := req.UI.ParseError(node.RecoveryLinkGroup, recErr); err != nil {
return err
}
}

if err := s.d.RecoveryFlowPersister().CreateRecoveryFlow(r.Context(), req); err != nil {
Expand Down
10 changes: 7 additions & 3 deletions selfservice/strategy/link/strategy_verification.go
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ func (s *Strategy) retryVerificationFlowWithMessage(w http.ResponseWriter, r *ht
s.d.Logger().WithRequest(r).WithField("message", message).Debug("A verification flow is being retried because a validation error occurred.")

f, err := verification.NewFlow(s.d.Config(r.Context()),
s.d.Config(r.Context()).SelfServiceFlowVerificationRequestLifespan(), s.d.GenerateCSRFToken(r), r, s.d.VerificationStrategies(r.Context()), ft)
s.d.Config(r.Context()).SelfServiceFlowVerificationRequestLifespan(), s.d.CSRFHandler().RegenerateToken(w, r), r, s.d.VerificationStrategies(r.Context()), ft)
if err != nil {
return s.handleVerificationError(w, r, f, nil, err)
}
Expand Down Expand Up @@ -302,8 +302,12 @@ func (s *Strategy) retryVerificationFlowWithError(w http.ResponseWriter, r *http
return s.handleVerificationError(w, r, f, nil, err)
}

if err := f.UI.ParseError(node.VerificationLinkGroup, verErr); err != nil {
return err
if expired := new(flow.ExpiredError); errors.As(verErr, &expired) {
return s.retryVerificationFlowWithMessage(w, r, ft, text.NewErrorValidationVerificationFlowExpired(expired.Ago))
} else {
if err := f.UI.ParseError(node.RecoveryLinkGroup, verErr); err != nil {
return err
}
}

if err := s.d.VerificationFlowPersister().CreateVerificationFlow(r.Context(), f); err != nil {
Expand Down

0 comments on commit 35ea8db

Please sign in to comment.