Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OK-751 käyttöoikeuskäsittelyn tehostamista #84

Merged
merged 32 commits into from
Dec 19, 2024
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
e8224f9
OK-439 aikarajaus kantahakuun, parametrien välitys frontista bäkkäril…
marjakari Oct 3, 2024
c3f9d34
OK-439 fiksattu dev käyttäjän roolit, päivitetty datepicker
marjakari Oct 15, 2024
68ea45f
OK-439 suodatus aikavälillä toimivaksi, korvattu date-fns-tz dayjs:ll…
marjakari Oct 23, 2024
862f9b5
OK-439 katselmointihuomioita ja typescript-herjojen ohitus
marjakari Oct 25, 2024
f6031e4
OK-439 korjattu asiointikielen väärä polku
marjakari Oct 25, 2024
22f004c
OK-439 pakitettu build.yml säätö
marjakari Oct 25, 2024
104d158
OK-652 setup next env kokeilu
marjakari Nov 14, 2024
3c0661e
OK-652 siivoiluja
marjakari Nov 15, 2024
db6b906
debug-lokitusta
marjakari Nov 18, 2024
7e18743
OK-652 dekoodataan hakustring
marjakari Nov 18, 2024
2bc85c4
OK-751 käyttäjän oikeudet sessioon WIP
marjakari Nov 27, 2024
aaec2b9
OK-751 käyttöoikeuksien sessiotallennukseen yksikkötestejä, asiointik…
marjakari Nov 27, 2024
c2e7162
OK-751 tarkistetaan onko tulllut uusia käyttöoikeuksia kantaan ja päi…
marjakari Nov 28, 2024
6daad69
OK-751 käsitellään käyttäjän käyttöoikeuksista vain ne mitä palvelust…
marjakari Dec 4, 2024
d56d2b8
integraatiotesti raportointi-apille
marjakari Dec 5, 2024
5d3b90e
OK-443 korjattu client-kirjaston login-polku ja täydennetty integraat…
marjakari Dec 12, 2024
6d8efaf
OK-443 päivitetty versio
marjakari Dec 12, 2024
e7617fc
OK-443 päivitetty versio kaikkiin aliprojektihin
marjakari Dec 12, 2024
89dec98
OK-443 julkaistaan github ackagesissa kaikki tarvittavat moduulit
marjakari Dec 12, 2024
86c7d68
OK-443 maven syntaksi kirjasto-deployhin
marjakari Dec 12, 2024
f5e034c
OK-443 deployataan toistaiseksi kaikki
marjakari Dec 12, 2024
bb09091
OK-443 maven flatten plugin kirjastoon
marjakari Dec 12, 2024
0bd6f10
OK-443 snapshot-version kovakoodaus pois ja muuttuja tilalle
marjakari Dec 12, 2024
2ab7fd7
OK-443 päivitetty client-kirjaston readme ja käyttöoikeusattribuutit …
marjakari Dec 16, 2024
395f370
OK-443 kokeillaan ilman flatten-pluginia
marjakari Dec 16, 2024
44cb0b7
OK-443 kokeillaan ilman revision-konffia pomissa
marjakari Dec 16, 2024
4336dd9
OK-443 flatten plugin takaisin
marjakari Dec 16, 2024
56b582a
OK-443 revisio järkevämmin takaisin, client-kirjastossa käyttöoikeusr…
marjakari Dec 16, 2024
5399a77
OK-443 versionnosto
marjakari Dec 16, 2024
4052f22
OK-443 clientiin käyttöoikeusrajoituksille builder ja testin päivitys
marjakari Dec 16, 2024
20bfd02
OK-443 static metodit pois java interfaceista
marjakari Dec 17, 2024
0264754
OK-443 readme
marjakari Dec 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class BaseIntegraatioTesti {

val LOG = LoggerFactory.getLogger(this.getClass)

val localstack: LocalStackContainer = new LocalStackContainer(new DockerImageName("localstack/localstack:2.2.0"))
val localstack: LocalStackContainer = new LocalStackContainer(DockerImageName.parse("localstack/localstack:2.2.0"))
.withServices(Service.SQS, Service.SES, Service.CLOUDWATCH)
.withLogConsumer(frame => LOG.info(frame.getUtf8StringWithoutLineEnding))
.withExposedPorts(4566)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class IntegraatioTest extends BaseIntegraatioTesti {
lahetysTunniste = lahetysTunniste,
prioriteetti = prioriteetti,
sailytysaika = sailytysAika,
kayttooikeusRajoitukset = Optional.of(java.util.List.of(KayttooikeusImpl(Optional.of("1.2.3"), Optional.of("OIKEUS1")))),
kayttooikeusRajoitukset = Optional.of(java.util.List.of(KayttooikeusImpl(Optional.of("1.2.246.562.10.00000000000000006666"), Optional.of("OIKEUS1")))),
metadata = Optional.of(java.util.Map.of("avain", java.util.List.of("arvo1", "arvo2"))),
idempotencyKey = Optional.ofNullable(idempotencyKey)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ object LocalUtil {
val kayttooikeus = Kayttooikeus("APP_OIKEUS", Some("1.2.246.562.10.240484683010"))
val kantaOperaatiot = new KantaOperaatiot(DbUtil.database)
val (lahetyksia, _, _) = kantaOperaatiot.searchLahetykset(Option.empty, 20,
Option.apply(kantaOperaatiot.getKayttooikeusTunnisteet(Set(kayttooikeus).toSeq)))
Option.apply(kantaOperaatiot.getKayttooikeusTunnisteet(Set(kayttooikeus).toSeq)._1))
if(lahetyksia.isEmpty || lahetyksia.length < 3) {
// lähetyksiä massaviestillä jossa samalla viestillä useita vastaanottajia
Range(0, 20).map(counter => {
Expand Down

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion kuormatestaus/script.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ function getViestiPayload(korkea, liite, testdataItem) {
' "sailytysaika": 365,\n' +
' "kayttooikeusRajoitukset": [{\n' +
' "oikeus": "APP_ATARU_HAKEMUS_CRUD",\n' +
' "organisaatio": "1.2.246.562.00.000000000000000066' + Math.floor(Math.random()*200) + '"\n' +
' "organisaatio": "1.2.246.562.10.000000000000000066' + Math.floor(Math.random()*200) + '"\n' +
' }],\n' +
' "metadata": {\n' +
' "key": ["value"]\n' +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ class MaskitBuilderImpl extends Maskit.MaskitBuilder {
* @param oikeus
*/
case class KayttooikeusImpl(
@(Schema @field)(example = "1.2.246.562.00.00000000000000006666", requiredMode=RequiredMode.REQUIRED, maxLength = ViestiImpl.VIESTI_ORGANISAATIO_MAX_PITUUS)
@(Schema @field)(example = "1.2.246.562.10.240484683010", requiredMode=RequiredMode.REQUIRED, maxLength = ViestiImpl.VIESTI_ORGANISAATIO_MAX_PITUUS)
@BeanProperty organisaatio: Optional[String],

@(Schema @field)(example = "APP_ATARU_HAKEMUS_CRUD", requiredMode=RequiredMode.REQUIRED, maxLength = ViestiImpl.VIESTI_OIKEUS_MAX_PITUUS)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class ViestiTest {
lahetysTunniste = Optional.of("3fa85f64-5717-4562-b3fc-2c963f66afa6"),
prioriteetti = Optional.of(LahetysImpl.LAHETYS_PRIORITEETTI_NORMAALI),
sailytysaika = Optional.of(10),
kayttooikeusRajoitukset = Optional.of(java.util.List.of(KayttooikeusImpl(Optional.of("1.2.3"), Optional.of("oikeus")))),
kayttooikeusRajoitukset = Optional.of(java.util.List.of(KayttooikeusImpl(Optional.of("1.2.246.562.10.00000000000000006666"), Optional.of("oikeus")))),
metadata = Optional.of(java.util.Map.of("key", java.util.List.of("value"))),
idempotencyKey = Optional.of("avain")
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package fi.oph.viestinvalitys.raportointi.configuration

import com.zaxxer.hikari.HikariDataSource
import fi.oph.viestinvalitys.raportointi.App
import fi.oph.viestinvalitys.raportointi.resource.RaportointiAPIConstants
import fi.oph.viestinvalitys.util.DbUtil
import fi.vm.sade.javautils.kayttooikeusclient.OphUserDetailsServiceImpl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import fi.oph.viestinvalitys.util.ConfigurationUtil
import fi.vm.sade.javautils.nio.cas.{CasClient, CasClientBuilder}
import org.asynchttpclient.RequestBuilder
import org.slf4j.LoggerFactory
import upickle.default.*

import java.util.concurrent.TimeUnit
import scala.concurrent.Await
Expand Down Expand Up @@ -37,7 +36,7 @@ class RealONRService() extends ONRService {
"JSESSIONID"))

def haeAsiointikieli(personOid: String): Either[Throwable, String] =
LOG.info("Haetaan tiedot oppijanumerorekisteristä")
LOG.debug(s"Haetaan tiedot oppijanumerorekisteristä oidille $personOid")
val url = s"https://virkailija.$opintopolkuDomain/oppijanumerorekisteri-service/henkilo/$personOid/asiointiKieli"
fetch(url) match
case Left(e) => Left(e)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class OrganisaatioCache {

val childOidsLoader = new CacheLoader[String, Response[String]] {
def load(oid: String): Response[String] =
LOG.debug(s"Ladataan lapsiorganisaatio-cache oidille $oid")
val uri: Uri = uri"https://virkailija.$opintopolkuDomain/organisaatio-service/api/$oid/childoids?$queryParams"
quickRequest
.headers(headers)
Expand All @@ -31,12 +32,14 @@ class OrganisaatioCache {
.send()
}

val orgHierarkiaLoader = new CacheLoader[Set[String], Response[String]] {
def load(oids: Set[String]): Response[String] =
val uri: Uri = uri"https://virkailija.$opintopolkuDomain/organisaatio-service/api/hierarkia/hae?oidRestrictionList=$oids&$hierarkiaQueryParams"
val parentOidsLoader = new CacheLoader[String, Response[String]] {
def load(oid: String): Response[String] =
LOG.debug(s"Ladataan parentorganisaatio-cache oidille $oid")
val uri: Uri = uri"https://virkailija.$opintopolkuDomain/organisaatio-service/api/$oid/parentoids"
quickRequest
.headers(headers)
.cookie("CSRF", App.CALLER_ID)
.readTimeout(3.minutes)
.get(uri)
.send()
}
Expand All @@ -46,9 +49,10 @@ class OrganisaatioCache {
.expireAfterAccess(60, TimeUnit.MINUTES)
.build(childOidsLoader)

val orgHierarkiaCache: LoadingCache[Set[String], Response[String]] = CacheBuilder.newBuilder()
val parentOidsCache: LoadingCache[String, Response[String]] = CacheBuilder.newBuilder()
.maximumSize(1500)
.expireAfterAccess(60, TimeUnit.MINUTES)
.build(orgHierarkiaLoader)
.expireAfterAccess(1, TimeUnit.DAYS)
.build(parentOidsLoader)

}

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package fi.oph.viestinvalitys.raportointi.integration

import fi.oph.viestinvalitys.raportointi.security.SecurityOperaatiot
import org.slf4j.LoggerFactory
import sttp.client4.Response
import upickle.default.*
Expand All @@ -11,24 +10,30 @@ class OrganisaatioService {
val LOG = LoggerFactory.getLogger(classOf[OrganisaatioService])

def getAllChildOidsFlat(oid: String): Set[String] =
LOG.info(s"Haetaan lapsiorganisaatiot cachesta oidille $oid")
if (!OrganisaatioOid.isValid(oid))
LOG.error(s"Organisaation oid $oid on virheellinen")
LOG.error(s"Organisaation oid $oid on virheellinen, ei voitu hakea lapsiorganisaatioita")
throw new RuntimeException(s"Organisaation oid $oid on virheellinen")
val response: Response[String] = OrganisaatioCache.childOidsCache.get(oid)
response.code.code match
case 200 => read[List[String]](response.body).toSet
case _ =>
LOG.error(s"organisaatioiden haku epäonnistui, status ${response.code.code} error ${response.statusText}")
LOG.error(s"lapsiorganisaatioiden haku epäonnistui, status ${response.code.code} error ${response.statusText}")
throw new RuntimeException(s"Organisaatioiden haku epäonnistui: ${response.statusText}")

def getOrganisaatioHierarkia(): List[Organisaatio] =
val securityOperaatiot = new SecurityOperaatiot
val response: Response[String] = OrganisaatioCache.orgHierarkiaCache.get(securityOperaatiot.getCasOrganisaatiot())
response.code.code match
case 200 =>
val orgs = read[OrganisaatioHierarkia](response.body)
read[OrganisaatioHierarkia](response.body).organisaatiot
case _ =>
LOG.error(s"organisaatioiden haku epäonnistui, status ${response.code.code} error ${response.statusText}")
throw new RuntimeException(s"Organisaatioiden haku epäonnistui: ${response.statusText}")
def getParentOids(oid: String): Set[String] =
LOG.info(s"Haetaan parent-organisaatiot cachesta oidille $oid")
if (!OrganisaatioOid.isValid(oid))
// HUOM! toistaiseksi ei heitetä poikkeusta koska esim testiympäristöjen datassa on
// käyttöoikeusrajoituksissa epävalideja organisaatio-oideja
LOG.error(s"Organisaation oid $oid on virheellinen, ei voitu hakea parent-organisaatioita")
Set.empty
else
val response: Response[String] = OrganisaatioCache.parentOidsCache.get(oid)
response.code.code match
case 200 => read[List[String]](response.body).toSet
case _ =>
LOG.error(s"parent-organisaatioiden haku epäonnistui, status ${response.code.code} error ${response.statusText}")
throw new RuntimeException(s"Organisaatioiden haku epäonnistui: ${response.statusText}")

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package fi.oph.viestinvalitys.raportointi.resource

import fi.oph.viestinvalitys.raportointi.integration.{ONRService}
import fi.oph.viestinvalitys.raportointi.integration.ONRService
import fi.oph.viestinvalitys.raportointi.security.SecurityOperaatiot
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.responses.ApiResponse
import io.swagger.v3.oas.annotations.tags.Tag
import jakarta.servlet.http.{HttpServletRequest, HttpSession}
import org.slf4j.LoggerFactory
import org.springframework.http.{HttpStatus, MediaType, ResponseEntity}
import org.springframework.security.core.context.SecurityContextHolder
import org.springframework.web.bind.annotation.{GetMapping, RequestMapping, RestController}
import upickle.default.*

Expand All @@ -27,10 +29,10 @@ class HenkiloResource {
responses = Array(
new ApiResponse(responseCode = "200", description = "Palauttaa asiointikielen"),
))
def getAsiointikieli() = {
LOG.info("Haetaan asiointikieli")
val securityOperaatiot = new SecurityOperaatiot
val result = OnrService.haeAsiointikieli(securityOperaatiot.getIdentiteetti())
def getAsiointikieli(request: HttpServletRequest) = {
LOG.debug("Haetaan käyttäjän asiointikieli")
val session: HttpSession = request.getSession(false)
val result = OnrService.haeAsiointikieli(SecurityContextHolder.getContext.getAuthentication.getName())
result match
case Left(e) =>
LOG.error("Asiointikielen haku epäonnistui", e)
Expand Down
Loading
Loading