Big refactoring #77
@@ -1,4 +1,4 @@
|
|||||||
package fr.dcproject
|
package fr.dcproject.application
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.util.DefaultIndenter
|
import com.fasterxml.jackson.core.util.DefaultIndenter
|
||||||
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter
|
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter
|
||||||
@@ -7,16 +7,19 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategy
|
|||||||
import com.fasterxml.jackson.databind.SerializationFeature
|
import com.fasterxml.jackson.databind.SerializationFeature
|
||||||
import com.fasterxml.jackson.datatype.joda.JodaModule
|
import com.fasterxml.jackson.datatype.joda.JodaModule
|
||||||
import com.github.jasync.sql.db.postgresql.exceptions.GenericDatabaseException
|
import com.github.jasync.sql.db.postgresql.exceptions.GenericDatabaseException
|
||||||
import fr.dcproject.Env.PROD
|
import fr.dcproject.application.Env.PROD
|
||||||
import fr.dcproject.component.article.routes.findArticleVersions
|
import fr.dcproject.component.article.routes.findArticleVersions
|
||||||
import fr.dcproject.component.article.routes.findArticles
|
import fr.dcproject.component.article.routes.findArticles
|
||||||
import fr.dcproject.component.article.routes.getOneArticle
|
import fr.dcproject.component.article.routes.getOneArticle
|
||||||
import fr.dcproject.component.article.routes.upsertArticle
|
import fr.dcproject.component.article.routes.upsertArticle
|
||||||
|
import fr.dcproject.component.auth.ForbiddenException
|
||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
import fr.dcproject.component.auth.UserRepository
|
import fr.dcproject.component.auth.UserRepository
|
||||||
|
import fr.dcproject.component.auth.jwt.JwtConfig
|
||||||
import fr.dcproject.component.auth.routes.authLogin
|
import fr.dcproject.component.auth.routes.authLogin
|
||||||
import fr.dcproject.component.auth.routes.authRegister
|
import fr.dcproject.component.auth.routes.authRegister
|
||||||
import fr.dcproject.component.auth.routes.authSso
|
import fr.dcproject.component.auth.routes.authSso
|
||||||
|
import fr.dcproject.component.auth.user
|
||||||
import fr.dcproject.component.citizen.routes.changeMyPassword
|
import fr.dcproject.component.citizen.routes.changeMyPassword
|
||||||
import fr.dcproject.component.citizen.routes.findCitizen
|
import fr.dcproject.component.citizen.routes.findCitizen
|
||||||
import fr.dcproject.component.citizen.routes.getCurrentCitizen
|
import fr.dcproject.component.citizen.routes.getCurrentCitizen
|
||||||
@@ -48,7 +51,7 @@ import io.ktor.application.*
|
|||||||
import io.ktor.auth.*
|
import io.ktor.auth.*
|
||||||
import io.ktor.auth.jwt.*
|
import io.ktor.auth.jwt.*
|
||||||
import io.ktor.client.*
|
import io.ktor.client.*
|
||||||
import io.ktor.client.engine.jetty.*
|
import io.ktor.client.engine.jetty.Jetty
|
||||||
import io.ktor.features.*
|
import io.ktor.features.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
import io.ktor.http.auth.*
|
import io.ktor.http.auth.*
|
||||||
@@ -56,6 +59,7 @@ import io.ktor.jackson.*
|
|||||||
import io.ktor.locations.*
|
import io.ktor.locations.*
|
||||||
import io.ktor.response.*
|
import io.ktor.response.*
|
||||||
import io.ktor.routing.*
|
import io.ktor.routing.*
|
||||||
|
import io.ktor.server.jetty.*
|
||||||
import io.ktor.util.*
|
import io.ktor.util.*
|
||||||
import io.ktor.websocket.*
|
import io.ktor.websocket.*
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
@@ -68,7 +72,7 @@ import java.time.Duration
|
|||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.concurrent.CompletionException
|
import java.util.concurrent.CompletionException
|
||||||
|
|
||||||
fun main(args: Array<String>): Unit = io.ktor.server.jetty.EngineMain.main(args)
|
fun main(args: Array<String>): Unit = EngineMain.main(args)
|
||||||
|
|
||||||
enum class Env { PROD, TEST, CUCUMBER }
|
enum class Env { PROD, TEST, CUCUMBER }
|
||||||
|
|
||||||
@@ -1,14 +1,9 @@
|
|||||||
package fr.dcproject
|
package fr.dcproject.application
|
||||||
|
|
||||||
import com.auth0.jwt.JWT
|
|
||||||
import com.auth0.jwt.JWTVerifier
|
|
||||||
import com.auth0.jwt.algorithms.Algorithm
|
|
||||||
import com.typesafe.config.ConfigFactory
|
import com.typesafe.config.ConfigFactory
|
||||||
import fr.dcproject.component.auth.UserI
|
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
object Config {
|
object Configuration {
|
||||||
private var config = ConfigFactory.load()
|
private var config = ConfigFactory.load()
|
||||||
|
|
||||||
object Sql {
|
object Sql {
|
||||||
@@ -31,33 +26,3 @@ object Config {
|
|||||||
val exchangeNotificationName = "notification"
|
val exchangeNotificationName = "notification"
|
||||||
val sendGridKey: String = config.getString("mail.sendGrid.key")
|
val sendGridKey: String = config.getString("mail.sendGrid.key")
|
||||||
}
|
}
|
||||||
|
|
||||||
object JwtConfig {
|
|
||||||
private const val secret = "zAP5MBA4B4Ijz0MZaS48"
|
|
||||||
const val issuer = "dc-project.fr"
|
|
||||||
private const val validityInMs = 3_600_000 * 10 // 10 hours
|
|
||||||
|
|
||||||
// TODO change to RSA512
|
|
||||||
val algorithm = Algorithm.HMAC512(secret)
|
|
||||||
|
|
||||||
val verifier: JWTVerifier = JWT
|
|
||||||
.require(algorithm)
|
|
||||||
.withIssuer(issuer)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Produce a token for this combination of User and Account
|
|
||||||
* TODO move token creator in other place
|
|
||||||
*/
|
|
||||||
fun makeToken(user: UserI): String = JWT.create()
|
|
||||||
.withSubject("Authentication")
|
|
||||||
.withIssuer(issuer)
|
|
||||||
.withClaim("id", user.id.toString())
|
|
||||||
.withExpiresAt(getExpiration())
|
|
||||||
.sign(algorithm)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate the expiration Date based on current time + the given validity
|
|
||||||
*/
|
|
||||||
private fun getExpiration() = Date(System.currentTimeMillis() + validityInMs)
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package fr.dcproject
|
package fr.dcproject.application
|
||||||
|
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.article.ArticleRef
|
import fr.dcproject.component.article.ArticleRef
|
||||||
@@ -6,12 +6,14 @@ import fr.dcproject.component.article.ArticleRepository
|
|||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
import fr.dcproject.component.citizen.CitizenBasic
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
import fr.dcproject.component.comment.generic.CommentRef
|
import fr.dcproject.component.comment.generic.CommentRef
|
||||||
|
import fr.dcproject.component.workgroup.Workgroup
|
||||||
|
import fr.dcproject.component.workgroup.WorkgroupRef
|
||||||
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.entity.Constitution
|
import fr.dcproject.entity.Constitution
|
||||||
import fr.dcproject.entity.ConstitutionRef
|
import fr.dcproject.entity.ConstitutionRef
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRef
|
|
||||||
import fr.dcproject.repository.OpinionChoice
|
import fr.dcproject.repository.OpinionChoice
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
|
||||||
import io.ktor.features.*
|
import io.ktor.features.*
|
||||||
import io.ktor.util.*
|
import io.ktor.util.*
|
||||||
import org.koin.core.context.GlobalContext
|
import org.koin.core.context.GlobalContext
|
||||||
@@ -84,7 +86,7 @@ val converters: ConverterDeclaration = {
|
|||||||
decode { values, _ ->
|
decode { values, _ ->
|
||||||
val id = values.singleOrNull()?.let { UUID.fromString(it) }
|
val id = values.singleOrNull()?.let { UUID.fromString(it) }
|
||||||
?: throw InternalError("Cannot convert $values to UUID")
|
?: throw InternalError("Cannot convert $values to UUID")
|
||||||
get<fr.dcproject.component.citizen.CitizenRepository>().findById(id) ?: throw NotFoundException("Citizen $values not found")
|
get<CitizenRepository>().findById(id) ?: throw NotFoundException("Citizen $values not found")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,7 +115,7 @@ val converters: ConverterDeclaration = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
convert<fr.dcproject.component.workgroup.Workgroup<CitizenBasic>> {
|
convert<Workgroup<CitizenBasic>> {
|
||||||
decode { values, _ ->
|
decode { values, _ ->
|
||||||
val id = values.singleOrNull()?.let { UUID.fromString(it) }
|
val id = values.singleOrNull()?.let { UUID.fromString(it) }
|
||||||
?: throw InternalError("Cannot convert $values to UUID")
|
?: throw InternalError("Cannot convert $values to UUID")
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package fr.dcproject
|
package fr.dcproject.application
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.DeserializationFeature
|
import com.fasterxml.jackson.databind.DeserializationFeature
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
@@ -48,30 +48,30 @@ import fr.dcproject.repository.VoteConstitution as VoteConstitutionRepository
|
|||||||
@KtorExperimentalAPI
|
@KtorExperimentalAPI
|
||||||
val KoinModule = module {
|
val KoinModule = module {
|
||||||
|
|
||||||
single { Config }
|
single { Configuration }
|
||||||
|
|
||||||
// SQL connection
|
// SQL connection
|
||||||
single {
|
single {
|
||||||
Connection(
|
Connection(
|
||||||
host = Config.host,
|
host = Configuration.host,
|
||||||
port = Config.port,
|
port = Configuration.port,
|
||||||
database = Config.database,
|
database = Configuration.database,
|
||||||
username = Config.username,
|
username = Configuration.username,
|
||||||
password = Config.password
|
password = Configuration.password
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Launch Database migration
|
// Launch Database migration
|
||||||
single { Migrations(get(), Config.Sql.migrationFiles, Config.Sql.functionFiles) }
|
single { Migrations(get(), Configuration.Sql.migrationFiles, Configuration.Sql.functionFiles) }
|
||||||
|
|
||||||
// Redis client
|
// Redis client
|
||||||
single<RedisAsyncCommands<String, String>> {
|
single<RedisAsyncCommands<String, String>> {
|
||||||
RedisClient.create(Config.redis).connect()?.async() ?: error("Unable to connect to redis")
|
RedisClient.create(Configuration.redis).connect()?.async() ?: error("Unable to connect to redis")
|
||||||
}
|
}
|
||||||
|
|
||||||
// RabbitMQ
|
// RabbitMQ
|
||||||
single<ConnectionFactory> {
|
single<ConnectionFactory> {
|
||||||
ConnectionFactory().apply { setUri(Config.rabbitmq) }
|
ConnectionFactory().apply { setUri(Configuration.rabbitmq) }
|
||||||
}
|
}
|
||||||
|
|
||||||
// JsonSerializer
|
// JsonSerializer
|
||||||
@@ -97,7 +97,7 @@ val KoinModule = module {
|
|||||||
single {
|
single {
|
||||||
Requester.RequesterFactory(
|
Requester.RequesterFactory(
|
||||||
connection = get(),
|
connection = get(),
|
||||||
functionsDirectory = Config.Sql.functionFiles
|
functionsDirectory = Configuration.Sql.functionFiles
|
||||||
).createRequester()
|
).createRequester()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,19 +127,19 @@ val KoinModule = module {
|
|||||||
// Elasticsearch Client
|
// Elasticsearch Client
|
||||||
single<RestClient> {
|
single<RestClient> {
|
||||||
RestClient.builder(
|
RestClient.builder(
|
||||||
HttpHost.create(Config.elasticsearch)
|
HttpHost.create(Configuration.elasticsearch)
|
||||||
).build()
|
).build()
|
||||||
}
|
}
|
||||||
|
|
||||||
single { ArticleViewManager(get()) }
|
single { ArticleViewManager(get()) }
|
||||||
|
|
||||||
// Mailer
|
// Mailer
|
||||||
single { Mailer(Config.sendGridKey) }
|
single { Mailer(Configuration.sendGridKey) }
|
||||||
|
|
||||||
// SSO Manager for connection
|
// SSO Manager for connection
|
||||||
single { SsoManager(get<Mailer>(), Config.domain, get()) }
|
single { SsoManager(get<Mailer>(), Configuration.domain, get()) }
|
||||||
|
|
||||||
single { Publisher(get(), get()) }
|
single { Publisher(get(), get()) }
|
||||||
|
|
||||||
single { NotificationEmailSender(get<Mailer>(), Config.domain, get(), get()) }
|
single { NotificationEmailSender(get<Mailer>(), Configuration.domain, get(), get()) }
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package fr.dcproject.component.article.routes
|
package fr.dcproject.component.article.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.article.ArticleRepository
|
import fr.dcproject.component.article.ArticleRepository
|
||||||
import fr.dcproject.component.article.ArticleVoter
|
import fr.dcproject.component.article.ArticleVoter
|
||||||
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import fr.postgresjson.repository.RepositoryI
|
import fr.postgresjson.repository.RepositoryI
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package fr.dcproject.component.article.routes
|
package fr.dcproject.component.article.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
|
||||||
import fr.dcproject.component.article.ArticleForListing
|
import fr.dcproject.component.article.ArticleForListing
|
||||||
import fr.dcproject.component.article.ArticleRepository
|
import fr.dcproject.component.article.ArticleRepository
|
||||||
import fr.dcproject.component.article.ArticleVoter
|
import fr.dcproject.component.article.ArticleVoter
|
||||||
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import fr.postgresjson.connexion.Paginated
|
import fr.postgresjson.connexion.Paginated
|
||||||
import fr.postgresjson.repository.RepositoryI
|
import fr.postgresjson.repository.RepositoryI
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package fr.dcproject.component.article.routes
|
package fr.dcproject.component.article.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.article.ArticleRepository
|
import fr.dcproject.component.article.ArticleRepository
|
||||||
import fr.dcproject.component.article.ArticleViewManager
|
import fr.dcproject.component.article.ArticleViewManager
|
||||||
import fr.dcproject.component.article.ArticleVoter
|
import fr.dcproject.component.article.ArticleVoter
|
||||||
import fr.dcproject.component.article.routes.ArticleRequest.Output
|
import fr.dcproject.component.article.routes.ArticleRequest.Output
|
||||||
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.dto.*
|
import fr.dcproject.dto.*
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
package fr.dcproject.component.article.routes
|
package fr.dcproject.component.article.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
|
||||||
import fr.dcproject.citizenOrNull
|
|
||||||
import fr.dcproject.component.article.ArticleForUpdate
|
import fr.dcproject.component.article.ArticleForUpdate
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.article.ArticleRepository
|
import fr.dcproject.component.article.ArticleRepository
|
||||||
import fr.dcproject.component.article.ArticleVoter
|
import fr.dcproject.component.article.ArticleVoter
|
||||||
import fr.dcproject.component.article.routes.PostArticleRequest.Input
|
import fr.dcproject.component.article.routes.PostArticleRequest.Input
|
||||||
|
import fr.dcproject.component.auth.citizen
|
||||||
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRef
|
import fr.dcproject.component.workgroup.WorkgroupRef
|
||||||
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.event.ArticleUpdate
|
import fr.dcproject.event.ArticleUpdate
|
||||||
import fr.dcproject.event.raiseEvent
|
import fr.dcproject.event.raiseEvent
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.locations.*
|
import io.ktor.locations.*
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package fr.dcproject
|
package fr.dcproject.component.auth
|
||||||
|
|
||||||
import fr.dcproject.component.auth.User
|
|
||||||
import fr.dcproject.component.auth.UserI
|
|
||||||
import fr.dcproject.component.citizen.CitizenRepository
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.auth.*
|
import io.ktor.auth.*
|
||||||
@@ -3,10 +3,10 @@ package fr.dcproject.component.auth
|
|||||||
import com.sendgrid.helpers.mail.Mail
|
import com.sendgrid.helpers.mail.Mail
|
||||||
import com.sendgrid.helpers.mail.objects.Content
|
import com.sendgrid.helpers.mail.objects.Content
|
||||||
import com.sendgrid.helpers.mail.objects.Email
|
import com.sendgrid.helpers.mail.objects.Email
|
||||||
import fr.dcproject.JwtConfig
|
|
||||||
import fr.dcproject.component.citizen.CitizenRepository
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
import fr.dcproject.component.citizen.CitizenWithEmail
|
import fr.dcproject.component.citizen.CitizenWithEmail
|
||||||
import fr.dcproject.component.citizen.CitizenWithUserI
|
import fr.dcproject.component.citizen.CitizenWithUserI
|
||||||
|
import fr.dcproject.makeToken
|
||||||
import fr.dcproject.messages.Mailer
|
import fr.dcproject.messages.Mailer
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ class SsoManager(
|
|||||||
|
|
||||||
fun <C> sendEmail(citizen: C, url: String) where C : CitizenWithEmail, C : CitizenWithUserI {
|
fun <C> sendEmail(citizen: C, url: String) where C : CitizenWithEmail, C : CitizenWithUserI {
|
||||||
mailer.sendEmail {
|
mailer.sendEmail {
|
||||||
val token = JwtConfig.makeToken(citizen.user)
|
val token = citizen.user.makeToken()
|
||||||
Mail(
|
Mail(
|
||||||
Email("sso@$domain"),
|
Email("sso@$domain"),
|
||||||
"Connection",
|
"Connection",
|
||||||
|
|||||||
15
src/main/kotlin/component/auth/jwt/JWTMaker.kt
Normal file
15
src/main/kotlin/component/auth/jwt/JWTMaker.kt
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package fr.dcproject
|
||||||
|
|
||||||
|
import com.auth0.jwt.JWT
|
||||||
|
import fr.dcproject.component.auth.UserI
|
||||||
|
import fr.dcproject.component.auth.jwt.JwtConfig
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Produce a token for this combination of User and Account
|
||||||
|
*/
|
||||||
|
fun UserI.makeToken(): String = JWT.create()
|
||||||
|
.withSubject("Authentication")
|
||||||
|
.withIssuer(JwtConfig.issuer)
|
||||||
|
.withClaim("id", id.toString())
|
||||||
|
.withExpiresAt(JwtConfig.getExpiration())
|
||||||
|
.sign(JwtConfig.algorithm)
|
||||||
25
src/main/kotlin/component/auth/jwt/JwtConfig.kt
Normal file
25
src/main/kotlin/component/auth/jwt/JwtConfig.kt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package fr.dcproject.component.auth.jwt
|
||||||
|
|
||||||
|
import com.auth0.jwt.JWT
|
||||||
|
import com.auth0.jwt.JWTVerifier
|
||||||
|
import com.auth0.jwt.algorithms.Algorithm
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
object JwtConfig {
|
||||||
|
private const val secret = "zAP5MBA4B4Ijz0MZaS48"
|
||||||
|
const val issuer = "dc-project.fr"
|
||||||
|
private const val validityInMs = 3_600_000 * 10 // 10 hours
|
||||||
|
|
||||||
|
// TODO change to RSA512
|
||||||
|
val algorithm: Algorithm = Algorithm.HMAC512(secret)
|
||||||
|
|
||||||
|
val verifier: JWTVerifier = JWT
|
||||||
|
.require(algorithm)
|
||||||
|
.withIssuer(issuer)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the expiration Date based on current time + the given validity
|
||||||
|
*/
|
||||||
|
fun getExpiration() = Date(System.currentTimeMillis() + validityInMs)
|
||||||
|
}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package fr.dcproject.component.auth.routes
|
package fr.dcproject.component.auth.routes
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.exc.MismatchedInputException
|
import com.fasterxml.jackson.databind.exc.MismatchedInputException
|
||||||
import fr.dcproject.JwtConfig
|
|
||||||
import fr.dcproject.component.auth.UserRepository
|
import fr.dcproject.component.auth.UserRepository
|
||||||
|
import fr.dcproject.makeToken
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.auth.*
|
import io.ktor.auth.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
@@ -23,7 +23,7 @@ fun Route.authLogin(userRepo: UserRepository) {
|
|||||||
try {
|
try {
|
||||||
val credentials = call.receive<UserPasswordCredential>()
|
val credentials = call.receive<UserPasswordCredential>()
|
||||||
userRepo.findByCredentials(credentials)?.let { user ->
|
userRepo.findByCredentials(credentials)?.let { user ->
|
||||||
call.respondText(JwtConfig.makeToken(user))
|
call.respondText(user.makeToken())
|
||||||
} ?: call.respond(HttpStatusCode.BadRequest, "Username not exist or password is wrong")
|
} ?: call.respond(HttpStatusCode.BadRequest, "Username not exist or password is wrong")
|
||||||
} catch (e: MismatchedInputException) {
|
} catch (e: MismatchedInputException) {
|
||||||
call.respond(HttpStatusCode.BadRequest, "You must be send name and password to the request")
|
call.respond(HttpStatusCode.BadRequest, "You must be send name and password to the request")
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
package fr.dcproject.component.auth.routes
|
package fr.dcproject.component.auth.routes
|
||||||
|
|
||||||
import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
|
import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
|
||||||
import fr.dcproject.JwtConfig
|
|
||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
import fr.dcproject.component.auth.routes.RegisterRequest.Input
|
import fr.dcproject.component.auth.routes.RegisterRequest.Input
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.component.citizen.CitizenRepository
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
|
import fr.dcproject.makeToken
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.features.*
|
import io.ktor.features.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
@@ -61,7 +61,7 @@ fun Route.authRegister(citizenRepo: CitizenRepository) {
|
|||||||
try {
|
try {
|
||||||
val citizen = call.receive<Input>().toCitizen()
|
val citizen = call.receive<Input>().toCitizen()
|
||||||
val createdCitizen = citizenRepo.insertWithUser(citizen)?.user ?: throw BadRequestException("Bad request")
|
val createdCitizen = citizenRepo.insertWithUser(citizen)?.user ?: throw BadRequestException("Bad request")
|
||||||
call.respondText(JwtConfig.makeToken(createdCitizen))
|
call.respondText(createdCitizen.makeToken())
|
||||||
} catch (e: MissingKotlinParameterException) {
|
} catch (e: MissingKotlinParameterException) {
|
||||||
call.respond(HttpStatusCode.BadRequest)
|
call.respond(HttpStatusCode.BadRequest)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package fr.dcproject.component.citizen.routes
|
package fr.dcproject.component.citizen.routes
|
||||||
|
|
||||||
import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
|
import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
|
||||||
import fr.dcproject.citizen
|
|
||||||
import fr.dcproject.citizenOrNull
|
|
||||||
import fr.dcproject.component.auth.UserRepository
|
import fr.dcproject.component.auth.UserRepository
|
||||||
|
import fr.dcproject.component.auth.citizen
|
||||||
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.citizen.CitizenVoter
|
import fr.dcproject.component.citizen.CitizenVoter
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.component.citizen.routes
|
package fr.dcproject.component.citizen.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.CitizenRepository
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
import fr.dcproject.component.citizen.CitizenVoter
|
import fr.dcproject.component.citizen.CitizenVoter
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.dcproject.component.citizen.routes
|
package fr.dcproject.component.citizen.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.CitizenVoter
|
import fr.dcproject.component.citizen.CitizenVoter
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.component.citizen.routes
|
package fr.dcproject.component.citizen.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.citizen.CitizenVoter
|
import fr.dcproject.component.citizen.CitizenVoter
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package fr.dcproject.component.comment.article.routes
|
package fr.dcproject.component.comment.article.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
|
||||||
import fr.dcproject.citizenOrNull
|
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
|
import fr.dcproject.component.auth.citizen
|
||||||
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.comment.article.CommentArticleRepository
|
import fr.dcproject.component.comment.article.CommentArticleRepository
|
||||||
import fr.dcproject.component.comment.generic.CommentForUpdate
|
import fr.dcproject.component.comment.generic.CommentForUpdate
|
||||||
import fr.dcproject.component.comment.generic.CommentVoter
|
import fr.dcproject.component.comment.generic.CommentVoter
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.dcproject.component.comment.article.routes
|
package fr.dcproject.component.comment.article.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
|
||||||
import fr.dcproject.component.article.ArticleRef
|
import fr.dcproject.component.article.ArticleRef
|
||||||
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.comment.article.CommentArticleRepository
|
import fr.dcproject.component.comment.article.CommentArticleRepository
|
||||||
import fr.dcproject.component.comment.generic.CommentVoter
|
import fr.dcproject.component.comment.generic.CommentVoter
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.component.comment.article.routes
|
package fr.dcproject.component.comment.article.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.comment.article.CommentArticleRepository
|
import fr.dcproject.component.comment.article.CommentArticleRepository
|
||||||
import fr.dcproject.component.comment.generic.CommentVoter
|
import fr.dcproject.component.comment.generic.CommentVoter
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.dcproject.component.comment.generic.routes
|
package fr.dcproject.component.comment.generic.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.comment.generic.CommentForUpdate
|
import fr.dcproject.component.comment.generic.CommentForUpdate
|
||||||
import fr.dcproject.component.comment.generic.CommentRef
|
import fr.dcproject.component.comment.generic.CommentRef
|
||||||
import fr.dcproject.component.comment.generic.CommentRepository
|
import fr.dcproject.component.comment.generic.CommentRepository
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.component.comment.generic.routes
|
package fr.dcproject.component.comment.generic.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.comment.generic.CommentRef
|
import fr.dcproject.component.comment.generic.CommentRef
|
||||||
import fr.dcproject.component.comment.generic.CommentRepository
|
import fr.dcproject.component.comment.generic.CommentRepository
|
||||||
import fr.dcproject.component.comment.generic.CommentVoter
|
import fr.dcproject.component.comment.generic.CommentVoter
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.component.comment.generic.routes
|
package fr.dcproject.component.comment.generic.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.comment.generic.CommentRepository
|
import fr.dcproject.component.comment.generic.CommentRepository
|
||||||
import fr.dcproject.component.comment.generic.CommentVoter
|
import fr.dcproject.component.comment.generic.CommentVoter
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.component.comment.generic.routes
|
package fr.dcproject.component.comment.generic.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.comment.generic.CommentRef
|
import fr.dcproject.component.comment.generic.CommentRef
|
||||||
import fr.dcproject.component.comment.generic.CommentRepository
|
import fr.dcproject.component.comment.generic.CommentRepository
|
||||||
import fr.dcproject.component.comment.generic.CommentVoter
|
import fr.dcproject.component.comment.generic.CommentVoter
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package fr.dcproject.component.workgroup.routes
|
package fr.dcproject.component.workgroup.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.component.workgroup.WorkgroupSimple
|
import fr.dcproject.component.workgroup.WorkgroupSimple
|
||||||
import fr.dcproject.component.workgroup.routes.CreateWorkgroup.PostWorkgroupRequest.Input
|
|
||||||
import fr.dcproject.component.workgroup.WorkgroupVoter
|
import fr.dcproject.component.workgroup.WorkgroupVoter
|
||||||
|
import fr.dcproject.component.workgroup.routes.CreateWorkgroup.PostWorkgroupRequest.Input
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.component.workgroup.routes
|
package fr.dcproject.component.workgroup.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.component.workgroup.WorkgroupVoter
|
import fr.dcproject.component.workgroup.WorkgroupVoter
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package fr.dcproject.component.workgroup.routes
|
package fr.dcproject.component.workgroup.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.component.workgroup.routes.EditWorkgroup.PutWorkgroupRequest.Input
|
|
||||||
import fr.dcproject.component.workgroup.WorkgroupVoter
|
import fr.dcproject.component.workgroup.WorkgroupVoter
|
||||||
|
import fr.dcproject.component.workgroup.routes.EditWorkgroup.PutWorkgroupRequest.Input
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.component.workgroup.routes
|
package fr.dcproject.component.workgroup.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.component.workgroup.WorkgroupVoter
|
import fr.dcproject.component.workgroup.WorkgroupVoter
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.component.workgroup.routes
|
package fr.dcproject.component.workgroup.routes
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.component.workgroup.WorkgroupVoter
|
import fr.dcproject.component.workgroup.WorkgroupVoter
|
||||||
import fr.dcproject.utils.toUUID
|
import fr.dcproject.utils.toUUID
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package fr.dcproject.component.workgroup.routes.members
|
package fr.dcproject.component.workgroup.routes.members
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
|
||||||
import fr.dcproject.component.workgroup.WorkgroupVoter
|
import fr.dcproject.component.workgroup.WorkgroupVoter
|
||||||
|
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package fr.dcproject.component.workgroup.routes.members
|
package fr.dcproject.component.workgroup.routes.members
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
|
||||||
import fr.dcproject.component.workgroup.WorkgroupVoter
|
import fr.dcproject.component.workgroup.WorkgroupVoter
|
||||||
|
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package fr.dcproject.component.workgroup.routes.members
|
package fr.dcproject.component.workgroup.routes.members
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.component.workgroup.WorkgroupRepository
|
import fr.dcproject.component.workgroup.WorkgroupRepository
|
||||||
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
|
||||||
import fr.dcproject.component.workgroup.WorkgroupVoter
|
import fr.dcproject.component.workgroup.WorkgroupVoter
|
||||||
|
import fr.dcproject.component.workgroup.WorkgroupWithMembersI
|
||||||
import fr.dcproject.voter.assert
|
import fr.dcproject.voter.assert
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package fr.dcproject.event
|
|||||||
|
|
||||||
import com.rabbitmq.client.*
|
import com.rabbitmq.client.*
|
||||||
import com.rabbitmq.client.BuiltinExchangeType.DIRECT
|
import com.rabbitmq.client.BuiltinExchangeType.DIRECT
|
||||||
import fr.dcproject.Config
|
import fr.dcproject.application.Configuration
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.entity.FollowSimple
|
import fr.dcproject.entity.FollowSimple
|
||||||
@@ -46,7 +46,7 @@ class EventNotification(
|
|||||||
|
|
||||||
fun config() {
|
fun config() {
|
||||||
/* Config Rabbit */
|
/* Config Rabbit */
|
||||||
val exchangeName = Config.exchangeNotificationName
|
val exchangeName = Configuration.exchangeNotificationName
|
||||||
rabbitFactory.newConnection().use { connection ->
|
rabbitFactory.newConnection().use { connection ->
|
||||||
connection.createChannel().use { channel ->
|
connection.createChannel().use { channel ->
|
||||||
channel.queueDeclare("push", true, false, false, null)
|
channel.queueDeclare("push", true, false, false, null)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package fr.dcproject.event.publisher
|
|||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import com.rabbitmq.client.ConnectionFactory
|
import com.rabbitmq.client.ConnectionFactory
|
||||||
import fr.dcproject.Config
|
import fr.dcproject.application.Configuration
|
||||||
import fr.dcproject.event.EntityEvent
|
import fr.dcproject.event.EntityEvent
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
@@ -19,7 +19,7 @@ class Publisher(
|
|||||||
return GlobalScope.launch {
|
return GlobalScope.launch {
|
||||||
factory.newConnection().use { connection ->
|
factory.newConnection().use { connection ->
|
||||||
connection.createChannel().use { channel ->
|
connection.createChannel().use { channel ->
|
||||||
channel.basicPublish(Config.exchangeNotificationName, "", null, it.serialize().toByteArray())
|
channel.basicPublish(Configuration.exchangeNotificationName, "", null, it.serialize().toByteArray())
|
||||||
logger.debug("Publish message ${it.target.id}")
|
logger.debug("Publish message ${it.target.id}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.dcproject.routes
|
package fr.dcproject.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.comment.generic.CommentForUpdate
|
import fr.dcproject.component.comment.generic.CommentForUpdate
|
||||||
import fr.dcproject.component.comment.generic.CommentVoter
|
import fr.dcproject.component.comment.generic.CommentVoter
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.dcproject.routes
|
package fr.dcproject.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
|
||||||
import fr.dcproject.component.article.ArticleRef
|
import fr.dcproject.component.article.ArticleRef
|
||||||
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.component.citizen.CitizenWithUserI
|
import fr.dcproject.component.citizen.CitizenWithUserI
|
||||||
import fr.dcproject.entity.ConstitutionSimple
|
import fr.dcproject.entity.ConstitutionSimple
|
||||||
import fr.dcproject.entity.ConstitutionSimple.TitleSimple
|
import fr.dcproject.entity.ConstitutionSimple.TitleSimple
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.dcproject.routes
|
package fr.dcproject.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
|
||||||
import fr.dcproject.component.article.ArticleRef
|
import fr.dcproject.component.article.ArticleRef
|
||||||
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.entity.FollowForUpdate
|
import fr.dcproject.entity.FollowForUpdate
|
||||||
import fr.dcproject.security.voter.FollowVoter.Action.*
|
import fr.dcproject.security.voter.FollowVoter.Action.*
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.routes
|
package fr.dcproject.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.entity.ConstitutionRef
|
import fr.dcproject.entity.ConstitutionRef
|
||||||
import fr.dcproject.entity.FollowForUpdate
|
import fr.dcproject.entity.FollowForUpdate
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.routes
|
package fr.dcproject.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.event.Event
|
import fr.dcproject.event.Event
|
||||||
import fr.postgresjson.serializer.deserialize
|
import fr.postgresjson.serializer.deserialize
|
||||||
import io.ktor.client.*
|
import io.ktor.client.*
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.dcproject.routes
|
package fr.dcproject.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.entity.OpinionChoiceRef
|
import fr.dcproject.entity.OpinionChoiceRef
|
||||||
import fr.dcproject.security.voter.OpinionVoter.Action.CREATE
|
import fr.dcproject.security.voter.OpinionVoter.Action.CREATE
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package fr.dcproject.routes
|
package fr.dcproject.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.comment.generic.CommentRepository
|
import fr.dcproject.component.comment.generic.CommentRepository
|
||||||
import fr.dcproject.entity.VoteForUpdate
|
import fr.dcproject.entity.VoteForUpdate
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.routes
|
package fr.dcproject.routes
|
||||||
|
|
||||||
import fr.dcproject.citizen
|
import fr.dcproject.component.auth.citizen
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.entity.VoteForUpdate
|
import fr.dcproject.entity.VoteForUpdate
|
||||||
import fr.dcproject.routes.VoteConstitutionPaths.ConstitutionVoteRequest.Content
|
import fr.dcproject.routes.VoteConstitutionPaths.ConstitutionVoteRequest.Content
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package fr.dcproject.security.voter
|
package fr.dcproject.security.voter
|
||||||
|
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
|
import fr.dcproject.component.auth.user
|
||||||
import fr.dcproject.component.comment.generic.CommentForView
|
import fr.dcproject.component.comment.generic.CommentForView
|
||||||
import fr.dcproject.entity.ConstitutionSimple
|
import fr.dcproject.entity.ConstitutionSimple
|
||||||
import fr.dcproject.user
|
|
||||||
import fr.dcproject.voter.NoRuleDefinedException
|
import fr.dcproject.voter.NoRuleDefinedException
|
||||||
import fr.dcproject.voter.NoSubjectDefinedException
|
import fr.dcproject.voter.NoSubjectDefinedException
|
||||||
import fr.ktorVoter.*
|
import fr.ktorVoter.*
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.security.voter
|
package fr.dcproject.security.voter
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.entity.FollowI
|
import fr.dcproject.entity.FollowI
|
||||||
import fr.dcproject.voter.NoSubjectDefinedException
|
import fr.dcproject.voter.NoSubjectDefinedException
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ package fr.dcproject.security.voter
|
|||||||
|
|
||||||
import fr.dcproject.component.article.ArticleAuthI
|
import fr.dcproject.component.article.ArticleAuthI
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
|
import fr.dcproject.component.auth.user
|
||||||
import fr.dcproject.entity.Opinion
|
import fr.dcproject.entity.Opinion
|
||||||
import fr.dcproject.user
|
|
||||||
import fr.dcproject.voter.NoRuleDefinedException
|
import fr.dcproject.voter.NoRuleDefinedException
|
||||||
import fr.dcproject.voter.NoSubjectDefinedException
|
import fr.dcproject.voter.NoSubjectDefinedException
|
||||||
import fr.ktorVoter.*
|
import fr.ktorVoter.*
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package fr.dcproject.security.voter
|
package fr.dcproject.security.voter
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.entity.VoteForUpdateI
|
import fr.dcproject.entity.VoteForUpdateI
|
||||||
import fr.dcproject.entity.VoteI
|
import fr.dcproject.entity.VoteI
|
||||||
import fr.dcproject.voter.NoSubjectDefinedException
|
import fr.dcproject.voter.NoSubjectDefinedException
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import fr.dcproject.Config
|
import fr.dcproject.application.Configuration
|
||||||
import fr.dcproject.Env.CUCUMBER
|
import fr.dcproject.application.Env.CUCUMBER
|
||||||
import fr.dcproject.module
|
import fr.dcproject.application.module
|
||||||
import fr.dcproject.utils.LoggerDelegate
|
import fr.dcproject.utils.LoggerDelegate
|
||||||
import fr.postgresjson.connexion.Connection
|
import fr.postgresjson.connexion.Connection
|
||||||
import fr.postgresjson.connexion.Requester
|
import fr.postgresjson.connexion.Requester
|
||||||
@@ -32,9 +32,9 @@ class CucumberTest : En, KoinTest {
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
if (!unitialized) {
|
if (!unitialized) {
|
||||||
Config.database = "test"
|
Configuration.database = "test"
|
||||||
Config.username = "test"
|
Configuration.username = "test"
|
||||||
Config.password = "test"
|
Configuration.password = "test"
|
||||||
|
|
||||||
withTestApplication({ module(CUCUMBER) }) {
|
withTestApplication({ module(CUCUMBER) }) {
|
||||||
migrations()
|
migrations()
|
||||||
@@ -43,9 +43,9 @@ class CucumberTest : En, KoinTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Before(-1) { _: Scenario ->
|
Before(-1) { _: Scenario ->
|
||||||
Config.database = "test"
|
Configuration.database = "test"
|
||||||
Config.username = "test"
|
Configuration.username = "test"
|
||||||
Config.password = "test"
|
Configuration.password = "test"
|
||||||
ktorContext.start()
|
ktorContext.start()
|
||||||
//language=PostgreSQL
|
//language=PostgreSQL
|
||||||
get<Connection>().sendQuery("start transaction;", listOf())
|
get<Connection>().sendQuery("start transaction;", listOf())
|
||||||
@@ -59,9 +59,9 @@ class CucumberTest : En, KoinTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun migrations() {
|
private fun migrations() {
|
||||||
Config.database = "test"
|
Configuration.database = "test"
|
||||||
Config.username = "test"
|
Configuration.username = "test"
|
||||||
Config.password = "test"
|
Configuration.password = "test"
|
||||||
val migrations: Migrations = get()
|
val migrations: Migrations = get()
|
||||||
migrations.forceAllDown()
|
migrations.forceAllDown()
|
||||||
migrations.run()
|
migrations.run()
|
||||||
@@ -85,7 +85,7 @@ class CucumberTest : En, KoinTest {
|
|||||||
private fun getFixturesRequester(): Requester {
|
private fun getFixturesRequester(): Requester {
|
||||||
return Requester.RequesterFactory(
|
return Requester.RequesterFactory(
|
||||||
connection = get(),
|
connection = get(),
|
||||||
queriesDirectory = Config.Sql.fixtureFiles
|
queriesDirectory = Configuration.Sql.fixtureFiles
|
||||||
).createRequester()
|
).createRequester()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ package functional
|
|||||||
import com.sendgrid.helpers.mail.Mail
|
import com.sendgrid.helpers.mail.Mail
|
||||||
import com.sendgrid.helpers.mail.objects.Content
|
import com.sendgrid.helpers.mail.objects.Content
|
||||||
import com.sendgrid.helpers.mail.objects.Email
|
import com.sendgrid.helpers.mail.objects.Email
|
||||||
import fr.dcproject.Env
|
import fr.dcproject.application.Env.TEST
|
||||||
|
import fr.dcproject.application.module
|
||||||
import fr.dcproject.messages.Mailer
|
import fr.dcproject.messages.Mailer
|
||||||
import fr.dcproject.module
|
|
||||||
import io.ktor.locations.*
|
import io.ktor.locations.*
|
||||||
import io.ktor.server.testing.*
|
import io.ktor.server.testing.*
|
||||||
import io.ktor.util.*
|
import io.ktor.util.*
|
||||||
@@ -25,7 +25,7 @@ class MailerTest : KoinTest, AutoCloseKoinTest() {
|
|||||||
@Test
|
@Test
|
||||||
@Tag("online, functional")
|
@Tag("online, functional")
|
||||||
fun `can be send an email`() {
|
fun `can be send an email`() {
|
||||||
withTestApplication({ module(Env.TEST) }) {
|
withTestApplication({ module(TEST) }) {
|
||||||
get<Mailer>().sendEmail {
|
get<Mailer>().sendEmail {
|
||||||
Mail(
|
Mail(
|
||||||
Email("sso@dc-project.fr"),
|
Email("sso@dc-project.fr"),
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package functional
|
package functional
|
||||||
|
|
||||||
import fr.dcproject.Env
|
import fr.dcproject.application.Env.TEST
|
||||||
|
import fr.dcproject.application.module
|
||||||
import fr.dcproject.component.article.ArticleRefVersioning
|
import fr.dcproject.component.article.ArticleRefVersioning
|
||||||
import fr.dcproject.component.article.ArticleViewManager
|
import fr.dcproject.component.article.ArticleViewManager
|
||||||
import fr.dcproject.component.citizen.CitizenRef
|
import fr.dcproject.component.citizen.CitizenRef
|
||||||
import fr.dcproject.module
|
|
||||||
import io.ktor.locations.*
|
import io.ktor.locations.*
|
||||||
import io.ktor.server.testing.*
|
import io.ktor.server.testing.*
|
||||||
import io.ktor.util.*
|
import io.ktor.util.*
|
||||||
@@ -26,7 +26,7 @@ class ViewTest {
|
|||||||
val article = ArticleRefVersioning(id = UUID.randomUUID(), versionId = UUID.randomUUID())
|
val article = ArticleRefVersioning(id = UUID.randomUUID(), versionId = UUID.randomUUID())
|
||||||
val citizenRef = CitizenRef()
|
val citizenRef = CitizenRef()
|
||||||
|
|
||||||
withTestApplication({ module(Env.TEST) }) {
|
withTestApplication({ module(TEST) }) {
|
||||||
val viewManager: ArticleViewManager = application.get()
|
val viewManager: ArticleViewManager = application.get()
|
||||||
|
|
||||||
/* Get view before */
|
/* Get view before */
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package steps
|
package steps
|
||||||
|
|
||||||
import com.auth0.jwt.JWT
|
import com.auth0.jwt.JWT
|
||||||
import fr.dcproject.JwtConfig
|
import fr.dcproject.component.auth.jwt.JwtConfig
|
||||||
import fr.dcproject.component.citizen.CitizenRepository
|
import fr.dcproject.component.citizen.CitizenRepository
|
||||||
import io.cucumber.java8.En
|
import io.cucumber.java8.En
|
||||||
import io.ktor.http.*
|
import io.ktor.http.*
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
package unit.voter
|
package unit.voter
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
import fr.dcproject.component.citizen.CitizenBasic
|
||||||
import fr.dcproject.component.citizen.CitizenCart
|
import fr.dcproject.component.citizen.CitizenCart
|
||||||
@@ -105,7 +105,7 @@ internal class FollowVoterTest {
|
|||||||
)
|
)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
mockkStatic("fr.dcproject.ApplicationContextKt")
|
mockkStatic("fr.dcproject.component.auth.CitizenContextKt")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ package unit.voter
|
|||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
|
import fr.dcproject.component.auth.user
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
import fr.dcproject.component.citizen.CitizenBasic
|
||||||
import fr.dcproject.component.citizen.CitizenCart
|
import fr.dcproject.component.citizen.CitizenCart
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.entity.OpinionChoice
|
import fr.dcproject.entity.OpinionChoice
|
||||||
import fr.dcproject.security.voter.OpinionChoiceVoter
|
import fr.dcproject.security.voter.OpinionChoiceVoter
|
||||||
import fr.dcproject.user
|
|
||||||
import fr.ktorVoter.ActionI
|
import fr.ktorVoter.ActionI
|
||||||
import fr.ktorVoter.Vote
|
import fr.ktorVoter.Vote
|
||||||
import fr.ktorVoter.can
|
import fr.ktorVoter.can
|
||||||
@@ -64,7 +64,7 @@ internal class OpinionChoiceVoterTest {
|
|||||||
)
|
)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
mockkStatic("fr.dcproject.ApplicationContextKt")
|
mockkStatic("fr.dcproject.component.auth.CitizenContextKt")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -3,13 +3,13 @@ package unit.voter
|
|||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
|
import fr.dcproject.component.auth.user
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
import fr.dcproject.component.citizen.CitizenBasic
|
||||||
import fr.dcproject.component.citizen.CitizenCart
|
import fr.dcproject.component.citizen.CitizenCart
|
||||||
import fr.dcproject.component.citizen.CitizenI
|
import fr.dcproject.component.citizen.CitizenI
|
||||||
import fr.dcproject.entity.Opinion
|
import fr.dcproject.entity.Opinion
|
||||||
import fr.dcproject.entity.OpinionChoice
|
import fr.dcproject.entity.OpinionChoice
|
||||||
import fr.dcproject.security.voter.OpinionVoter
|
import fr.dcproject.security.voter.OpinionVoter
|
||||||
import fr.dcproject.user
|
|
||||||
import fr.dcproject.voter.NoSubjectDefinedException
|
import fr.dcproject.voter.NoSubjectDefinedException
|
||||||
import fr.ktorVoter.*
|
import fr.ktorVoter.*
|
||||||
import io.ktor.application.*
|
import io.ktor.application.*
|
||||||
@@ -79,7 +79,7 @@ internal class OpinionVoterTest {
|
|||||||
)
|
)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
mockkStatic("fr.dcproject.ApplicationContextKt")
|
mockkStatic("fr.dcproject.component.auth.CitizenContextKt")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package unit.voter
|
package unit.voter
|
||||||
|
|
||||||
import fr.dcproject.citizenOrNull
|
|
||||||
import fr.dcproject.component.article.ArticleForView
|
import fr.dcproject.component.article.ArticleForView
|
||||||
import fr.dcproject.component.article.ArticleRef
|
import fr.dcproject.component.article.ArticleRef
|
||||||
import fr.dcproject.component.auth.User
|
import fr.dcproject.component.auth.User
|
||||||
import fr.dcproject.component.auth.UserI
|
import fr.dcproject.component.auth.UserI
|
||||||
|
import fr.dcproject.component.auth.citizenOrNull
|
||||||
import fr.dcproject.component.citizen.Citizen
|
import fr.dcproject.component.citizen.Citizen
|
||||||
import fr.dcproject.component.citizen.CitizenBasic
|
import fr.dcproject.component.citizen.CitizenBasic
|
||||||
import fr.dcproject.component.citizen.CitizenCart
|
import fr.dcproject.component.citizen.CitizenCart
|
||||||
@@ -116,7 +116,7 @@ internal class VoteVoterTest {
|
|||||||
)
|
)
|
||||||
|
|
||||||
init {
|
init {
|
||||||
mockkStatic("fr.dcproject.ApplicationContextKt")
|
mockkStatic("fr.dcproject.component.auth.CitizenContextKt")
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user