use always receiveOrBadRequest
This commit is contained in:
@@ -11,6 +11,7 @@ import fr.dcproject.component.notification.ArticleUpdateNotification
|
||||
import fr.dcproject.component.notification.Publisher
|
||||
import fr.dcproject.component.workgroup.WorkgroupRef
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.ApplicationCall
|
||||
import io.ktor.application.call
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
@@ -39,7 +40,7 @@ object UpsertArticle {
|
||||
}
|
||||
|
||||
fun Route.upsertArticle(repo: ArticleRepository, publisher: Publisher, ac: ArticleAccessControl) {
|
||||
suspend fun ApplicationCall.convertRequestToEntity(): ArticleForUpdate = receive<Input>().run {
|
||||
suspend fun ApplicationCall.convertRequestToEntity(): ArticleForUpdate = receiveOrBadRequest<Input>().run {
|
||||
ArticleForUpdate(
|
||||
id = id ?: UUID.randomUUID(),
|
||||
title = title,
|
||||
|
||||
@@ -3,6 +3,7 @@ package fr.dcproject.component.auth.routes
|
||||
import com.fasterxml.jackson.databind.exc.MismatchedInputException
|
||||
import fr.dcproject.component.auth.UserRepository
|
||||
import fr.dcproject.component.auth.jwt.makeToken
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.call
|
||||
import io.ktor.auth.UserPasswordCredential
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -22,7 +23,7 @@ object Login {
|
||||
fun Route.authLogin(userRepo: UserRepository) {
|
||||
post<LoginRequest> {
|
||||
try {
|
||||
val credentials = call.receive<UserPasswordCredential>()
|
||||
val credentials = call.receiveOrBadRequest<UserPasswordCredential>()
|
||||
userRepo.findByCredentials(credentials)?.let { user ->
|
||||
call.respondText(user.makeToken())
|
||||
} ?: call.respond(HttpStatusCode.BadRequest, "Username not exist or password is wrong")
|
||||
|
||||
@@ -8,6 +8,7 @@ import fr.dcproject.component.auth.routes.Register.RegisterRequest.Input
|
||||
import fr.dcproject.component.citizen.Citizen
|
||||
import fr.dcproject.component.citizen.CitizenI
|
||||
import fr.dcproject.component.citizen.CitizenRepository
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.call
|
||||
import io.ktor.features.BadRequestException
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -60,7 +61,7 @@ object Register {
|
||||
|
||||
post<RegisterRequest> {
|
||||
try {
|
||||
val citizen = call.receive<Input>().toCitizen()
|
||||
val citizen = call.receiveOrBadRequest<Input>().toCitizen()
|
||||
val createdCitizen = citizenRepo.insertWithUser(citizen)?.user ?: throw BadRequestException("Bad request")
|
||||
call.respondText(createdCitizen.makeToken())
|
||||
} catch (e: MissingKotlinParameterException) {
|
||||
|
||||
@@ -2,6 +2,7 @@ package fr.dcproject.component.auth.routes
|
||||
|
||||
import fr.dcproject.component.auth.PasswordlessAuth
|
||||
import fr.dcproject.component.auth.routes.Sso.PasswordlessRequest.Input
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
@@ -23,7 +24,7 @@ object Sso {
|
||||
*/
|
||||
fun Route.authPasswordless(passwordlessAuth: PasswordlessAuth) {
|
||||
post<PasswordlessRequest> {
|
||||
call.receive<Input>().run {
|
||||
call.receiveOrBadRequest<Input>().run {
|
||||
try {
|
||||
passwordlessAuth.sendEmail(email, url)
|
||||
} catch (e: PasswordlessAuth.EmailNotFound) {
|
||||
|
||||
@@ -8,6 +8,7 @@ import fr.dcproject.component.comment.article.routes.CreateCommentArticle.PostAr
|
||||
import fr.dcproject.component.comment.generic.CommentAccessControl
|
||||
import fr.dcproject.component.comment.generic.CommentForUpdate
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.ApplicationCall
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -27,7 +28,7 @@ object CreateCommentArticle {
|
||||
class Input(val content: String)
|
||||
}
|
||||
|
||||
suspend fun PostArticleCommentRequest.getComment(call: ApplicationCall) = call.receive<Input>().run {
|
||||
suspend fun PostArticleCommentRequest.getComment(call: ApplicationCall) = call.receiveOrBadRequest<Input>().run {
|
||||
CommentForUpdate(
|
||||
target = article,
|
||||
createdBy = call.citizen,
|
||||
|
||||
@@ -7,6 +7,7 @@ import fr.dcproject.component.comment.generic.CommentForUpdate
|
||||
import fr.dcproject.component.comment.generic.CommentRef
|
||||
import fr.dcproject.component.comment.generic.CommentRepository
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.call
|
||||
import io.ktor.features.NotFoundException
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -30,7 +31,7 @@ object CreateCommentChildren {
|
||||
post<CreateCommentChildrenRequest> {
|
||||
val parent = repo.findById(it.comment.id) ?: throw NotFoundException("Comment not found")
|
||||
val newComment = CommentForUpdate(
|
||||
content = call.receive<CreateCommentChildrenRequest.Input>().content,
|
||||
content = call.receiveOrBadRequest<CreateCommentChildrenRequest.Input>().content,
|
||||
createdBy = citizen,
|
||||
parent = parent
|
||||
)
|
||||
|
||||
@@ -12,6 +12,7 @@ import fr.dcproject.component.constitution.ConstitutionSimple.TitleSimple
|
||||
import fr.dcproject.component.constitution.routes.CreateConstitution.PostConstitutionRequest.Input
|
||||
import fr.dcproject.component.constitution.routes.CreateConstitution.PostConstitutionRequest.Input.Title
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import fr.postgresjson.entity.UuidEntity
|
||||
import io.ktor.application.call
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
@@ -72,7 +73,7 @@ object CreateConstitution {
|
||||
|
||||
fun Route.createConstitution(repo: ConstitutionRepository, ac: ConstitutionAccessControl) {
|
||||
post<PostConstitutionRequest> {
|
||||
getNewConstitution(call.receive(), citizen).let {
|
||||
getNewConstitution(call.receiveOrBadRequest(), citizen).let {
|
||||
ac.assert { canCreate(it, citizenOrNull) }
|
||||
repo.upsert(it)
|
||||
call.respond(it)
|
||||
|
||||
@@ -7,6 +7,7 @@ import fr.dcproject.component.opinion.OpinionAccessControl
|
||||
import fr.dcproject.component.opinion.entity.OpinionChoiceRef
|
||||
import fr.dcproject.component.opinion.entity.OpinionForUpdate
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import fr.dcproject.utils.toUUID
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -34,7 +35,7 @@ object OpinionArticle {
|
||||
|
||||
fun Route.setOpinionOnArticle(repo: OpinionArticleRepository, ac: OpinionAccessControl) {
|
||||
put<ArticleOpinion> {
|
||||
call.receive<ArticleOpinion.Body>().ids.map { id ->
|
||||
call.receiveOrBadRequest<ArticleOpinion.Body>().ids.map { id ->
|
||||
OpinionForUpdate(
|
||||
choice = OpinionChoiceRef(id),
|
||||
target = it.article,
|
||||
|
||||
@@ -8,6 +8,7 @@ import fr.dcproject.component.vote.VoteAccessControl
|
||||
import fr.dcproject.component.vote.VoteArticleRepository
|
||||
import fr.dcproject.component.vote.entity.VoteForUpdate
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.call
|
||||
import io.ktor.features.NotFoundException
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -29,7 +30,7 @@ object PutVoteOnArticle {
|
||||
|
||||
fun Route.putVoteOnArticle(repo: VoteArticleRepository, ac: VoteAccessControl, articleRepo: ArticleRepository) {
|
||||
put<ArticleVoteRequest> {
|
||||
val input = call.receive<ArticleVoteRequest.Input>()
|
||||
val input = call.receiveOrBadRequest<ArticleVoteRequest.Input>()
|
||||
val article = articleRepo.findById(it.article.id) ?: throw NotFoundException("Article ${it.article.id} not found")
|
||||
val vote = VoteForUpdate(
|
||||
target = article,
|
||||
|
||||
@@ -7,6 +7,7 @@ import fr.dcproject.component.vote.VoteAccessControl
|
||||
import fr.dcproject.component.vote.VoteCommentRepository
|
||||
import fr.dcproject.component.vote.entity.VoteForUpdate
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
@@ -27,7 +28,7 @@ object PutVoteOnComment {
|
||||
fun Route.putVoteOnComment(voteCommentRepo: VoteCommentRepository, commentRepo: CommentRepository, ac: VoteAccessControl) {
|
||||
put<CommentVoteRequest> {
|
||||
val comment = commentRepo.findById(it.comment)!!
|
||||
val content = call.receive<CommentVoteRequest.Content>()
|
||||
val content = call.receiveOrBadRequest<CommentVoteRequest.Content>()
|
||||
val vote = VoteForUpdate(
|
||||
target = comment,
|
||||
note = content.note,
|
||||
|
||||
@@ -9,6 +9,7 @@ import fr.dcproject.component.vote.VoteConstitutionRepository
|
||||
import fr.dcproject.component.vote.entity.VoteForUpdate
|
||||
import fr.dcproject.component.vote.routes.VoteConstitution.ConstitutionVoteRequest.Input
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.call
|
||||
import io.ktor.features.NotFoundException
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -32,7 +33,7 @@ object VoteConstitution {
|
||||
fun Route.voteConstitution(repo: VoteConstitutionRepository, ac: VoteAccessControl, constitutionRepo: ConstitutionRepository) {
|
||||
put<ConstitutionVoteRequest> {
|
||||
val constitution = constitutionRepo.findById(it.constitution.id) ?: throw NotFoundException("Unable to find constitution ${it.constitution.id}")
|
||||
val content = call.receive<Input>()
|
||||
val content = call.receiveOrBadRequest<Input>()
|
||||
val vote = VoteForUpdate(
|
||||
target = constitution,
|
||||
note = content.note,
|
||||
|
||||
@@ -7,6 +7,7 @@ import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||
import fr.dcproject.component.workgroup.WorkgroupSimple
|
||||
import fr.dcproject.component.workgroup.routes.CreateWorkgroup.PostWorkgroupRequest.Input
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
@@ -32,7 +33,7 @@ object CreateWorkgroup {
|
||||
|
||||
fun Route.createWorkgroup(repo: WorkgroupRepository, ac: WorkgroupAccessControl) {
|
||||
post<PostWorkgroupRequest> {
|
||||
call.receive<Input>().run {
|
||||
call.receiveOrBadRequest<Input>().run {
|
||||
WorkgroupSimple(
|
||||
id ?: UUID.randomUUID(),
|
||||
name,
|
||||
|
||||
@@ -5,6 +5,7 @@ import fr.dcproject.component.workgroup.WorkgroupAccessControl
|
||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||
import fr.dcproject.component.workgroup.routes.EditWorkgroup.PutWorkgroupRequest.Input
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.locations.KtorExperimentalLocationsAPI
|
||||
@@ -31,7 +32,7 @@ object EditWorkgroup {
|
||||
fun Route.editWorkgroup(repo: WorkgroupRepository, ac: WorkgroupAccessControl) {
|
||||
put<PutWorkgroupRequest> {
|
||||
repo.findById(it.workgroupId)?.let { old ->
|
||||
call.receive<Input>().run {
|
||||
call.receiveOrBadRequest<Input>().run {
|
||||
old.copy(
|
||||
name = name ?: old.name,
|
||||
description = description ?: old.description,
|
||||
|
||||
@@ -6,6 +6,7 @@ import fr.dcproject.component.workgroup.WorkgroupAccessControl
|
||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.ApplicationCall
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -32,7 +33,7 @@ object AddMemberToWorkgroup {
|
||||
}
|
||||
|
||||
@KtorExperimentalLocationsAPI
|
||||
private suspend fun ApplicationCall.getMembersFromRequest(): List<WorkgroupWithMembersI.Member<CitizenRef>> = receive<WorkgroupsMembersRequest.Input>().map {
|
||||
private suspend fun ApplicationCall.getMembersFromRequest(): List<WorkgroupWithMembersI.Member<CitizenRef>> = receiveOrBadRequest<WorkgroupsMembersRequest.Input>().map {
|
||||
WorkgroupWithMembersI.Member(
|
||||
citizen = it.citizen,
|
||||
roles = it.roles
|
||||
|
||||
@@ -6,6 +6,7 @@ import fr.dcproject.component.workgroup.WorkgroupAccessControl
|
||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.ApplicationCall
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -31,7 +32,7 @@ object DeleteMembersOfWorkgroup {
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun ApplicationCall.getMembersFromRequest(): List<WorkgroupWithMembersI.Member<CitizenRef>> = receive<WorkgroupsMembersRequest.Input>().map {
|
||||
private suspend fun ApplicationCall.getMembersFromRequest(): List<WorkgroupWithMembersI.Member<CitizenRef>> = receiveOrBadRequest<WorkgroupsMembersRequest.Input>().map {
|
||||
WorkgroupWithMembersI.Member(
|
||||
citizen = it.citizen,
|
||||
roles = it.roles
|
||||
|
||||
@@ -6,6 +6,7 @@ import fr.dcproject.component.workgroup.WorkgroupAccessControl
|
||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
||||
import fr.dcproject.security.assert
|
||||
import fr.dcproject.utils.receiveOrBadRequest
|
||||
import io.ktor.application.ApplicationCall
|
||||
import io.ktor.application.call
|
||||
import io.ktor.http.HttpStatusCode
|
||||
@@ -31,7 +32,7 @@ object UpdateMemberOfWorkgroup {
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun ApplicationCall.getMembersFromRequest(): List<WorkgroupWithMembersI.Member<CitizenRef>> = receive<WorkgroupsMembersRequest.Input>().map {
|
||||
private suspend fun ApplicationCall.getMembersFromRequest(): List<WorkgroupWithMembersI.Member<CitizenRef>> = receiveOrBadRequest<WorkgroupsMembersRequest.Input>().map {
|
||||
WorkgroupWithMembersI.Member(
|
||||
citizen = it.citizen,
|
||||
roles = it.roles
|
||||
|
||||
Reference in New Issue
Block a user