diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 9e5f881..bd62889 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -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.* diff --git a/Sources/src/main/kotlin/allin/model/Bet.kt b/Sources/src/main/kotlin/allin/model/Bet.kt index c99b923..16d7bb1 100644 --- a/Sources/src/main/kotlin/allin/model/Bet.kt +++ b/Sources/src/main/kotlin/allin/model/Bet.kt @@ -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, 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, + val createdBy: String +) + +@Serializable +data class UpdatedBetData( + val id: String, + @Serializable(ZonedDateTimeSerializer::class) val endBet: ZonedDateTime, + val isPrivate: Boolean, + val response: MutableList +) + @Serializable -data class UpdatedBetData(val id: Int,@Serializable(ZonedDateTimeSerializer::class) val endBet: Date, val isPrivate: Boolean, val response: MutableList) \ No newline at end of file +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, + val createdBy: String +) \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/model/Participation.kt b/Sources/src/main/kotlin/allin/model/Participation.kt new file mode 100644 index 0000000..b2e8495 --- /dev/null +++ b/Sources/src/main/kotlin/allin/model/Participation.kt @@ -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 +) \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/model/User.kt b/Sources/src/main/kotlin/allin/model/User.kt index 4f3f1f0..ac0122e 100644 --- a/Sources/src/main/kotlin/allin/model/User.kt +++ b/Sources/src/main/kotlin/allin/model/User.kt @@ -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 +) \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/routing/BetRouter.kt b/Sources/src/main/kotlin/allin/routing/BetRouter.kt index 6d7cb79..e54e685 100644 --- a/Sources/src/main/kotlin/allin/routing/BetRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/BetRouter.kt @@ -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() + val bet = call.receive() val id = UUID.randomUUID().toString() val username = tokenManagerBet.getUsernameFromToken(bet.createdBy) bets.find { it.id == id }?.let { diff --git a/Sources/src/main/kotlin/allin/utils/TokenManager.kt b/Sources/src/main/kotlin/allin/utils/TokenManager.kt index 75f15d5..86f2073 100644 --- a/Sources/src/main/kotlin/allin/utils/TokenManager.kt +++ b/Sources/src/main/kotlin/allin/utils/TokenManager.kt @@ -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 {