FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Merge pull request #18983 from guardian/lg-fix-redirect · devhttps/frontend@8ca1a66 · GitHub

Commit 8ca1a66

Browse files
Lau Skeeter
authored
Merge pull request guardian#18983 from guardian/lg-fix-redirect
Open account tab for unvalidated emails
2 parents acb28df + a7225ad commit 8ca1a66

4 files changed

Lines changed: 50 additions & 30 deletions

File tree

‎identity/app/actions/AuthenticatedActions.scala‎

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,20 @@ class AuthenticatedActions(
143143
def refine[A](request: AuthRequest[A]) = checkRecentAuthenticationAndRedirect(request)
144144
}
145145

146+
private def decideConsentsRedirectFilter: ActionFilter[AuthRequest] =
147+
new ActionFilter[AuthRequest] {
148+
override val executionContext = ec
149+
150+
def filter[A](request: AuthRequest[A]) = {
151+
redirectService.toConsentsRedirect(request.user, request).map { redirect =>
152+
if (redirect.isAllowedFrom(""))
153+
Some(sendUserToUserRedirectDecision(request, redirect))
154+
else
155+
None
156+
}
157+
}
158+
}
159+
146160
// Play will not let you set up an ActionBuilder with a Refiner hence this empty actionBuilder to set up Auth
147161
private def noOpActionBuilder: DefaultActionBuilder = DefaultActionBuilder(anyContentParser)
148162

@@ -162,7 +176,11 @@ class AuthenticatedActions(
162176
def consentAuthWithIdapiUserAction: ActionBuilder[AuthRequest, AnyContent] =
163177
noOpActionBuilder andThen consentAuthRefiner andThen retrieveUserFromIdapiRefiner
164178

165-
/** Auth with at least SC_GU_RP and decide if user should be redirected to consent journey */
179+
/** Enforce a validated email */
180+
def consentsRedirectAction(): ActionBuilder[AuthRequest, AnyContent] =
181+
consentAuthWithIdapiUserAction andThen decideConsentsRedirectFilter
182+
183+
/** Redirects for the account page */
166184
def manageAccountRedirectAction(pageId: String = ""): ActionBuilder[AuthRequest, AnyContent] =
167185
consentAuthWithIdapiUserAction andThen decideManageAccountRedirectFilter(pageId)
168186

‎identity/app/controllers/editprofile/ConsentsJourney.scala‎

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package controllers.editprofile
22

3-
import actions.AuthenticatedActions.AuthRequest
3+
import actions.AuthenticatedActions._
44
import com.gu.identity.model.{Consent, EmailNewsletters, StatusFields, User}
55
import idapiclient.UserUpdateDTO
66
import model.{IdentityPage, NoCache}
@@ -61,15 +61,17 @@ trait ConsentsJourney
6161
page: ConsentJourneyPage,
6262
consentHint: Option[String]): Action[AnyContent] =
6363

64-
csrfAddToken {
65-
consentAuthWithIdapiUserAction.async { implicit request =>
66-
consentJourneyView(
67-
page = page,
68-
journey = page.journey,
69-
forms = ProfileForms(userWithOrderedConsents(request.user, consentHint), PublicEditProfilePage),
70-
request.user,
71-
consentHint
72-
)
64+
65+
csrfAddToken {
66+
consentsRedirectAction.async { implicit request =>
67+
consentJourneyView(
68+
page = page,
69+
journey = page.journey,
70+
forms = ProfileForms(userWithOrderedConsents(request.user, consentHint), PublicEditProfilePage),
71+
request.user,
72+
consentHint
73+
)
74+
7375
}
7476
}
7577

‎identity/app/services/ProfileRedirectService.scala‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,8 @@ sealed abstract class ProfileRedirect(val url: String) {
2222
def isAllowedFrom(url: String): Boolean
2323
}
2424

25-
case object RedirectToEmailValidationFromEmailPrefs extends ProfileRedirect("/verify-email?isRepermissioningRedirect=true") {
26-
override def isAllowedFrom(url: String): Boolean = url contains "email-prefs"
27-
}
28-
29-
case object RedirectToEmailValidationFromAnywhere extends ProfileRedirect("/verify-email?isRepermissioningRedirect=true") {
30-
override def isAllowedFrom(url: String): Boolean = true
25+
case object RedirectToEmailValidationFromAnywhereButAccountDetails extends ProfileRedirect("/verify-email?isRepermissioningRedirect=true") {
26+
override def isAllowedFrom(url: String): Boolean = !(url contains "account/edit")
3127
}
3228

3329
case object RedirectToConsentsFromEmailPrefs extends ProfileRedirect("/consents") {
@@ -54,17 +50,21 @@ class ProfileRedirectService(
5450

5551
private implicit lazy val ec: ExecutionContext = controllerComponents.executionContext
5652

53+
def toConsentsRedirect[A](user: User, request: RequestHeader): Future[ProfileRedirect] = {
54+
user.statusFields.isUserEmailValidated match {
55+
case true => Future.successful(NoRedirect)
56+
case false => Future.successful(RedirectToEmailValidationFromAnywhereButAccountDetails)
57+
}
58+
}
59+
5760
def toProfileRedirect[A](user: User, request: RequestHeader): Future[ProfileRedirect] = {
5861

5962
def userHasRepermissioned: Boolean = user.statusFields.hasRepermissioned.contains(true)
6063
def userEmailValidated: Boolean = user.statusFields.isUserEmailValidated
6164

6265
(userEmailValidated, userHasRepermissioned) match {
63-
case (false, false) =>
64-
Future.successful(RedirectToEmailValidationFromAnywhere)
65-
66-
case (false, true) =>
67-
Future.successful(RedirectToEmailValidationFromEmailPrefs)
66+
case (false, _) =>
67+
Future.successful(RedirectToEmailValidationFromAnywhereButAccountDetails)
6868

6969
case (true, false) =>
7070
Future.successful(RedirectToConsentsFromEmailPrefs)

‎identity/app/views/profileForms.scala.html‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,13 @@
6060
role="tabpanel"
6161
aria-labelledby="tabs-account-profile-@i-tab"
6262
data-link-name="Public Profile"
63-
data-link-context="Identity/profile">
64-
@body
63+
data-link-context="Identity/profile"
64+
>
65+
@(if(redirectDecision.isAllowedFrom(url)) {
66+
Html("<div class='identity-forms-loading u-identity-forms-padded'><div class='identity-forms-loading__spinner is-updating'></div></div>")
67+
} else {
68+
body
69+
})
6570
</div>
6671
}
6772

@@ -100,12 +105,7 @@ <h1 class="identity-title" data-test-id="edit-profile-header">Edit your profile<
100105

101106
@content(5, "/contribution/recurring/edit")(profile.recurringContributionDetailsForm(idUrlBuilder, idRequest, user))
102107

103-
@content(6, "/email-prefs")(
104-
redirectDecision match {
105-
case NoRedirect => profile.privacyForm(idUrlBuilder, idRequest, user, forms.privacyForm, emailPrefsForm, emailSubscriptions, availableLists, consentsUpdated, consentHint)
106-
case _: ProfileRedirect => Html("<div class='identity-forms-loading u-identity-forms-padded'><div class='identity-forms-loading__spinner is-updating'></div></div>")
107-
}
108-
)
108+
@content(6, "/email-prefs")(profile.privacyForm(idUrlBuilder, idRequest, user, forms.privacyForm, emailPrefsForm, emailSubscriptions, availableLists, consentsUpdated, consentHint))
109109
</div>
110110
</div>
111111
</div>

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL