From 9511331cd22b13bd0cc5df38d72aebf1d6898ea4 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Thu, 8 Apr 2021 02:07:49 +0200 Subject: [PATCH] Add validation on route Register --- .../dcproject/common/validation/Password.kt | 2 +- .../component/auth/routes/Register.kt | 40 ++++++++++++++++++- src/main/resources/openapi.yaml | 2 +- .../kotlin/integration/Register routes.kt | 2 +- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/fr/dcproject/common/validation/Password.kt b/src/main/kotlin/fr/dcproject/common/validation/Password.kt index 3e6b0cb..b08bb7d 100644 --- a/src/main/kotlin/fr/dcproject/common/validation/Password.kt +++ b/src/main/kotlin/fr/dcproject/common/validation/Password.kt @@ -19,4 +19,4 @@ fun String.passwordScore(): Int { score += (hasAlphaLower + hasAlphaUpper + hasNum - 2) * 2 return score -} \ No newline at end of file +} diff --git a/src/main/kotlin/fr/dcproject/component/auth/routes/Register.kt b/src/main/kotlin/fr/dcproject/component/auth/routes/Register.kt index 08d1d67..0daa29a 100644 --- a/src/main/kotlin/fr/dcproject/component/auth/routes/Register.kt +++ b/src/main/kotlin/fr/dcproject/component/auth/routes/Register.kt @@ -1,7 +1,10 @@ package fr.dcproject.component.auth.routes import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException +import fr.dcproject.application.http.badRequestIfNotValid import fr.dcproject.common.utils.receiveOrBadRequest +import fr.dcproject.common.validation.email +import fr.dcproject.common.validation.passwordScore import fr.dcproject.component.auth.database.UserForCreate import fr.dcproject.component.auth.database.UserI import fr.dcproject.component.auth.jwt.makeToken @@ -9,6 +12,9 @@ import fr.dcproject.component.auth.routes.Register.RegisterRequest.Input import fr.dcproject.component.citizen.database.CitizenForCreate import fr.dcproject.component.citizen.database.CitizenI import fr.dcproject.component.citizen.database.CitizenRepository +import io.konform.validation.Validation +import io.konform.validation.jsonschema.maxLength +import io.konform.validation.jsonschema.minLength import io.ktor.application.call import io.ktor.features.BadRequestException import io.ktor.http.ContentType @@ -43,6 +49,35 @@ object Register { val username: String, val password: String ) + + fun validate() = Validation { + Input::name { + Name::firstName { + minLength(2) + maxLength(50) + } + Name::lastName { + minLength(2) + maxLength(50) + } + Name::civility ifPresent { + minLength(1) + maxLength(10) + } + } + Input::user { + User::username { + minLength(7) + maxLength(30) + } + User::password { + passwordScore(15) + } + } + Input::email { + email() + } + }.validate(this) } } @@ -62,7 +97,10 @@ object Register { post { try { - val citizen = call.receiveOrBadRequest().toCitizen() + val citizen = call.receiveOrBadRequest() + .apply { validate().badRequestIfNotValid() } + .toCitizen() + citizenRepo.insertWithUser(citizen)?.user?.makeToken()?.let { token -> if (call.request.accept() == ContentType.Application.Json.toString()) { call.respond( diff --git a/src/main/resources/openapi.yaml b/src/main/resources/openapi.yaml index 17d5216..f1deaca 100644 --- a/src/main/resources/openapi.yaml +++ b/src/main/resources/openapi.yaml @@ -351,7 +351,7 @@ paths: content: application/json: schema: - description: sdf + $ref: '#/components/schemas/400' /auth/passwordless: post: summary: Send a connexion link by email diff --git a/src/test/kotlin/integration/Register routes.kt b/src/test/kotlin/integration/Register routes.kt index 52c4ae5..510d0b2 100644 --- a/src/test/kotlin/integration/Register routes.kt +++ b/src/test/kotlin/integration/Register routes.kt @@ -29,7 +29,7 @@ class `Register routes` : BaseTest() { "birthday": "2001-01-01", "user":{ "username": "george-junior", - "password": "azerty" + "password": "Azerty123!" }, "email": "george-junior@gmail.com" }