diff --git a/src/main/kotlin/no/nav/altinn/admin/common/Functions.kt b/src/main/kotlin/no/nav/altinn/admin/common/Functions.kt index aee4296..4b59aa1 100644 --- a/src/main/kotlin/no/nav/altinn/admin/common/Functions.kt +++ b/src/main/kotlin/no/nav/altinn/admin/common/Functions.kt @@ -4,4 +4,4 @@ import java.util.* internal fun randomUuid() = UUID.randomUUID().toString() internal fun decodeBase64(s: String): ByteArray = Base64.getDecoder().decode(s) -internal fun encodeBase64(bytes: ByteArray): String = Base64.getEncoder().encodeToString(bytes) \ No newline at end of file +fun encodeBase64(bytes: ByteArray): String = Base64.getEncoder().encodeToString(bytes) diff --git a/src/main/kotlin/no/nav/altinn/admin/service/dq/AltinnDQService.kt b/src/main/kotlin/no/nav/altinn/admin/service/dq/AltinnDQService.kt index a8bd326..a34f9e8 100644 --- a/src/main/kotlin/no/nav/altinn/admin/service/dq/AltinnDQService.kt +++ b/src/main/kotlin/no/nav/altinn/admin/service/dq/AltinnDQService.kt @@ -57,11 +57,13 @@ class AltinnDQService(private val env: Environment, iDownloadQueueExternalBasicF return DqResponseFormData("Failed", "Unknown error occurred when getting rights registry, check logger", FormData("", null)) } - fun getDownloadQueueItems(serviceCode: String): DqItems { + fun getDownloadQueueItems(serviceCode: String, serviceEdtionCode: String): DqItems { try { val dqItems = iDownloadQueueExternalBasic.getDownloadQueueItems(altinnUsername, altinnUserPassword, serviceCode).downloadQueueItemBE var dqList = mutableListOf() for (dqItem in dqItems) { + if (serviceEdtionCode.isNotEmpty() && serviceEdtionCode != dqItem.serviceEditionCode.toString()) + continue dqList.add(DqItem(dqItem.archiveReference, dqItem.serviceCode, dqItem.serviceEditionCode.toString() diff --git a/src/main/kotlin/no/nav/altinn/admin/service/dq/Routes.kt b/src/main/kotlin/no/nav/altinn/admin/service/dq/Routes.kt index 5ba6014..d558cd2 100644 --- a/src/main/kotlin/no/nav/altinn/admin/service/dq/Routes.kt +++ b/src/main/kotlin/no/nav/altinn/admin/service/dq/Routes.kt @@ -20,8 +20,9 @@ import no.nav.altinn.admin.common.API_V1 fun Routing.dqAPI(altinnDqService: AltinnDQService, environment: Environment) { getFormMessage(altinnDqService, environment) getDqItems(altinnDqService, environment) + getDqItemsSec(altinnDqService, environment) logger.info { "Local env ? ${environment.application.localEnv}" } - if (environment.application.localEnv == "preprod") { + if (environment.application.localEnv != "prod") { purgeItem(altinnDqService, environment) } } @@ -40,13 +41,14 @@ fun Routing.getFormMessage(altinnDqService: AltinnDQService, environment: Enviro ok(), serviceUnavailable(), badRequest())) { param -> - if (param.arNummer.isNullOrEmpty()) { + val arNummer = param.arNummer.trim() + if (arNummer.isNullOrEmpty()) { call.respond(HttpStatusCode.BadRequest, AnError("Ugyldig AR nummer oppgitt")) return@get } try { - val dqResponse = altinnDqService.getFormData(param.arNummer) + val dqResponse = altinnDqService.getFormData(arNummer) if (dqResponse.status == "Ok") call.respond(dqResponse.formData) else @@ -70,19 +72,60 @@ fun Routing.getDqItems(altinnDqService: AltinnDQService, environment: Environmen BasicAuthSecurity(), ok(), serviceUnavailable(), badRequest())) { param -> - if (param.tjenesteKode.isNullOrEmpty()) { + val tjenesteKode = param.tjenesteKode.trim() + if (tjenesteKode.isNullOrEmpty()) { call.respond(HttpStatusCode.BadRequest, AnError("Blank tjeneste kode oppgitt")) return@get } val dqList = environment.dqService.serviceCodes.split(",") - if (!dqList.contains(param.tjenesteKode)) { + if (!dqList.contains(tjenesteKode)) { call.respond(HttpStatusCode.BadRequest, AnError("Ugyldig tjeneste kode oppgitt")) return@get } try { - val dqResponse = altinnDqService.getDownloadQueueItems(param.tjenesteKode) + val dqResponse = altinnDqService.getDownloadQueueItems(tjenesteKode, "") + call.respond(dqResponse) + } catch (ee: Exception) { + logger.error { + "IDownloadQueueExternalBasic.GetArchivedFormTaskBasicDQ feilet \n" + + "\n ErrorMessage ${ee.message}" + + "\n LocalizedErrorMessage ${ee.localizedMessage}" + } + call.respond(HttpStatusCode.InternalServerError, AnError("IDownloadQueueExternalBasic.GetArchivedFormTaskBasicDQ feilet: ${ee.message}")) + } + } + +@Group(GROUP_NAME) +@Location("$API_V1/altinn/dq/elementer/{tjenesteKode}/{utgaveKode}") +data class TjenesteOgUtgaveKode(val tjenesteKode: String, val utgaveKode: String) + +fun Routing.getDqItemsSec(altinnDqService: AltinnDQService, environment: Environment) = + get("Hent elementer som ligger på download queue filtrert med utgave kode".securityAndReponds( + BasicAuthSecurity(), ok(), serviceUnavailable(), badRequest())) { + param -> + + val tjenesteKode = param.tjenesteKode.trim() + if (tjenesteKode.isNullOrEmpty()) { + call.respond(HttpStatusCode.BadRequest, AnError("Blank tjeneste kode oppgitt")) + return@get + } + + val utgaveKode = param.utgaveKode.trim() + if (utgaveKode.isNullOrEmpty()) { + call.respond(HttpStatusCode.BadRequest, AnError("Blank utgave kode oppgitt")) + return@get + } + + val dqList = environment.dqService.serviceCodes.split(",") + if (!dqList.contains(tjenesteKode)) { + call.respond(HttpStatusCode.BadRequest, AnError("Ugyldig tjeneste kode oppgitt")) + return@get + } + + try { + val dqResponse = altinnDqService.getDownloadQueueItems(tjenesteKode, utgaveKode) call.respond(dqResponse) } catch (ee: Exception) { logger.error { @@ -103,13 +146,14 @@ fun Routing.purgeItem(altinnDqService: AltinnDQService, environment: Environment BasicAuthSecurity(), ok(), serviceUnavailable(), badRequest())) { param -> - if (param.arNummer.isNullOrEmpty()) { + val arNummer = param.arNummer.trim() + if (arNummer.isNullOrEmpty()) { call.respond(HttpStatusCode.BadRequest, AnError("Ugyldig AR nummer oppgitt")) return@delete } try { - val dqResponse = altinnDqService.purgeItem(param.arNummer) + val dqResponse = altinnDqService.purgeItem(arNummer) call.respond(dqResponse) } catch (ee: Exception) { logger.error { diff --git a/src/main/kotlin/no/nav/altinn/admin/service/srr/AltinnSRRService.kt b/src/main/kotlin/no/nav/altinn/admin/service/srr/AltinnSRRService.kt index f93de75..8f026fa 100644 --- a/src/main/kotlin/no/nav/altinn/admin/service/srr/AltinnSRRService.kt +++ b/src/main/kotlin/no/nav/altinn/admin/service/srr/AltinnSRRService.kt @@ -12,7 +12,7 @@ import no.nav.altinn.admin.Environment import no.nav.altinn.admin.metrics.Metrics import javax.xml.datatype.DatatypeFactory import java.time.ZonedDateTime -import java.util.GregorianCalendar +import java.util.* private val logger = KotlinLogging.logger { } diff --git a/src/test/kotlin/no/nav/altinn/admin/service/dq/AltinnDQServiceSpek.kt b/src/test/kotlin/no/nav/altinn/admin/service/dq/AltinnDQServiceSpek.kt new file mode 100644 index 0000000..7d6e3d8 --- /dev/null +++ b/src/test/kotlin/no/nav/altinn/admin/service/dq/AltinnDQServiceSpek.kt @@ -0,0 +1,89 @@ +package no.nav.altinn.admin.service.dq + +import io.ktor.http.HttpHeaders +import io.ktor.http.HttpMethod +import io.ktor.http.HttpStatusCode +import io.ktor.server.testing.TestApplicationEngine +import io.ktor.server.testing.createTestEnvironment +import io.ktor.server.testing.handleRequest +import no.nav.altinn.admin.Environment +import no.nav.altinn.admin.common.ApplicationState +import no.nav.altinn.admin.common.InMemoryLDAPServer +import no.nav.altinn.admin.common.encodeBase64 +import no.nav.altinn.admin.mainModule +import org.amshove.kluent.shouldEqual +import org.spekframework.spek2.Spek +import org.spekframework.spek2.style.specification.describe + +object AltinnDQServiceSpek : Spek({ + val applicationState = ApplicationState(running = true, initialized = true) + + describe("Test all authorized calls") { + context("Get Route /api/v1/altinn/dq/elementer/{tjenesteKode}") { + val engine = TestApplicationEngine(createTestEnvironment()) + val testEnvironment = Environment() + + beforeGroup { + InMemoryLDAPServer.start() + engine.start(wait = false) + engine.application.mainModule(testEnvironment, applicationState = applicationState) + } + with(engine) { + context("Route /api/v1/altinn/dq/elementer/{tjenesteKode}") { + it("Hent elementer i DownloadQueue med ugyldig tjenestekode") { + val params = "2234" + val req = handleRequest(HttpMethod.Get, "/api/v1/altinn/dq/elementer/$params") { + addHeader(HttpHeaders.Accept, "application/json") + addHeader("Content-Type", "application/json") + addHeader(HttpHeaders.Authorization, "Basic ${encodeBase64("n000001:itest1".toByteArray())}") + } + + req.requestHandled shouldEqual true + req.response.status() shouldEqual HttpStatusCode.BadRequest + } + it("Hent melding fra DownloadQueue med tomt AR nummer") { + val arNummer = " " + val req = handleRequest(HttpMethod.Get, "/api/v1/altinn/dq/hent/$arNummer") { + addHeader(HttpHeaders.Accept, "application/json") + addHeader("Content-Type", "application/json") + addHeader(HttpHeaders.Authorization, "Basic ${encodeBase64("n000001:itest1".toByteArray())}") + } + + req.requestHandled shouldEqual true + req.response.status() shouldEqual HttpStatusCode.BadRequest + } + } + } + afterGroup { + InMemoryLDAPServer.stop() + } + } + context("Delete Route /api/v1/altinn/dq/slett/{arNummer}") { + val engine = TestApplicationEngine(createTestEnvironment()) + val testEnvironment = Environment() + + beforeGroup { + InMemoryLDAPServer.start() + engine.start(wait = false) + engine.application.mainModule(testEnvironment, applicationState = applicationState) + } + with(engine) { + context("Route /api/v1/altinn/dq/slett/{arNummer}") { + it("Slett melding fra DownloadQueue med tomt AR nummer") { + val arNummer = " " + val req = handleRequest(HttpMethod.Delete, "/api/v1/altinn/dq/slett/$arNummer") { + addHeader("Content-Type", "application/json") + addHeader(HttpHeaders.Authorization, "Basic ${encodeBase64("n000002:itest2".toByteArray())}") + } + + req.requestHandled shouldEqual true + req.response.status() shouldEqual HttpStatusCode.BadRequest + } + } + } + afterGroup { + InMemoryLDAPServer.stop() + } + } + } +}) diff --git a/src/test/kotlin/no/nav/altinn/admin/service/srr/AltinnSRRServiceSpek.kt b/src/test/kotlin/no/nav/altinn/admin/service/srr/AltinnSRRServiceSpek.kt index 2b30be3..8d8ae90 100644 --- a/src/test/kotlin/no/nav/altinn/admin/service/srr/AltinnSRRServiceSpek.kt +++ b/src/test/kotlin/no/nav/altinn/admin/service/srr/AltinnSRRServiceSpek.kt @@ -16,13 +16,13 @@ import no.altinn.schemas.services.register.srr._2015._06.DeleteRightResponseList import no.nav.altinn.admin.Environment import no.nav.altinn.admin.common.ApplicationState import no.nav.altinn.admin.common.InMemoryLDAPServer +import no.nav.altinn.admin.common.encodeBase64 import no.nav.altinn.admin.common.objectMapper import no.nav.altinn.admin.common.xmlMapper import no.nav.altinn.admin.mainModule import org.amshove.kluent.shouldEqual import org.spekframework.spek2.Spek import org.spekframework.spek2.style.specification.describe -import java.util.* object AltinnSRRServiceSpek : Spek({ val applicationState = ApplicationState(running = true, initialized = true) @@ -332,5 +332,3 @@ object AltinnSRRServiceSpek : Spek({ } } }) - -private fun encodeBase64(bytes: ByteArray): String = Base64.getEncoder().encodeToString(bytes) \ No newline at end of file