Valider les resource entrente #91

Merged
flecomte merged 46 commits from 21-valid-input into master 2021-04-16 03:27:11 +02:00
Showing only changes of commit 3faf2e5f0d - Show all commits

View File

@@ -4,11 +4,14 @@ import com.github.jasync.sql.db.postgresql.exceptions.GenericDatabaseException
import fr.dcproject.common.security.AccessDeniedException import fr.dcproject.common.security.AccessDeniedException
import fr.dcproject.component.auth.ForbiddenException import fr.dcproject.component.auth.ForbiddenException
import fr.dcproject.component.auth.user import fr.dcproject.component.auth.user
import io.konform.validation.ValidationResult
import io.ktor.application.ApplicationCall
import io.ktor.application.call import io.ktor.application.call
import io.ktor.features.NotFoundException import io.ktor.features.NotFoundException
import io.ktor.features.StatusPages import io.ktor.features.StatusPages
import io.ktor.http.HttpStatusCode import io.ktor.http.HttpStatusCode
import io.ktor.response.respond import io.ktor.response.respond
import io.ktor.util.pipeline.PipelineContext
import java.util.concurrent.CompletionException import java.util.concurrent.CompletionException
class HttpError( class HttpError(
@@ -27,6 +30,30 @@ class HttpError(
) )
} }
fun ValidationResult<*>.toOutput(): HttpError {
return HttpError(
HttpStatusCode.BadRequest,
invalidParams = this.errors.map {
HttpError.InvalidParam(
it.dataPath,
it.message
)
}
)
}
suspend fun PipelineContext<*, ApplicationCall>.respondIfNotValid(validationResult: ValidationResult<*>): HttpError? {
if (validationResult.errors.size > 0) {
val out = validationResult.toOutput()
this.call.respond(
HttpStatusCode.BadRequest,
out
)
return out
}
return null
}
fun statusPagesInstallation(): StatusPages.Configuration.() -> Unit = { fun statusPagesInstallation(): StatusPages.Configuration.() -> Unit = {
exception<CompletionException> { e -> exception<CompletionException> { e ->
val parent = e.cause?.cause val parent = e.cause?.cause