Rebasing master into Link_Database for future merge

pull/3/head
Lucas EVARD 1 year ago
parent 7b7ad8f935
commit 4887614c75

@ -5,7 +5,7 @@ import allin.routing.BasicRouting
import allin.routing.BetRouter
import allin.routing.ParticipationRouter
import allin.routing.UserRouter
import allin.utils.TokenManager
import allin.utils.*
import com.typesafe.config.ConfigFactory
import io.ktor.serialization.kotlinx.json.*
import io.ktor.server.application.*

@ -2,9 +2,35 @@ package allin.model
import allin.serializer.ZonedDateTimeSerializer
import kotlinx.serialization.Serializable
import java.util.*
import java.time.ZonedDateTime
@Serializable
data class Bet(val id: Int, val theme: String, val sentenceBet: String, @Serializable(ZonedDateTimeSerializer::class) val endRegistration: Date, @Serializable(ZonedDateTimeSerializer::class) var endBet : Date, var isPrivate : Boolean, var response : MutableList<String>, var createdBy : String)
data class Bet(
val id: String,
val theme: String,
val sentenceBet: String,
@Serializable(ZonedDateTimeSerializer::class) val endRegistration: ZonedDateTime,
@Serializable(ZonedDateTimeSerializer::class) var endBet: ZonedDateTime,
var isPrivate: Boolean,
var response: MutableList<String>,
val createdBy: String
)
@Serializable
data class UpdatedBetData(
val id: String,
@Serializable(ZonedDateTimeSerializer::class) val endBet: ZonedDateTime,
val isPrivate: Boolean,
val response: MutableList<String>
)
@Serializable
data class UpdatedBetData(val id: Int,@Serializable(ZonedDateTimeSerializer::class) val endBet: Date, val isPrivate: Boolean, val response: MutableList<String>)
data class BetWithoutId(
val theme: String,
val sentenceBet: String,
@Serializable(ZonedDateTimeSerializer::class) val endRegistration: ZonedDateTime,
@Serializable(ZonedDateTimeSerializer::class) var endBet: ZonedDateTime,
var isPrivate: Boolean,
var response: MutableList<String>,
val createdBy: String
)

@ -0,0 +1,19 @@
package allin.model
import kotlinx.serialization.Serializable
@Serializable
data class Participation(
val id: String,
val betId: String,
val username: String,
val answer: String,
val stake: Int
)
@Serializable
data class ParticipationRequest(
val betId: String,
val answer: String,
val stake: Int
)

@ -2,7 +2,26 @@ package allin.model
import kotlinx.serialization.Serializable
@Serializable
data class User(
val id: String,
val username: String,
val email: String,
var password: String,
var nbCoins: Int = 500,
var token: String? = null
)
@Serializable
data class User(val username: String, val email: String, var password: String, var nbCoins: Double = 1000.0, var token: String? = null)
data class UserRequest(
val username: String,
val email: String,
var password: String
)
@Serializable
data class CheckUser(val login: String,val password: String)
data class CheckUser(
val login: String,
val password: String
)

@ -4,7 +4,6 @@ import allin.ext.hasToken
import allin.ext.verifyUserFromToken
import allin.model.ApiMessage
import allin.model.Bet
import allin.model.BetWithoutId
import allin.model.UpdatedBetData
import allin.utils.AppConfig
import io.ktor.http.*
@ -22,7 +21,7 @@ fun Application.BetRouter() {
routing {
route("/bets/add") {
post {
val bet = call.receive<BetWithoutId>()
val bet = call.receive<Bet>()
val id = UUID.randomUUID().toString()
val username = tokenManagerBet.getUsernameFromToken(bet.createdBy)
bets.find { it.id == id }?.let {

@ -11,19 +11,18 @@ import java.util.*
class TokenManager private constructor(val config: HoconApplicationConfig) {
val audience=config.property("audience").getString()
val secret=config.property("secret").getString()
val issuer=config.property("issuer").getString()
fun generateJWTToken(user : User): String {
val audience = config.property("audience").getString()
val secret = config.property("secret").getString()
val issuer = config.property("issuer").getString()
fun generateJWTToken(user: User): String {
val expirationDate = System.currentTimeMillis() + 604800000 // une semaine en miliseconde
val token = JWT.create()
return JWT.create()
.withAudience(audience)
.withIssuer(issuer)
.withClaim("username", user.username)
.withExpiresAt(Date(expirationDate))
.sign(Algorithm.HMAC256(secret))
return token
}
fun verifyJWTToken(): JWTVerifier {
@ -35,10 +34,10 @@ class TokenManager private constructor(val config: HoconApplicationConfig) {
fun generateOrReplaceJWTToken(user: User): String {
val userToken = getUserToken(user)
if (userToken != null && !isTokenExpired(userToken)) {
return userToken
return if (userToken != null && !isTokenExpired(userToken)) {
userToken
} else {
return generateJWTToken(user)
generateJWTToken(user)
}
}
@ -75,6 +74,7 @@ class TokenManager private constructor(val config: HoconApplicationConfig) {
val decodedJWT: DecodedJWT = JWT.decode(token)
return decodedJWT.getClaim("username").asString()
}
companion object {
private var instance: TokenManager? = null
fun getInstance(config: HoconApplicationConfig): TokenManager {

Loading…
Cancel
Save