Skip to content

Commit 050a663

Browse files
authored
Merge pull request #189 from hmrc/lajw/DLS-10231/Confidence-Level
DLS-10231 Check for Confidence Level when obtaining user details
2 parents 27b9cfb + b12f4fe commit 050a663

File tree

2 files changed

+29
-23
lines changed

2 files changed

+29
-23
lines changed

app/uk/gov/hmrc/helptosaveapi/controllers/HelpToSaveController.scala

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import play.api.Configuration
2323
import play.api.libs.json.Json
2424
import play.api.libs.json.Json._
2525
import play.api.mvc._
26-
import uk.gov.hmrc.auth.core.AuthConnector
26+
import uk.gov.hmrc.auth.core.retrieve._
2727
import uk.gov.hmrc.auth.core.retrieve.v2.Retrievals.{authProviderId => v2AuthProviderId, nino => v2Nino}
28-
import uk.gov.hmrc.auth.core.retrieve.{v2, Name => RetrievedName, _}
28+
import uk.gov.hmrc.auth.core.{AuthConnector, ConfidenceLevel}
2929
import uk.gov.hmrc.helptosaveapi.auth.Auth
3030
import uk.gov.hmrc.helptosaveapi.models.AccessType.{PrivilegedAccess, UserRestricted}
3131
import uk.gov.hmrc.helptosaveapi.models._
@@ -36,7 +36,6 @@ import uk.gov.hmrc.helptosaveapi.util.{LogMessageTransformer, Logging, toFuture}
3636
import uk.gov.hmrc.http.HeaderCarrier
3737
import uk.gov.hmrc.play.bootstrap.backend.controller.BackendController
3838

39-
import java.time.LocalDate
4039
import java.util.UUID
4140
import scala.concurrent.{ExecutionContext, Future}
4241

@@ -49,15 +48,15 @@ class HelpToSaveController @Inject() (
4948

5049
val correlationIdHeaderName: String = config.underlying.getString("microservice.correlationIdHeaderName")
5150

52-
val userInfoRetrievals: Retrieval[Option[RetrievedName] ~ Option[LocalDate] ~ Option[ItmpName] ~ Option[
53-
LocalDate
54-
] ~ Option[ItmpAddress] ~ Option[String]] =
51+
private val userInfoRetrievals = {
5552
v2.Retrievals.name and
5653
v2.Retrievals.dateOfBirth and
5754
v2.Retrievals.itmpName and
5855
v2.Retrievals.itmpDateOfBirth and
5956
v2.Retrievals.itmpAddress and
60-
v2.Retrievals.email
57+
v2.Retrievals.email and
58+
v2.Retrievals.confidenceLevel
59+
}
6160

6261
def apiErrorToResult(e: ApiError): Result = e match {
6362
case _: ApiAccessError => Forbidden(Json.toJson(e))
@@ -87,16 +86,20 @@ class HelpToSaveController @Inject() (
8786
// will definitely fail with a 500 response from auth for privileged access
8887
authorised(userInfoRetrievals and v2Nino) { _ =>
8988
{
90-
case ggName ~ dob ~ itmpName ~ itmpDob ~ itmpAddress ~ email ~ authNino =>
91-
val retrievedDetails = RetrievedUserDetails(
92-
authNino,
93-
itmpName.flatMap(_.givenName).orElse(ggName.flatMap(_.name)),
94-
itmpName.flatMap(_.familyName).orElse(ggName.flatMap(_.lastName)),
95-
itmpDob.orElse(dob),
96-
itmpAddress,
97-
email
98-
)
99-
helpToSaveApiService.createAccountUserRestricted(request, retrievedDetails).map(handleResult)
89+
case ggName ~ dob ~ itmpName ~ itmpDob ~ itmpAddress ~ email ~ confidenceLevel ~ authNino =>
90+
if (confidenceLevel == ConfidenceLevel.L200) {
91+
val retrievedDetails = RetrievedUserDetails(
92+
authNino,
93+
itmpName.flatMap(_.givenName).orElse(ggName.flatMap(_.name)),
94+
itmpName.flatMap(_.familyName).orElse(ggName.flatMap(_.lastName)),
95+
itmpDob.orElse(dob),
96+
itmpAddress,
97+
email
98+
)
99+
helpToSaveApiService.createAccountUserRestricted(request, retrievedDetails).map(handleResult)
100+
} else {
101+
Future.successful(Unauthorized("Insufficient confidence level"))
102+
}
100103
}
101104
}(ec)(request)
102105

@@ -198,7 +201,6 @@ class HelpToSaveController @Inject() (
198201
case None =>
199202
logger.warn("There was no nino retrieved from auth")
200203
Forbidden
201-
202204
}
203205
}
204206

test/uk/gov/hmrc/helptosaveapi/controllers/HelpToSaveControllerSpec.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import play.api.libs.json.Json
2121
import play.api.mvc._
2222
import play.api.test.FakeRequest
2323
import play.api.test.Helpers._
24+
import uk.gov.hmrc.auth.core.ConfidenceLevel
2425
import uk.gov.hmrc.auth.core.retrieve._
2526
import uk.gov.hmrc.auth.core.retrieve.v2.Retrievals.{authProviderId, nino => v2Nino}
2627
import uk.gov.hmrc.helptosaveapi.models._
@@ -133,27 +134,30 @@ class HelpToSaveControllerSpec extends AuthSupport {
133134

134135
"the request is made with user-restricted access" must {
135136
val userInfoRetrievals: Retrieval[
136-
Option[Name] ~ Option[LocalDate] ~ Option[ItmpName] ~ Option[LocalDate] ~ Option[ItmpAddress] ~ Option[String]
137+
Option[Name] ~ Option[LocalDate] ~ Option[ItmpName] ~ Option[LocalDate] ~ Option[ItmpAddress] ~ Option[
138+
String
139+
] ~ ConfidenceLevel
137140
] =
138141
v2.Retrievals.name and
139142
v2.Retrievals.dateOfBirth and
140143
v2.Retrievals.itmpName and
141144
v2.Retrievals.itmpDateOfBirth and
142145
v2.Retrievals.itmpAddress and
143-
v2.Retrievals.email
146+
v2.Retrievals.email and
147+
v2.Retrievals.confidenceLevel
144148

145149
val createAccountUserDetailsRetrievals = userInfoRetrievals and v2Nino
146150

147151
def createAccountRetrievalResult(
148152
u: RetrievedUserDetails
149153
): Option[Name] ~ Option[LocalDate] ~ Option[ItmpName] ~ Option[LocalDate] ~ Option[ItmpAddress] ~ Option[
150154
String
151-
] ~ Option[String] = {
155+
] ~ ConfidenceLevel ~ Option[String] = {
152156
val dob = u.dateOfBirth
153157

154158
new ~(Some(Name(u.forename, u.surname)), dob) and
155159
Some(ItmpName(u.forename, None, u.surname)) and dob and
156-
u.address and u.email and u.nino
160+
u.address and u.email and ConfidenceLevel.L200 and u.nino
157161
}
158162

159163
val ggCredentials = GGCredId("id")
@@ -192,7 +196,7 @@ class HelpToSaveControllerSpec extends AuthSupport {
192196

193197
val retrieval = new ~(Some(Name(Some("a"), Some("b"))), Some(LocalDate.of(1, 2, 3))) and
194198
Some(ItmpName(Some("c"), None, Some("d"))) and Some(LocalDate.of(3, 2, 1)) and
195-
u.address and u.email and u.nino
199+
u.address and u.email and ConfidenceLevel.L200 and u.nino
196200

197201
val expectedRetrievedUserDetails =
198202
u.copy(forename = Some("c"), surname = Some("d"), dateOfBirth = Some(LocalDate.of(3, 2, 1)))

0 commit comments

Comments
 (0)