From 277ab3c165b82527afee8d2ceed16b3f9acea4b0 Mon Sep 17 00:00:00 2001 From: Delegue Alexandre Date: Thu, 17 Oct 2024 13:01:03 +0200 Subject: [PATCH] Incoherent behavior with template and expired consent (#198) * Incoherent behavior with template and expired consent * Swagger + IHM label --- docker-compose.yml | 2 +- .../app/controllers/ConsentController.scala | 2 +- nio-server/app/models/ConsentFact.scala | 23 +++++++++++++------ nio-server/app/models/Permission.scala | 2 +- .../app/service/ConsentManagerService.scala | 5 +++- nio-server/conf/swagger/swagger.json | 7 ++++++ .../src/nio/pages/GroupPermissionPage.js | 2 +- 7 files changed, 31 insertions(+), 12 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6c8cf37..a88a062 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,7 +22,7 @@ services: - nio_zookeeper environment: KAFKA_BROKER_ID: 1 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:32181 + KAFKA_ZOOKEEPER_CONNECT: nio_zookeeper:32181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:29092 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" KAFKA_DELETE_TOPIC_ENABLE: "true" diff --git a/nio-server/app/controllers/ConsentController.scala b/nio-server/app/controllers/ConsentController.scala index ec02be2..8864a0c 100644 --- a/nio-server/app/controllers/ConsentController.scala +++ b/nio-server/app/controllers/ConsentController.scala @@ -86,7 +86,7 @@ class ConsentController( key = pg.key, label = pg.label, consents = pg.permissions.map { p => - Consent(key = p.key, label = p.label, checked = p.checkDefault(), expiredAt = p.getValidityPeriod) + Consent(key = p.key, label = p.label, checked = p.checkDefault(), expiredAt = None) } ) diff --git a/nio-server/app/models/ConsentFact.scala b/nio-server/app/models/ConsentFact.scala index 4b01319..59d2e43 100644 --- a/nio-server/app/models/ConsentFact.scala +++ b/nio-server/app/models/ConsentFact.scala @@ -54,6 +54,14 @@ object DoneBy { } case class Consent(key: String, label: String, checked: Boolean, expiredAt: Option[LocalDateTime] = None) { + + def isActive: Boolean = { + val now = LocalDateTime.now(Clock.systemUTC()) + this.expiredAt.isEmpty || this.expiredAt.exists(d => d.isAfter(now)) + } + + def isExpired: Boolean = !isActive + def asXml(): Elem = {key} @@ -87,6 +95,9 @@ object Consent { } case class ConsentGroup(key: String, label: String, consents: Seq[Consent]) { + + def activeConsents: Seq[Consent] = this.consents.filter(_.isActive) + def asXml(): Elem = {key} @@ -424,7 +435,7 @@ case class ConsentFact( {version} - {groups.map(_.asXml())} + {groups.filter(cf => cf.consents.nonEmpty).map(_.asXml())} { @@ -472,12 +483,10 @@ case class ConsentFact( if (showExpiredConsents) { this } else { - val now = LocalDateTime.now(Clock.systemUTC()) - this.copy(groups = this.groups.map(group => - group.copy(consents = group.consents.toList.filter(c => - c.expiredAt.isEmpty || c.expiredAt.exists(d => d.isAfter(now)) - )) - )) + this.copy(groups = this.groups + .map(group => group.copy(consents = group.activeConsents)) + .filter(group => group.consents.nonEmpty) + ) } } } diff --git a/nio-server/app/models/Permission.scala b/nio-server/app/models/Permission.scala index 6c74c7a..67b4621 100644 --- a/nio-server/app/models/Permission.scala +++ b/nio-server/app/models/Permission.scala @@ -12,7 +12,7 @@ import play.api.libs.json.* import play.api.libs.json.Reads.* import utils.Result.AppErrors -import java.time.{Clock, LocalDateTime, ZoneId} +import java.time.{Clock, LocalDateTime} import scala.concurrent.duration.{Duration, FiniteDuration} import scala.util.{Failure, Success, Try} import scala.xml.{Elem, NodeBuffer, NodeSeq} diff --git a/nio-server/app/service/ConsentManagerService.scala b/nio-server/app/service/ConsentManagerService.scala index bc0431c..68793d0 100644 --- a/nio-server/app/service/ConsentManagerService.scala +++ b/nio-server/app/service/ConsentManagerService.scala @@ -394,9 +394,12 @@ class ConsentManagerService( } .getOrElse(group) + val consentFactFiltered = consentFact.filterExpiredConsent(false) + val groupsUpdated: Seq[ConsentGroup] = template.groups.map { group => - val maybeGroup = consentFact.groups.find(cg => cg.key == group.key && cg.label == group.label) + val maybeGroup = consentFactFiltered.groups + .find(cg => cg.key == group.key && cg.label == group.label) mergeConsentGroup(maybeGroup, group) } diff --git a/nio-server/conf/swagger/swagger.json b/nio-server/conf/swagger/swagger.json index d42e877..76f3cfa 100644 --- a/nio-server/conf/swagger/swagger.json +++ b/nio-server/conf/swagger/swagger.json @@ -931,6 +931,13 @@ "description": "L'identifiant utilisateur", "required": true, "type": "string" + }, + { + "name": "showExpiredConsents", + "in": "query", + "description": "Consentement expiré oui / non", + "required": false, + "type": "boolean" } ], "responses": { diff --git a/nio-server/javascript/src/nio/pages/GroupPermissionPage.js b/nio-server/javascript/src/nio/pages/GroupPermissionPage.js index e5d37c7..4ccc5e6 100644 --- a/nio-server/javascript/src/nio/pages/GroupPermissionPage.js +++ b/nio-server/javascript/src/nio/pages/GroupPermissionPage.js @@ -200,7 +200,7 @@ class Permission extends Component { possibleValues={["OptIn", "OptOut"]} errorKey={`${this.props.prefixe}permissions.${this.props.index}.type.required`}/> - this.onChange(e, "validityPeriod")} disabled={this.props.readOnlyMode}