Move files
Move Application and configurations file to the application package Move JWT files to the auth.jwt package Move ApplicationContext to auth package an rename to CitizenContext
This commit is contained in:
@@ -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