From ce908847589ec551b491edfdaa29470afb6e3ad5 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Fri, 15 Jan 2021 23:23:33 +0100 Subject: [PATCH] Move Auth to a Component --- src/main/kotlin/Application.kt | 12 ++- src/main/kotlin/ApplicationContext.kt | 4 +- src/main/kotlin/Configuration.kt | 2 +- src/main/kotlin/KoinModule.kt | 4 +- .../auth}/SsoManager.kt | 12 ++- .../kotlin/{entity => component/auth}/User.kt | 5 +- .../auth/UserRepository.kt} | 7 +- .../kotlin/component/auth/routes/Login.kt | 32 ++++++++ .../kotlin/component/auth/routes/Register.kt | 69 ++++++++++++++++ src/main/kotlin/component/auth/routes/Sso.kt | 35 ++++++++ src/main/kotlin/component/citizen/Citizen.kt | 7 +- .../component/citizen/CitizenRepository.kt | 2 +- .../citizen/routes/ChangeMyPassword.kt | 4 +- src/main/kotlin/entity/Workgroup.kt | 1 + src/main/kotlin/routes/Auth.kt | 80 ------------------- src/main/kotlin/voter/ConstitutionVoter.kt | 2 +- src/main/kotlin/voter/WorkgroupVoter.kt | 2 +- src/test/kotlin/steps/ArticleSteps.kt | 2 +- src/test/kotlin/steps/CitizenSteps.kt | 2 +- src/test/kotlin/steps/ConstitutionSteps.kt | 2 +- src/test/kotlin/steps/WorkgroupSteps.kt | 1 + .../kotlin/unit/voter/ArticleVoterTest.kt | 4 +- .../kotlin/unit/voter/CitizenVoterTest.kt | 4 +- .../kotlin/unit/voter/CommentVoterTest.kt | 4 +- src/test/kotlin/unit/voter/FollowVoterTest.kt | 4 +- .../unit/voter/OpinionChoiceVoterTest.kt | 4 +- .../kotlin/unit/voter/OpinionVoterTest.kt | 4 +- src/test/kotlin/unit/voter/VoteVoterTest.kt | 4 +- .../kotlin/unit/voter/WorkgroupVoterTest.kt | 4 +- 29 files changed, 195 insertions(+), 124 deletions(-) rename src/main/kotlin/{messages => component/auth}/SsoManager.kt (85%) rename src/main/kotlin/{entity => component/auth}/User.kt (93%) rename src/main/kotlin/{repository/User.kt => component/auth/UserRepository.kt} (86%) create mode 100644 src/main/kotlin/component/auth/routes/Login.kt create mode 100644 src/main/kotlin/component/auth/routes/Register.kt create mode 100644 src/main/kotlin/component/auth/routes/Sso.kt delete mode 100644 src/main/kotlin/routes/Auth.kt diff --git a/src/main/kotlin/Application.kt b/src/main/kotlin/Application.kt index 7b58bba..53d87fe 100644 --- a/src/main/kotlin/Application.kt +++ b/src/main/kotlin/Application.kt @@ -21,7 +21,11 @@ import fr.dcproject.component.comment.generic.routes.editComment import fr.dcproject.component.comment.generic.routes.getChildrenComments import fr.dcproject.component.comment.generic.routes.getOneComment import fr.dcproject.elasticsearch.configElasticIndexes -import fr.dcproject.entity.User +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserRepository +import fr.dcproject.component.auth.routes.authLogin +import fr.dcproject.component.auth.routes.authRegister +import fr.dcproject.component.auth.routes.authSso import fr.dcproject.event.EventNotification import fr.dcproject.event.EventSubscriber import fr.dcproject.routes.* @@ -52,7 +56,6 @@ import org.slf4j.event.Level import java.time.Duration import java.util.* import java.util.concurrent.CompletionException -import fr.dcproject.repository.User as UserRepository fun main(args: Array): Unit = io.ktor.server.jetty.EngineMain.main(args) @@ -172,8 +175,11 @@ fun Application.module(env: Env = PROD) { getOneComment(get(), get()) createCommentChildren(get(), get()) getChildrenComments(get(), get()) + /* Auth */ + authLogin(get()) + authRegister(get()) + authSso(get()) /* TODO */ - auth(get(), get(), get()) constitution(get()) followArticle(get()) followConstitution(get()) diff --git a/src/main/kotlin/ApplicationContext.kt b/src/main/kotlin/ApplicationContext.kt index 3751b43..8de94a5 100644 --- a/src/main/kotlin/ApplicationContext.kt +++ b/src/main/kotlin/ApplicationContext.kt @@ -1,8 +1,8 @@ package fr.dcproject import fr.dcproject.component.citizen.CitizenRepository -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI import io.ktor.application.* import io.ktor.auth.* import io.ktor.util.* diff --git a/src/main/kotlin/Configuration.kt b/src/main/kotlin/Configuration.kt index d4a0a7c..97b8587 100644 --- a/src/main/kotlin/Configuration.kt +++ b/src/main/kotlin/Configuration.kt @@ -4,7 +4,7 @@ import com.auth0.jwt.JWT import com.auth0.jwt.JWTVerifier import com.auth0.jwt.algorithms.Algorithm import com.typesafe.config.ConfigFactory -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.UserI import java.util.* import java.net.URI diff --git a/src/main/kotlin/KoinModule.kt b/src/main/kotlin/KoinModule.kt index cb593d3..12ae88f 100644 --- a/src/main/kotlin/KoinModule.kt +++ b/src/main/kotlin/KoinModule.kt @@ -18,7 +18,8 @@ import fr.dcproject.component.comment.generic.CommentVoter import fr.dcproject.event.publisher.Publisher import fr.dcproject.messages.Mailer import fr.dcproject.messages.NotificationEmailSender -import fr.dcproject.messages.SsoManager +import fr.dcproject.component.auth.SsoManager +import fr.dcproject.component.auth.UserRepository import fr.dcproject.repository.CommentConstitutionRepository import fr.postgresjson.connexion.Connection import fr.postgresjson.connexion.Requester @@ -38,7 +39,6 @@ import fr.dcproject.repository.FollowArticle as FollowArticleRepository import fr.dcproject.repository.FollowConstitution as FollowConstitutionRepository import fr.dcproject.repository.OpinionArticle as OpinionArticleRepository import fr.dcproject.repository.OpinionChoice as OpinionChoiceRepository -import fr.dcproject.repository.User as UserRepository import fr.dcproject.repository.VoteArticle as VoteArticleRepository import fr.dcproject.repository.VoteComment as VoteCommentRepository import fr.dcproject.repository.VoteConstitution as VoteConstitutionRepository diff --git a/src/main/kotlin/messages/SsoManager.kt b/src/main/kotlin/component/auth/SsoManager.kt similarity index 85% rename from src/main/kotlin/messages/SsoManager.kt rename to src/main/kotlin/component/auth/SsoManager.kt index 903cc42..0ec9aeb 100644 --- a/src/main/kotlin/messages/SsoManager.kt +++ b/src/main/kotlin/component/auth/SsoManager.kt @@ -1,4 +1,4 @@ -package fr.dcproject.messages +package fr.dcproject.component.auth import com.sendgrid.helpers.mail.Mail import com.sendgrid.helpers.mail.objects.Content @@ -6,8 +6,12 @@ import com.sendgrid.helpers.mail.objects.Email import fr.dcproject.JwtConfig import fr.dcproject.component.citizen.CitizenBasicI import fr.dcproject.component.citizen.CitizenRepository +import fr.dcproject.messages.Mailer import io.ktor.http.* +/** + * Send an email to the citizen with a link to automatically connect + */ class SsoManager( private val mailer: Mailer, private val domain: String, @@ -31,12 +35,18 @@ class SsoManager( } } + /** + * TODO pass token to the function to avoid double generations + */ private fun generateHtmlContent(citizen: CitizenBasicI, url: String): String? { val urlObject = URLBuilder(url) urlObject.parameters.append("token", JwtConfig.makeToken(citizen.user)) return "Click here for connect to $domain" } + /** + * TODO pass token to the function to avoid double generations + */ private fun generateContent(citizen: CitizenBasicI, url: String): String { val urlObject = URLBuilder(url) urlObject.parameters.append("token", JwtConfig.makeToken(citizen.user)) diff --git a/src/main/kotlin/entity/User.kt b/src/main/kotlin/component/auth/User.kt similarity index 93% rename from src/main/kotlin/entity/User.kt rename to src/main/kotlin/component/auth/User.kt index 8de2c21..3ab44a9 100644 --- a/src/main/kotlin/entity/User.kt +++ b/src/main/kotlin/component/auth/User.kt @@ -1,12 +1,11 @@ -package fr.dcproject.entity +package fr.dcproject.component.auth -import fr.dcproject.entity.UserI.Roles +import fr.dcproject.component.auth.UserI.Roles import fr.postgresjson.entity.* import io.ktor.auth.* import org.joda.time.DateTime import java.util.* -@Deprecated("") class User( id: UUID = UUID.randomUUID(), username: String, diff --git a/src/main/kotlin/repository/User.kt b/src/main/kotlin/component/auth/UserRepository.kt similarity index 86% rename from src/main/kotlin/repository/User.kt rename to src/main/kotlin/component/auth/UserRepository.kt index b76129d..120f486 100644 --- a/src/main/kotlin/repository/User.kt +++ b/src/main/kotlin/component/auth/UserRepository.kt @@ -1,13 +1,12 @@ -package fr.dcproject.repository +package fr.dcproject.component.auth -import fr.dcproject.entity.UserFull import fr.postgresjson.connexion.Requester import fr.postgresjson.repository.RepositoryI import io.ktor.auth.UserPasswordCredential import java.util.* -import fr.dcproject.entity.User as UserEntity +import fr.dcproject.component.auth.User as UserEntity -class User(override var requester: Requester) : RepositoryI { +class UserRepository(override var requester: Requester) : RepositoryI { fun findByCredentials(credentials: UserPasswordCredential): UserEntity? { return requester .getFunction("check_user") diff --git a/src/main/kotlin/component/auth/routes/Login.kt b/src/main/kotlin/component/auth/routes/Login.kt new file mode 100644 index 0000000..19310f9 --- /dev/null +++ b/src/main/kotlin/component/auth/routes/Login.kt @@ -0,0 +1,32 @@ +package fr.dcproject.component.auth.routes + +import com.fasterxml.jackson.databind.exc.MismatchedInputException +import fr.dcproject.JwtConfig +import fr.dcproject.component.auth.UserRepository +import io.ktor.application.* +import io.ktor.auth.* +import io.ktor.http.* +import io.ktor.locations.* +import io.ktor.request.* +import io.ktor.response.* +import io.ktor.routing.* +import io.ktor.util.* + +@KtorExperimentalLocationsAPI +@Location("/login") +private class LoginRequest + +@KtorExperimentalLocationsAPI +@KtorExperimentalAPI +fun Route.authLogin(userRepo: UserRepository) { + post { + try { + val credentials = call.receive() + userRepo.findByCredentials(credentials)?.let { user -> + call.respondText(JwtConfig.makeToken(user)) + } ?: call.respond(HttpStatusCode.BadRequest, "Username not exist or password is wrong") + } catch (e: MismatchedInputException) { + call.respond(HttpStatusCode.BadRequest, "You must be send name and password to the request") + } + } +} diff --git a/src/main/kotlin/component/auth/routes/Register.kt b/src/main/kotlin/component/auth/routes/Register.kt new file mode 100644 index 0000000..b7ad9ae --- /dev/null +++ b/src/main/kotlin/component/auth/routes/Register.kt @@ -0,0 +1,69 @@ +package fr.dcproject.component.auth.routes + +import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException +import fr.dcproject.JwtConfig +import fr.dcproject.component.auth.routes.RegisterRequest.Input +import fr.dcproject.component.citizen.Citizen +import fr.dcproject.component.citizen.CitizenI +import fr.dcproject.component.citizen.CitizenRepository +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI +import io.ktor.application.* +import io.ktor.features.* +import io.ktor.http.* +import io.ktor.locations.* +import io.ktor.request.* +import io.ktor.response.* +import io.ktor.routing.* +import io.ktor.util.* +import org.joda.time.DateTime + +@KtorExperimentalLocationsAPI +@Location("/register") +private class RegisterRequest { + data class Input( + val name: Name, + val email: String, + val birthday: DateTime, + val voteAnonymous: Boolean = true, + val followAnonymous: Boolean = true, + val user: User + ) { + data class Name( + val firstName: String, + val lastName: String, + val civility: String? = null + ) + data class User( + val username: String, + val plainPassword: String? = null + ) + } +} + +@KtorExperimentalLocationsAPI +@KtorExperimentalAPI +fun Route.authRegister(citizenRepo: CitizenRepository) { + fun Input.toCitizen(): Citizen = Citizen( + name = CitizenI.Name(name.firstName, name.lastName, name.civility), + birthday = birthday, + email = email, + followAnonymous = followAnonymous, + voteAnonymous = voteAnonymous, + user = User( + username = user.username, + plainPassword = user.plainPassword, + roles = listOf(UserI.Roles.ROLE_USER) + ) + ) + + post { + try { + val citizen = call.receive().toCitizen() + val createdCitizen = citizenRepo.insertWithUser(citizen)?.user ?: throw BadRequestException("Bad request") + call.respondText(JwtConfig.makeToken(createdCitizen)) + } catch (e: MissingKotlinParameterException) { + call.respond(HttpStatusCode.BadRequest) + } + } +} diff --git a/src/main/kotlin/component/auth/routes/Sso.kt b/src/main/kotlin/component/auth/routes/Sso.kt new file mode 100644 index 0000000..7d1a49f --- /dev/null +++ b/src/main/kotlin/component/auth/routes/Sso.kt @@ -0,0 +1,35 @@ +package fr.dcproject.component.auth.routes + +import fr.dcproject.component.auth.routes.SsoRequest.Input +import fr.dcproject.component.auth.SsoManager +import io.ktor.application.* +import io.ktor.http.* +import io.ktor.locations.* +import io.ktor.request.* +import io.ktor.response.* +import io.ktor.routing.* +import io.ktor.util.* + +@KtorExperimentalLocationsAPI +@Location("/sso") +private class SsoRequest { + data class Input(val email: String, val url: String) +} + +/** + * Send an email to the citizen with a link to automatically connect + */ +@KtorExperimentalLocationsAPI +@KtorExperimentalAPI +fun Route.authSso(ssoManager: SsoManager) { + post { + call.receive().run { + try { + ssoManager.sendEmail(email, url) + } catch (e: SsoManager.EmailNotFound) { + call.respond(HttpStatusCode.NotFound) + } + call.respond(HttpStatusCode.NoContent) + } + } +} diff --git a/src/main/kotlin/component/citizen/Citizen.kt b/src/main/kotlin/component/citizen/Citizen.kt index ee515d7..5f3ccc3 100644 --- a/src/main/kotlin/component/citizen/Citizen.kt +++ b/src/main/kotlin/component/citizen/Citizen.kt @@ -1,15 +1,14 @@ package fr.dcproject.component.citizen import fr.dcproject.component.citizen.CitizenI.Name -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI -import fr.dcproject.entity.UserRef +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI +import fr.dcproject.component.auth.UserRef import fr.dcproject.entity.WorkgroupSimple import fr.postgresjson.entity.* import org.joda.time.DateTime import java.util.* -@Deprecated("") class Citizen( override val id: UUID = UUID.randomUUID(), override val name: Name, diff --git a/src/main/kotlin/component/citizen/CitizenRepository.kt b/src/main/kotlin/component/citizen/CitizenRepository.kt index 6ca0557..8603ce8 100644 --- a/src/main/kotlin/component/citizen/CitizenRepository.kt +++ b/src/main/kotlin/component/citizen/CitizenRepository.kt @@ -1,6 +1,6 @@ package fr.dcproject.component.citizen -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.UserI import fr.postgresjson.connexion.Paginated import fr.postgresjson.connexion.Requester import fr.postgresjson.repository.RepositoryI diff --git a/src/main/kotlin/component/citizen/routes/ChangeMyPassword.kt b/src/main/kotlin/component/citizen/routes/ChangeMyPassword.kt index abbea0d..2c19597 100644 --- a/src/main/kotlin/component/citizen/routes/ChangeMyPassword.kt +++ b/src/main/kotlin/component/citizen/routes/ChangeMyPassword.kt @@ -5,7 +5,7 @@ import fr.dcproject.citizen import fr.dcproject.citizenOrNull import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.CitizenVoter -import fr.dcproject.repository.User +import fr.dcproject.component.auth.UserRepository import fr.dcproject.voter.assert import io.ktor.application.* import io.ktor.auth.* @@ -23,7 +23,7 @@ class ChangePasswordCitizenRequest(val citizen: Citizen) { } @KtorExperimentalLocationsAPI -fun Route.changeMyPassword(voter: CitizenVoter, userRepository: User) { +fun Route.changeMyPassword(voter: CitizenVoter, userRepository: UserRepository) { put { voter.assert { canChangePassword(it.citizen, citizenOrNull) } try { diff --git a/src/main/kotlin/entity/Workgroup.kt b/src/main/kotlin/entity/Workgroup.kt index 412b6f1..8f16500 100644 --- a/src/main/kotlin/entity/Workgroup.kt +++ b/src/main/kotlin/entity/Workgroup.kt @@ -1,5 +1,6 @@ package fr.dcproject.entity +import fr.dcproject.component.auth.UserI import fr.dcproject.component.citizen.CitizenBasicI import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenWithUserI diff --git a/src/main/kotlin/routes/Auth.kt b/src/main/kotlin/routes/Auth.kt deleted file mode 100644 index 91a461e..0000000 --- a/src/main/kotlin/routes/Auth.kt +++ /dev/null @@ -1,80 +0,0 @@ -package fr.dcproject.routes - -import com.fasterxml.jackson.databind.exc.MismatchedInputException -import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException -import fr.dcproject.JwtConfig -import fr.dcproject.component.citizen.CitizenRepository -import fr.dcproject.entity.UserI.Roles.ROLE_USER -import fr.dcproject.messages.SsoManager -import fr.dcproject.routes.AuthPaths.LoginRequest -import fr.dcproject.routes.AuthPaths.RegisterRequest -import fr.dcproject.routes.AuthPaths.SsoRequest -import io.ktor.application.* -import io.ktor.auth.* -import io.ktor.features.* -import io.ktor.http.* -import io.ktor.locations.* -import io.ktor.request.* -import io.ktor.response.* -import io.ktor.routing.* -import io.ktor.util.* -import fr.dcproject.component.citizen.Citizen as CitizenEntity -import fr.dcproject.repository.User as UserRepository - -@KtorExperimentalLocationsAPI -object AuthPaths { - @Location("/login") - class LoginRequest - - @Location("/register") - class RegisterRequest - - @Location("/sso") - class SsoRequest { - data class Content(val email: String, val url: String) - } -} - -@KtorExperimentalLocationsAPI -@KtorExperimentalAPI -fun Route.auth( - userRepo: UserRepository, - citizenRepo: CitizenRepository, - ssoManager: SsoManager -) { - post { - try { - val credentials = call.receive() - val user = userRepo.findByCredentials(credentials) ?: throw WrongLoginOrPassword() - call.respondText(JwtConfig.makeToken(user)) - } catch (e: MismatchedInputException) { - call.respond(HttpStatusCode.BadRequest, "You must be send name and password to the request") - } catch (e: WrongLoginOrPassword) { - call.respond(HttpStatusCode.BadRequest, e.message) - } - } - - post { - try { - val citizen = call.receive() - citizen.user.roles = listOf(ROLE_USER) - val created = citizenRepo.insertWithUser(citizen)?.user ?: throw BadRequestException("Bad request") - call.respondText(JwtConfig.makeToken(created)) - } catch (e: MissingKotlinParameterException) { - call.respond(HttpStatusCode.BadRequest) - } - } - - post { - val content = call.receive() - try { - ssoManager.sendEmail(content.email, content.url) - } catch (e: SsoManager.EmailNotFound) { - call.respond(HttpStatusCode.NotFound) - } - - call.respond(HttpStatusCode.NoContent) - } -} - -class WrongLoginOrPassword(override val message: String = "Username not exist or password is wrong") : Exception() diff --git a/src/main/kotlin/voter/ConstitutionVoter.kt b/src/main/kotlin/voter/ConstitutionVoter.kt index 688eaec..953be95 100644 --- a/src/main/kotlin/voter/ConstitutionVoter.kt +++ b/src/main/kotlin/voter/ConstitutionVoter.kt @@ -2,7 +2,7 @@ package fr.dcproject.security.voter import fr.dcproject.component.comment.generic.CommentForView import fr.dcproject.entity.ConstitutionSimple -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.UserI import fr.dcproject.user import fr.dcproject.voter.NoRuleDefinedException import fr.dcproject.voter.NoSubjectDefinedException diff --git a/src/main/kotlin/voter/WorkgroupVoter.kt b/src/main/kotlin/voter/WorkgroupVoter.kt index d71b8f1..4b96c45 100644 --- a/src/main/kotlin/voter/WorkgroupVoter.kt +++ b/src/main/kotlin/voter/WorkgroupVoter.kt @@ -1,6 +1,6 @@ package fr.dcproject.security.voter -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.UserI import fr.dcproject.entity.WorkgroupI import fr.dcproject.entity.WorkgroupWithAuthI import fr.dcproject.entity.WorkgroupWithMembersI.Member.Role diff --git a/src/test/kotlin/steps/ArticleSteps.kt b/src/test/kotlin/steps/ArticleSteps.kt index f6bfa80..d4d2efe 100644 --- a/src/test/kotlin/steps/ArticleSteps.kt +++ b/src/test/kotlin/steps/ArticleSteps.kt @@ -16,7 +16,7 @@ import org.joda.time.DateTime import org.koin.test.KoinTest import org.koin.test.get import java.util.* -import fr.dcproject.entity.User as UserEntity +import fr.dcproject.component.auth.User as UserEntity class ArticleSteps : En, KoinTest { init { diff --git a/src/test/kotlin/steps/CitizenSteps.kt b/src/test/kotlin/steps/CitizenSteps.kt index 7eda6a8..0ee3550 100644 --- a/src/test/kotlin/steps/CitizenSteps.kt +++ b/src/test/kotlin/steps/CitizenSteps.kt @@ -3,7 +3,7 @@ package steps import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenRepository -import fr.dcproject.entity.User +import fr.dcproject.component.auth.User import io.cucumber.datatable.DataTable import io.cucumber.java8.En import org.joda.time.DateTime diff --git a/src/test/kotlin/steps/ConstitutionSteps.kt b/src/test/kotlin/steps/ConstitutionSteps.kt index 9bd7df4..1ad251d 100644 --- a/src/test/kotlin/steps/ConstitutionSteps.kt +++ b/src/test/kotlin/steps/ConstitutionSteps.kt @@ -16,7 +16,7 @@ import org.joda.time.DateTime import org.koin.test.KoinTest import org.koin.test.get import java.util.* -import fr.dcproject.entity.User as UserEntity +import fr.dcproject.component.auth.User as UserEntity import fr.dcproject.repository.Constitution as ConstitutionRepository class ConstitutionSteps : En, KoinTest { diff --git a/src/test/kotlin/steps/WorkgroupSteps.kt b/src/test/kotlin/steps/WorkgroupSteps.kt index d91207b..d650bd0 100644 --- a/src/test/kotlin/steps/WorkgroupSteps.kt +++ b/src/test/kotlin/steps/WorkgroupSteps.kt @@ -1,5 +1,6 @@ package steps +import fr.dcproject.component.auth.User import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenRef diff --git a/src/test/kotlin/unit/voter/ArticleVoterTest.kt b/src/test/kotlin/unit/voter/ArticleVoterTest.kt index 1ed1e8f..848ee44 100644 --- a/src/test/kotlin/unit/voter/ArticleVoterTest.kt +++ b/src/test/kotlin/unit/voter/ArticleVoterTest.kt @@ -4,8 +4,8 @@ import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.article.ArticleVoter import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenI -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI import fr.dcproject.voter.Vote.DENIED import fr.dcproject.voter.Vote.GRANTED import fr.postgresjson.connexion.Paginated diff --git a/src/test/kotlin/unit/voter/CitizenVoterTest.kt b/src/test/kotlin/unit/voter/CitizenVoterTest.kt index e20837d..84d0fe5 100644 --- a/src/test/kotlin/unit/voter/CitizenVoterTest.kt +++ b/src/test/kotlin/unit/voter/CitizenVoterTest.kt @@ -3,8 +3,8 @@ package unit.voter import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.citizen.CitizenVoter -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI import fr.dcproject.voter.Vote.DENIED import fr.dcproject.voter.Vote.GRANTED import io.mockk.mockkStatic diff --git a/src/test/kotlin/unit/voter/CommentVoterTest.kt b/src/test/kotlin/unit/voter/CommentVoterTest.kt index 494bd81..01e4f47 100644 --- a/src/test/kotlin/unit/voter/CommentVoterTest.kt +++ b/src/test/kotlin/unit/voter/CommentVoterTest.kt @@ -8,8 +8,8 @@ import fr.dcproject.component.citizen.CitizenI import fr.dcproject.component.comment.generic.CommentForUpdate import fr.dcproject.component.comment.generic.CommentForView import fr.dcproject.component.comment.generic.CommentVoter -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI import fr.dcproject.voter.Vote.DENIED import fr.dcproject.voter.Vote.GRANTED import fr.postgresjson.connexion.Paginated diff --git a/src/test/kotlin/unit/voter/FollowVoterTest.kt b/src/test/kotlin/unit/voter/FollowVoterTest.kt index fedbcec..6956735 100644 --- a/src/test/kotlin/unit/voter/FollowVoterTest.kt +++ b/src/test/kotlin/unit/voter/FollowVoterTest.kt @@ -7,8 +7,8 @@ import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenI import fr.dcproject.entity.Follow -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI import fr.dcproject.security.voter.FollowVoter import fr.dcproject.voter.NoSubjectDefinedException import fr.ktorVoter.ActionI diff --git a/src/test/kotlin/unit/voter/OpinionChoiceVoterTest.kt b/src/test/kotlin/unit/voter/OpinionChoiceVoterTest.kt index 9dfe863..609ca15 100644 --- a/src/test/kotlin/unit/voter/OpinionChoiceVoterTest.kt +++ b/src/test/kotlin/unit/voter/OpinionChoiceVoterTest.kt @@ -5,8 +5,8 @@ import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenI import fr.dcproject.entity.OpinionChoice -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI import fr.dcproject.security.voter.OpinionChoiceVoter import fr.dcproject.user import fr.ktorVoter.ActionI diff --git a/src/test/kotlin/unit/voter/OpinionVoterTest.kt b/src/test/kotlin/unit/voter/OpinionVoterTest.kt index 461a96a..22ab6ea 100644 --- a/src/test/kotlin/unit/voter/OpinionVoterTest.kt +++ b/src/test/kotlin/unit/voter/OpinionVoterTest.kt @@ -6,8 +6,8 @@ import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenI import fr.dcproject.entity.Opinion import fr.dcproject.entity.OpinionChoice -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI import fr.dcproject.security.voter.OpinionVoter import fr.dcproject.user import fr.dcproject.voter.NoSubjectDefinedException diff --git a/src/test/kotlin/unit/voter/VoteVoterTest.kt b/src/test/kotlin/unit/voter/VoteVoterTest.kt index 43b70e3..0404195 100644 --- a/src/test/kotlin/unit/voter/VoteVoterTest.kt +++ b/src/test/kotlin/unit/voter/VoteVoterTest.kt @@ -7,8 +7,8 @@ import fr.dcproject.component.citizen.Citizen import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenI -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI import fr.dcproject.entity.VoteForUpdate import fr.dcproject.security.voter.VoteVoter import fr.dcproject.voter.NoSubjectDefinedException diff --git a/src/test/kotlin/unit/voter/WorkgroupVoterTest.kt b/src/test/kotlin/unit/voter/WorkgroupVoterTest.kt index e6de395..23cf6de 100644 --- a/src/test/kotlin/unit/voter/WorkgroupVoterTest.kt +++ b/src/test/kotlin/unit/voter/WorkgroupVoterTest.kt @@ -4,8 +4,8 @@ import fr.dcproject.component.article.ArticleForView import fr.dcproject.component.citizen.CitizenBasic import fr.dcproject.component.citizen.CitizenCart import fr.dcproject.component.citizen.CitizenI -import fr.dcproject.entity.User -import fr.dcproject.entity.UserI +import fr.dcproject.component.auth.User +import fr.dcproject.component.auth.UserI import fr.dcproject.entity.WorkgroupRef import fr.dcproject.entity.WorkgroupWithMembersI import fr.dcproject.security.voter.WorkgroupVoter