From c5c69581f987ac1737f8a904b266095d6b09fdab Mon Sep 17 00:00:00 2001 From: Marja Kari Date: Mon, 15 Jan 2024 09:31:06 +0200 Subject: [PATCH] =?UTF-8?q?raportoinnin=20kantakyselyt=20fiksattu,=20luont?= =?UTF-8?q?iaika=20l=C3=A4hetyksille=20kyselyihin?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SecurityConfiguration.scala | 3 +- .../vastaanotto/model/ViestiValidator.scala | 1 + .../resource/LahetysResource.scala | 2 +- .../business/KantaOperaatiot.scala | 52 ++++++++++++------- 4 files changed, 36 insertions(+), 22 deletions(-) diff --git a/integraatio/src/test/scala/fi/oph/viestinvalitys/SecurityConfiguration.scala b/integraatio/src/test/scala/fi/oph/viestinvalitys/SecurityConfiguration.scala index 0b08a28a..c2e58a48 100644 --- a/integraatio/src/test/scala/fi/oph/viestinvalitys/SecurityConfiguration.scala +++ b/integraatio/src/test/scala/fi/oph/viestinvalitys/SecurityConfiguration.scala @@ -58,7 +58,8 @@ class SecurityConfiguration { .securityMatcher("/login") .csrf(c => c.disable()) .formLogin(c => { - c.defaultSuccessUrl(APIConstants.HEALTHCHECK_PATH) +// c.defaultSuccessUrl(APIConstants.HEALTHCHECK_PATH) + c.defaultSuccessUrl("http://localhost:3000/lahetykset") }) .build() } diff --git a/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/ViestiValidator.scala b/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/ViestiValidator.scala index 914cf4fc..bbdeab62 100644 --- a/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/ViestiValidator.scala +++ b/lahetysrajapinta/src/main/scala/fi/oph/viestinvalitys/vastaanotto/model/ViestiValidator.scala @@ -1,6 +1,7 @@ package fi.oph.viestinvalitys.vastaanotto.model import fi.oph.viestinvalitys.vastaanotto.model.Lahetys.* +import fi.oph.viestinvalitys.vastaanotto.model.LahetysImpl.{LAHETYS_PRIORITEETTI_KORKEA, LAHETYS_PRIORITEETTI_NORMAALI} import fi.oph.viestinvalitys.vastaanotto.model.Viesti.* import fi.oph.viestinvalitys.vastaanotto.model.ViestiImpl.* import org.apache.commons.validator.routines.EmailValidator diff --git a/lambdat/raportointi/src/main/scala/fi/oph/viestinvalitys/raportointi/resource/LahetysResource.scala b/lambdat/raportointi/src/main/scala/fi/oph/viestinvalitys/raportointi/resource/LahetysResource.scala index 4aee0d83..502a7fd8 100644 --- a/lambdat/raportointi/src/main/scala/fi/oph/viestinvalitys/raportointi/resource/LahetysResource.scala +++ b/lambdat/raportointi/src/main/scala/fi/oph/viestinvalitys/raportointi/resource/LahetysResource.scala @@ -145,7 +145,7 @@ class LahetysResource { if (lahetys.isEmpty) return ResponseEntity.status(HttpStatus.GONE).build() - val lahetyksenOikeudet = kantaOperaatiot.getLahetyksenKayttooikeudet(lahetys.get.tunniste) + val lahetyksenOikeudet : Set[String] = kantaOperaatiot.getLahetystenKayttooikeudet(Seq(lahetys.get.tunniste)).getOrElse(lahetys.get.tunniste, Set.empty) val onLukuOikeudet = securityOperaatiot.onOikeusKatsellaEntiteetti(lahetys.get.omistaja, lahetyksenOikeudet) if (!onLukuOikeudet) return ResponseEntity.status(HttpStatus.FORBIDDEN).build() diff --git a/shared/src/main/scala/fi/oph/viestinvalitys/business/KantaOperaatiot.scala b/shared/src/main/scala/fi/oph/viestinvalitys/business/KantaOperaatiot.scala index 365bafd4..6dc5d6e3 100644 --- a/shared/src/main/scala/fi/oph/viestinvalitys/business/KantaOperaatiot.scala +++ b/shared/src/main/scala/fi/oph/viestinvalitys/business/KantaOperaatiot.scala @@ -72,10 +72,10 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { def getLahetys(tunniste: UUID): Option[Lahetys] = Await.result(db.run( sql""" - SELECT tunniste, otsikko, omistaja, lahettavapalvelu, lahettavanvirkailijanoid, lahettajannimi, lahettajansahkoposti, replyto, prioriteetti, luotu + SELECT tunniste, otsikko, omistaja, lahettavapalvelu, lahettavanvirkailijanoid, lahettajannimi, lahettajansahkoposti, replyto, prioriteetti, to_json(luotu::timestamptz)#>>'{}' FROM lahetykset WHERE tunniste=${tunniste.toString}::uuid - """.as[(String, String, String, String, String, String, String, String, String)].headOption), DB_TIMEOUT) + """.as[(String, String, String, String, String, String, String, String, String, String)].headOption), DB_TIMEOUT) .map((tunniste, otsikko, omistaja, lahettavapalvelu, lahettavanVirkailijanOid, lahettajanNimi, lahettajanSahkoposti, replyto, prioriteetti, luotu) => Lahetys(UUID.fromString(tunniste), otsikko, omistaja, lahettavapalvelu, Option.apply(lahettavanVirkailijanOid), Kontakti(Option.apply(lahettajanNimi), lahettajanSahkoposti), Option.apply(replyto), Prioriteetti.valueOf(prioriteetti), Instant.parse(luotu))) @@ -88,10 +88,11 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { def getLahetykset(): Seq[Lahetys] = Await.result(db.run( sql""" - SELECT tunniste, otsikko, omistaja, lahettavapalvelu, to_json(luotu::timestamptz)#>>'{}' + SELECT tunniste, otsikko, omistaja, lahettavapalvelu, lahettavanVirkailijanOid, lahettajanNimi, lahettajanSahkoposti, replyto, prioriteetti, to_json(luotu::timestamptz)#>>'{}' FROM lahetykset - """.as[(String, String, String, String, String)]), DB_TIMEOUT) - .map((tunniste, otsikko, omistaja, lahettavapalvelu, luotu) => Lahetys(UUID.fromString(tunniste), otsikko, omistaja, lahettavapalvelu, Instant.parse(luotu))) + """.as[(String, String, String, String, String, String, String, String, String, String)]), DB_TIMEOUT) + .map((tunniste, otsikko, omistaja, lahettavapalvelu, lahettavanVirkailijanOid, lahettajanNimi, lahettajanSahkoposti, replyTo, prioriteetti, luotu) => + Lahetys(UUID.fromString(tunniste), otsikko, omistaja, lahettavapalvelu, Option.apply(lahettavanVirkailijanOid), Kontakti(Option.apply(lahettajanNimi), lahettajanSahkoposti), Option.apply(replyTo), Prioriteetti.valueOf(prioriteetti), Instant.parse(luotu))) /** @@ -319,8 +320,8 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { DBIO.sequence(Seq(viestitLiitteetInsertActions, vastaanottajaInsertActions, vastaanottajanSiirtymaActions)) }) - Await.result(db.run(DBIO.sequence(Seq(lahetysInsertAction, kayttooikeusInsertActions, viestiInsertAction, metadataInsertActions, maskitInsertActions, liiteRelatedInsertActions)).transactionally), DB_TIMEOUT) - (Viesti(viestiTunniste, finalLahetysTunniste, otsikko, sisalto, sisallonTyyppi, kielet, maskit, lahettavanVirkailijanOID, lahettaja, replyTo, omistaja, prioriteetti), vastaanottajaEntiteetit) + Await.result(db.run(DBIO.sequence(Seq(lahetysInsertAction, viestiInsertAction, kayttooikeusInsertActions, metadataInsertActions, maskitInsertActions, liiteRelatedInsertActions)).transactionally), DB_TIMEOUT) + (this.getViestit(Seq(viestiTunniste)).find(v => true).get, vastaanottajaEntiteetit) } /** @@ -408,30 +409,41 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) { val viestitQuery = sql""" - SELECT tunniste, lahetys_tunniste, otsikko, sisalto, sisallontyyppi, kielet_fi, kielet_sv, kielet_en, lahettavanvirkailijanoid, - lahettajannimi, lahettajansahkoposti, replyto, lahettavapalvelu, omistaja, prioriteetti + SELECT viestit.tunniste, lahetys_tunniste, viestit.otsikko, sisalto, sisallontyyppi, kielet_fi, kielet_sv, kielet_en, replyto, viestit.omistaja, viestit.prioriteetti, + lahettavapalvelu, lahettavanvirkailijanoid, lahettajannimi, lahettajansahkoposti FROM viestit - WHERE lahetystunniste = ${lahetystunniste.toString}::uuid + JOIN lahetykset ON viestit.lahetys_tunniste=lahetykset.tunniste + WHERE viestit.lahetys_tunniste = ${lahetystunniste.toString}::uuid """ .as[(String, String, String, String, String, Boolean, Boolean, Boolean, String, String, String, String, String, String, String)] val maskitQuery = sql""" - SELECT m.viesti_tunniste, m.salaisuus, m.maski - FROM maskit m, viestit v - WHERE m.viesti_tunniste=v.tunniste and v.lahetys_tunniste = ${lahetystunniste.toString}::uuid - """ - .as[(String, String, String)] + SELECT viesti_tunniste, salaisuus, maski + FROM maskit + WHERE viesti_tunniste IN (SELECT viesti_tunniste FROM viestit WHERE lahetys_tunniste=${lahetystunniste.toString}::uuid) + """ + .as[(String, String, String)] val maskit: Map[String, Map[String, Option[String]]] = Await.result(db.run(maskitQuery), DB_TIMEOUT) .groupBy((viestiTunniste, salaisuus, maski) => viestiTunniste) .map((viestiTunniste, maskit) => viestiTunniste -> maskit.map((viestiTunniste, salaisuus, maski) => salaisuus -> Option.apply(maski)).toMap) Await.result(db.run(viestitQuery), DB_TIMEOUT) - .map((tunniste, lahetysTunniste, otsikko, sisalto, sisallonTyyppi, kieletFi, kieletSv, kieletEn, lahettavanVirkailijanOid, - lahettajanNimi, lahettajanSahkoposti, replyTo, lahettavaPalvelu, omistaja, prioriteetti) - => Viesti(UUID.fromString(tunniste), UUID.fromString(lahetysTunniste), otsikko, sisalto, SisallonTyyppi.valueOf(sisallonTyyppi), - toKielet(kieletFi, kieletSv, kieletEn), maskit.get(tunniste).getOrElse(Map.empty), Option.apply(lahettavanVirkailijanOid), Kontakti(Option.apply(lahettajanNimi), lahettajanSahkoposti), - Option.apply(replyTo), Option.apply(lahettavaPalvelu), omistaja, Prioriteetti.valueOf(prioriteetti))) + .map((tunniste, lahetysTunniste, otsikko, sisalto, sisallonTyyppi, kieletFi, kieletSv, kieletEn, replyTo, omistaja, prioriteetti, lahettavapalvelu, lahettavanvirkailijanoid, lahettajannimi, lahettajansahkoposti) + => Viesti( + tunniste = UUID.fromString(tunniste), + lahetys_tunniste = UUID.fromString(lahetysTunniste), + otsikko = otsikko, + sisalto = sisalto, + sisallonTyyppi = SisallonTyyppi.valueOf(sisallonTyyppi), + kielet = toKielet(kieletFi, kieletSv, kieletEn), + maskit = maskit.get(tunniste).getOrElse(Map.empty), + lahettavaPalvelu = lahettavapalvelu, + lahettavanVirkailijanOID = Option.apply(lahettavanvirkailijanoid), + lahettaja = Kontakti(Option.apply(lahettajannimi), lahettajansahkoposti), + replyTo = Option.apply(replyTo), + omistaja = omistaja, + prioriteetti = Prioriteetti.valueOf(prioriteetti))) def getViestinLiitteet(viestiTunnisteet: Seq[UUID]): Map[UUID, Seq[Liite]] =