Skip to content

Commit

Permalink
u
Browse files Browse the repository at this point in the history
  • Loading branch information
Benehiko committed May 8, 2023
1 parent 5df6e66 commit f0d39f2
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 27 deletions.
48 changes: 25 additions & 23 deletions selfservice/flow/settings/handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -357,39 +357,41 @@ func TestHandler(t *testing.T) {
assertx.EqualAsJSON(t, session.NewErrAALNotSatisfied(publicTS.URL+"/self-service/login/browser?aal=aal2"), json.RawMessage(body))
})

t.Run("description=preserve return_to if identity has aal2 but session has aal1", func(t *testing.T) {
t.Cleanup(func() {
conf.MustSet(ctx, config.ViperKeySelfServiceSettingsRequiredAAL, config.HighestAvailableAAL)
})
conf.MustSet(ctx, config.ViperKeySelfServiceSettingsRequiredAAL, "aal1")
conf.MustSet(ctx, config.ViperKeyURLsAllowedReturnToDomains, []string{"https://ory.sh"})
})

returnTo := "?return_to=https://ory.sh"
req, err := http.NewRequest("GET", publicTS.URL+settings.RouteInitBrowserFlow+returnTo, nil)
require.NoError(t, err)
t.Run("description=preserve return_to if identity has aal2 but session has aal1", func(t *testing.T) {
t.Cleanup(func() {
conf.MustSet(ctx, config.ViperKeySelfServiceSettingsRequiredAAL, config.HighestAvailableAAL)
})
conf.MustSet(ctx, config.ViperKeySelfServiceSettingsRequiredAAL, "aal1")
conf.MustSet(ctx, config.ViperKeyURLsAllowedReturnToDomains, []string{"https://ory.sh"})

res, err := aal2Identity.Do(req)
require.NoError(t, err)
returnTo := "?return_to=https://ory.sh"
req, err := http.NewRequest("GET", publicTS.URL+settings.RouteInitBrowserFlow+returnTo, nil)
require.NoError(t, err)

require.Equal(t, http.StatusOK, res.StatusCode)
res, err := aal2Identity.Do(req)
require.NoError(t, err)

body := ioutilx.MustReadAll(res.Body)
require.NoError(t, res.Body.Close())
require.Equal(t, http.StatusOK, res.StatusCode)

id := gjson.GetBytes(body, "id").String()
body := ioutilx.MustReadAll(res.Body)
require.NoError(t, res.Body.Close())

conf.MustSet(ctx, config.ViperKeySelfServiceSettingsRequiredAAL, config.HighestAvailableAAL)
res, err = aal2Identity.Get(publicTS.URL + settings.RouteGetFlow + "?id=" + id)
require.NoError(t, err)
id := gjson.GetBytes(body, "id").String()

body = ioutilx.MustReadAll(res.Body)
require.NoError(t, res.Body.Close())
conf.MustSet(ctx, config.ViperKeySelfServiceSettingsRequiredAAL, config.HighestAvailableAAL)
res, err = aal2Identity.Get(publicTS.URL + settings.RouteGetFlow + "?id=" + id)
require.NoError(t, err)

body = ioutilx.MustReadAll(res.Body)
require.NoError(t, res.Body.Close())

require.EqualValues(t, http.StatusForbidden, res.StatusCode)
require.EqualValues(t, http.StatusForbidden, res.StatusCode)

assertx.EqualAsJSON(t, session.NewErrAALNotSatisfied(publicTS.URL+"/self-service/login/browser?aal=aal2&return_to="+url.QueryEscape("https://ory.sh")), json.RawMessage(body))
})
assertx.EqualAsJSON(t, session.NewErrAALNotSatisfied(publicTS.URL+"/self-service/login/browser?aal=aal2&return_to="+url.QueryEscape("https://ory.sh")), json.RawMessage(body))
})

})

t.Run("endpoint=submit", func(t *testing.T) {
Expand Down
6 changes: 6 additions & 0 deletions selfservice/strategy/code/strategy_recovery.go
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,12 @@ func (s *Strategy) recoveryIssueSession(w http.ResponseWriter, r *http.Request,
return s.retryRecoveryFlowWithError(w, r, flow.TypeBrowser, err)
}

if u, err := url.Parse(sf.RequestURL); err != nil {
return s.retryRecoveryFlowWithError(w, r, flow.TypeBrowser, err)
} else {
sf.ReturnTo = u.Query().Get("return_to")
}

if err := s.deps.RecoveryExecutor().PostRecoveryHook(w, r, f, sess); err != nil {
return s.retryRecoveryFlowWithError(w, r, f.Type, err)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright © 2023 Ory Corp
// SPDX-License-Identifier: Apache-2.0

import { Identity } from "@ory/kratos-client"
import { authenticator } from "otplib"
import { gen, website } from "../../../../helpers"
import { appPrefix, assertRecoveryAddress, gen } from "../../../../helpers"
Expand Down Expand Up @@ -30,19 +31,18 @@ context("Recovery with `return_to`", () => {
cy.proxy(app)
})

let identity
let identity: any

beforeEach(() => {
cy.deleteMail()
cy.longRecoveryLifespan()
cy.longLinkLifespan()
cy.disableVerification()
cy.enableRecovery()
cy.useRecoveryStrategy("code")
cy.notifyUnknownRecipients("recovery", false)
cy.clearAllCookies()
cy.longPrivilegedSessionTime()
cy.useLaxAal()
cy.requireStrictAal()
identity = gen.identityWithWebsite()
cy.registerApi(identity)
})
Expand Down Expand Up @@ -91,7 +91,7 @@ context("Recovery with `return_to`", () => {
cy.visit(settings)

// enable mfa for this account
let secret
let secret: string
cy.get('[data-testid="node/text/totp_secret_key/text"]').then(($e) => {
secret = $e.text().trim()
})
Expand All @@ -105,6 +105,7 @@ context("Recovery with `return_to`", () => {
expectMethods: ["password", "totp"],
})

cy.logout()
cy.clearAllCookies()

cy.visit(recovery + "?return_to=https://www.ory.sh/")
Expand Down

0 comments on commit f0d39f2

Please sign in to comment.