From 73841170cc120f17e7e1bbdf029e5cd6fee3d629 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Thu, 11 Jan 2024 09:55:41 +0100 Subject: [PATCH 01/31] :sparkles: Add database for local usage --- Sources/pom.xml | 5 +++++ Sources/src/main/kotlin/allin/Application.kt | 2 -- Sources/src/main/kotlin/allin/entities/UserEntity.kt | 5 +++-- Sources/src/main/kotlin/allin/model/User.kt | 4 ++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Sources/pom.xml b/Sources/pom.xml index 0d8b30f..c569b14 100644 --- a/Sources/pom.xml +++ b/Sources/pom.xml @@ -32,6 +32,11 @@ ktor-server-core-jvm ${ktor_version} + + org.postgresql + postgresql + 42.7.1 + io.ktor ktor-server-netty-jvm diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 93119eb..5f8fb99 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -1,6 +1,4 @@ package allin - -import allin.model.User import allin.routing.BasicRouting import allin.routing.BetRouter import allin.routing.UserRouter diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index d8f0996..0500cf5 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -1,11 +1,12 @@ package allin.entities import org.ktorm.schema.Table +import org.ktorm.schema.double import org.ktorm.schema.int import org.ktorm.schema.varchar - -object UserEntity : Table("user") { +object UserEntity : Table("utilisateur") { val id = int("id").primaryKey() val username = varchar("username") val password = varchar("password") + val nbCoins = double("nbCoins") } \ 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 d01dc50..3159bc9 100644 --- a/Sources/src/main/kotlin/allin/model/User.kt +++ b/Sources/src/main/kotlin/allin/model/User.kt @@ -1,10 +1,10 @@ package allin.model import allin.dto.UserDTO +import allin.routing.users import kotlinx.serialization.Serializable @Serializable data class User(val username: String, val email: String, var password: String, var nbCoins: Int = 1000, var token: String? = null) - @Serializable -data class CheckUser(val login: String,val password: String) \ No newline at end of file +data class CheckUser(val login: String,val password: String) -- 2.36.3 From ff4e36beea0c00af19cb9ab309fa7905a80cf409 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Mon, 15 Jan 2024 13:34:26 +0100 Subject: [PATCH 02/31] :sparkles: Local Database link --- Sources/src/main/kotlin/allin/dto/UserDTO.kt | 13 +--- .../main/kotlin/allin/entities/UserEntity.kt | 63 ++++++++++++++++++- Sources/src/main/kotlin/allin/model/Bet.kt | 15 +---- .../src/main/kotlin/allin/model/BetAction.kt | 4 +- Sources/src/main/kotlin/allin/model/User.kt | 4 +- .../main/kotlin/allin/routing/BetRouter.kt | 15 +++-- .../main/kotlin/allin/routing/UserRouter.kt | 48 +++++++------- .../kotlin/allin/serializer/DateSerializer.kt | 26 ++++---- .../main/kotlin/allin/utils/CryptManager.kt | 16 +++-- .../main/kotlin/allin/utils/TokenManager.kt | 26 +++++++- 10 files changed, 151 insertions(+), 79 deletions(-) diff --git a/Sources/src/main/kotlin/allin/dto/UserDTO.kt b/Sources/src/main/kotlin/allin/dto/UserDTO.kt index d59f39c..a440450 100644 --- a/Sources/src/main/kotlin/allin/dto/UserDTO.kt +++ b/Sources/src/main/kotlin/allin/dto/UserDTO.kt @@ -1,15 +1,4 @@ package allin.dto - -import allin.model.User import kotlinx.serialization.Serializable - @Serializable -data class UserDTO(val username: String,val email: String, val nbCoins: Int) -@Serializable -data class UserDTOWithToken(val username: String,val email: String, val nbCoins: Int, val token:String?) -fun convertUserToUserDTO(user: User): UserDTO { - return UserDTO(user.username, user.email, user.nbCoins) -} -fun convertUserToUserDTOToken(user: User): UserDTOWithToken { - return UserDTOWithToken(user.username, user.email, user.nbCoins,user.token) -} +data class UserDTO(val username: String, val email: String, val nbCoins: Double, var token:String?) diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index 0500cf5..e1ba032 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -1,12 +1,71 @@ package allin.entities +import allin.dto.UserDTO +import allin.model.User +import allin.routing.database +import org.ktorm.dsl.* +import org.ktorm.entity.* import org.ktorm.schema.Table import org.ktorm.schema.double import org.ktorm.schema.int import org.ktorm.schema.varchar -object UserEntity : Table("utilisateur") { + +interface UserEntity : Entity { + val username: String + var email: String + var password: String + var nbCoins: Double +} +object UsersEntity : Table("utilisateur") { val id = int("id").primaryKey() val username = varchar("username") val password = varchar("password") val nbCoins = double("nbCoins") -} \ No newline at end of file + val email = varchar("email") + + fun getUserToUserDTO(): MutableList { + return database.from(UsersEntity).select().map { + row -> UserDTO( + row[username].toString(), + row[email].toString(), + row[nbCoins]?:0.0, + null + ) + }.toMutableList() + } + + fun getUserByUsernameAndPassword(login: String): Pair { + return database.from(UsersEntity) + .select() + .where { (username eq login) /*and (password eq passwordParam)*/ } + .map { row -> + Pair( + UserDTO( + row[username].toString(), + row[email].toString(), + row[nbCoins] ?: 0.0, + null + ), + row[password].toString() + ) + } + .firstOrNull() ?: Pair(null, null) + } + + fun addUserEntity(user : User){ + database.insert(UsersEntity){ + set(it.nbCoins,user.nbCoins) + set(it.username,user.username) + set(it.password,user.password) + set(it.email,user.email) + } + } + fun deleteUserByUsername(username: String): Boolean { + val deletedCount = database.delete(UsersEntity) { + it.username eq username + } + return deletedCount > 0 + } +} + + diff --git a/Sources/src/main/kotlin/allin/model/Bet.kt b/Sources/src/main/kotlin/allin/model/Bet.kt index 5d4bc13..c99b923 100644 --- a/Sources/src/main/kotlin/allin/model/Bet.kt +++ b/Sources/src/main/kotlin/allin/model/Bet.kt @@ -1,19 +1,10 @@ package allin.model -import allin.dto.UserDTOWithToken -import allin.serializer.DateSerializer +import allin.serializer.ZonedDateTimeSerializer import kotlinx.serialization.Serializable import java.util.* @Serializable -data class Bet(val id: Int, val theme: String, val sentenceBet: String, @Serializable(DateSerializer::class) val endRegistration: Date, @Serializable(DateSerializer::class) var endBet : Date, var isPrivate : Boolean, var response : MutableList, val createdBy : String) - -@Serializable -data class UpdatedBetData(val id: Int,@Serializable(DateSerializer::class) val endBet: Date, val isPrivate: Boolean, val response: MutableList) - +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) @Serializable -data class BetWithoutId(val theme: String, val sentenceBet: String, @Serializable(DateSerializer::class) val endRegistration: Date, @Serializable(DateSerializer::class) var endBet : Date, var isPrivate : Boolean, var response : MutableList, val createdBy : String) - -fun convertBetWithoutIdToBet(betWithoutId: BetWithoutId,id : Int, username : String): Bet { - return Bet(id,betWithoutId.theme,betWithoutId.sentenceBet,betWithoutId.endRegistration, betWithoutId.endBet, betWithoutId.isPrivate, betWithoutId.response, username) -} +data class UpdatedBetData(val id: Int,@Serializable(ZonedDateTimeSerializer::class) val endBet: Date, val isPrivate: Boolean, val response: MutableList) \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/model/BetAction.kt b/Sources/src/main/kotlin/allin/model/BetAction.kt index f830e2c..2f2298b 100644 --- a/Sources/src/main/kotlin/allin/model/BetAction.kt +++ b/Sources/src/main/kotlin/allin/model/BetAction.kt @@ -1,5 +1,5 @@ package allin.model -import allin.dto.UserDTOWithToken +import allin.dto.UserDTO data class BetAction(val id:Int, val coins: Int, val user: String, val bet: Int) -data class BetActionCompleted(val id:Int, val coins: Int, val user: UserDTOWithToken, val bet: Bet) +data class BetActionCompleted(val id:Int, val coins: Int, val user: UserDTO, val bet: Bet) diff --git a/Sources/src/main/kotlin/allin/model/User.kt b/Sources/src/main/kotlin/allin/model/User.kt index 3159bc9..4f3f1f0 100644 --- a/Sources/src/main/kotlin/allin/model/User.kt +++ b/Sources/src/main/kotlin/allin/model/User.kt @@ -1,10 +1,8 @@ package allin.model -import allin.dto.UserDTO -import allin.routing.users import kotlinx.serialization.Serializable @Serializable -data class User(val username: String, val email: String, var password: String, var nbCoins: Int = 1000, var token: String? = null) +data class User(val username: String, val email: String, var password: String, var nbCoins: Double = 1000.0, var token: String? = null) @Serializable data class CheckUser(val login: String,val password: String) diff --git a/Sources/src/main/kotlin/allin/routing/BetRouter.kt b/Sources/src/main/kotlin/allin/routing/BetRouter.kt index 997cee5..51e398d 100644 --- a/Sources/src/main/kotlin/allin/routing/BetRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/BetRouter.kt @@ -5,7 +5,10 @@ import io.ktor.server.routing.* import allin.model.* import allin.utils.AppConfig import io.ktor.http.* +import io.ktor.server.auth.* +import io.ktor.server.auth.jwt.* import io.ktor.server.response.* +import java.time.ZonedDateTime val bets = mutableListOf() val tokenManagerBet= AppConfig.tokenManager @@ -16,20 +19,22 @@ fun CreateId() : Int{ fun Application.BetRouter(){ routing{ + authenticate { route("/bets/add"){ post{ - val bet = call.receive() + val bet = call.receive() + val token= call.principal() val id = CreateId() - val username = tokenManagerBet.getUsernameFromToken(bet.createdBy) + bet.createdBy = tokenManagerBet.getUsernameFromToken(token.toString()) val findbet = bets.find { it.id == id } if(findbet==null){ - val betWithId = convertBetWithoutIdToBet(bet,id,username) - bets.add(betWithId) - call.respond(HttpStatusCode.Created, betWithId) + bets.add(bet) + call.respond(HttpStatusCode.Created, bet) } call.respond(HttpStatusCode.Conflict,"Bet already exist") } } + } route("/bets/gets"){ get{ // if(bets.size>0) diff --git a/Sources/src/main/kotlin/allin/routing/UserRouter.kt b/Sources/src/main/kotlin/allin/routing/UserRouter.kt index 18489be..bfde82d 100644 --- a/Sources/src/main/kotlin/allin/routing/UserRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/UserRouter.kt @@ -1,8 +1,10 @@ package allin.routing -import allin.dto.* -import allin.model.CheckUser -import allin.model.User +import allin.entities.UsersEntity.addUserEntity +import allin.entities.UsersEntity.deleteUserByUsername +import allin.entities.UsersEntity.getUserByUsernameAndPassword +import allin.entities.UsersEntity.getUserToUserDTO +import allin.model.* import allin.utils.AppConfig import io.ktor.http.* import io.ktor.server.application.* @@ -11,15 +13,13 @@ import io.ktor.server.auth.jwt.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* +import org.ktorm.database.Database -val users = mutableListOf() val RegexCheckerUser= AppConfig.regexChecker val CryptManagerUser= AppConfig.cryptManager val tokenManagerUser=AppConfig.tokenManager - - +val database = Database.connect("jdbc:postgresql://localhost:5432/Allin", user = "postgres", password = "lulu") fun Application.UserRouter() { - routing { route("/users/register"){ post { @@ -27,12 +27,13 @@ fun Application.UserRouter() { if (RegexCheckerUser.isEmailInvalid(TempUser.email)){ call.respond(HttpStatusCode.Forbidden,"Input a valid mail !") } + val users=getUserToUserDTO() val user = users.find { it.username == TempUser.username || it.email == TempUser.email } if(user == null) { CryptManagerUser.passwordCrypt(TempUser) TempUser.token=tokenManagerUser.generateOrReplaceJWTToken(TempUser) - users.add(TempUser) - call.respond(HttpStatusCode.Created, TempUser) + addUserEntity(TempUser) + call.respond(HttpStatusCode.Created,TempUser) } call.respond(HttpStatusCode.Conflict,"Mail or/and username already exist") } @@ -41,25 +42,27 @@ fun Application.UserRouter() { route("/users/login") { post { val checkUser = call.receive() - val user = users.find { it.username == checkUser.login || it.email == checkUser.login } - if (user != null && CryptManagerUser.passwordDecrypt(user,checkUser.password)) { - user.token=tokenManagerUser.generateOrReplaceJWTToken(user) - call.respond(HttpStatusCode.OK, convertUserToUserDTOToken(user)) + val user =getUserByUsernameAndPassword(checkUser.login) + if (CryptManagerUser.passwordDecrypt(user.second.toString(),checkUser.password)) { + val userDtoWithToken=user.first + userDtoWithToken?.token=tokenManagerUser.generateOrReplaceJWTToken(userDtoWithToken!!) + call.respond(HttpStatusCode.OK, userDtoWithToken) } else { call.respond(HttpStatusCode.NotFound,"Login and/or password incorrect.") } } } - route("/users/delete") { post { val checkUser = call.receive() - val user = users.find { it.username == checkUser.login || it.email == checkUser.login } - if (user != null && user.password == checkUser.password) { - users.remove(user) - call.respond(HttpStatusCode.Accepted,convertUserToUserDTO(user)) + val user =getUserByUsernameAndPassword(checkUser.login) + if (CryptManagerUser.passwordDecrypt(user.second.toString(),checkUser.password)) { + if (!deleteUserByUsername(checkUser.login)) { + call.respond(HttpStatusCode.InternalServerError, "This user can't be delete now !") + } + call.respond(HttpStatusCode.Accepted,user.first!!) } else { - call.respond(HttpStatusCode.NotFound,"Login and/or password incorrect.") + call.respond(HttpStatusCode.NotFound, "Login and/or password incorrect.") } } } @@ -68,14 +71,13 @@ fun Application.UserRouter() { get("/users/token") { val principal = call.principal() val username = principal!!.payload.getClaim("username").asString() - val user = users.find { it.username == username } - if (user != null) { - call.respond(HttpStatusCode.OK,convertUserToUserDTO(user)) + val user=getUserByUsernameAndPassword(username) + if (user.first != null) { + call.respond(HttpStatusCode.OK, user.first!!) } else { call.respond(HttpStatusCode.NotFound, "User not found with the valid token !") } } } - } } diff --git a/Sources/src/main/kotlin/allin/serializer/DateSerializer.kt b/Sources/src/main/kotlin/allin/serializer/DateSerializer.kt index 6002c28..dc84760 100644 --- a/Sources/src/main/kotlin/allin/serializer/DateSerializer.kt +++ b/Sources/src/main/kotlin/allin/serializer/DateSerializer.kt @@ -6,22 +6,22 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder -import java.text.SimpleDateFormat -import java.util.* +import java.time.ZonedDateTime +import java.time.format.DateTimeFormatter -@Serializer(Date::class) -class DateSerializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Date", PrimitiveKind.STRING) +@Serializer(ZonedDateTime::class) +object ZonedDateTimeSerializer : KSerializer { + private val formatter: DateTimeFormatter = DateTimeFormatter.ISO_ZONED_DATE_TIME - val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.FRANCE) + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("ZonedDateTime", PrimitiveKind.STRING) - override fun deserialize(decoder: Decoder): Date { - val dateString = decoder.decodeString() - return formatter.parse(dateString) + override fun serialize(encoder: Encoder, value: ZonedDateTime) { + encoder.encodeString(formatter.format(value)) } - override fun serialize(encoder: Encoder, value: Date) { - val dateString = formatter.format(value) - encoder.encodeString(dateString) + override fun deserialize(decoder: Decoder): ZonedDateTime { + val dateString = decoder.decodeString() + return ZonedDateTime.parse(dateString, formatter) } -} \ No newline at end of file +} diff --git a/Sources/src/main/kotlin/allin/utils/CryptManager.kt b/Sources/src/main/kotlin/allin/utils/CryptManager.kt index 216e733..df9f8be 100644 --- a/Sources/src/main/kotlin/allin/utils/CryptManager.kt +++ b/Sources/src/main/kotlin/allin/utils/CryptManager.kt @@ -4,12 +4,18 @@ import allin.model.User import org.mindrot.jbcrypt.BCrypt class CryptManager { - val salt=BCrypt.gensalt() + //val salt=BCrypt.gensalt() + fun passwordCrypt(password : String): String { + return BCrypt.hashpw(password,"\$2a\$10\$42wsdBeoLKaF6SM9oADONe") + } fun passwordCrypt(user: User){ - user.password=BCrypt.hashpw(user.password,salt) - + user.password=BCrypt.hashpw(user.password,"\$2a\$10\$42wsdBeoLKaF6SM9oADONe") } - fun passwordDecrypt(user: User, password: String): Boolean{ - return BCrypt.hashpw(password,salt)==user.password + fun passwordDecrypt(password: String, passwordClear: String): Boolean{ + return BCrypt.hashpw(passwordClear,"\$2a\$10\$42wsdBeoLKaF6SM9oADONe")==password + } + + fun CheckPassword(hashed: String, clear: String): Boolean{ + return BCrypt.checkpw(hashed,clear) } } \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/utils/TokenManager.kt b/Sources/src/main/kotlin/allin/utils/TokenManager.kt index d35ede5..0d82193 100644 --- a/Sources/src/main/kotlin/allin/utils/TokenManager.kt +++ b/Sources/src/main/kotlin/allin/utils/TokenManager.kt @@ -1,5 +1,6 @@ package allin.utils +import allin.dto.UserDTO import allin.model.User import com.auth0.jwt.JWT import com.auth0.jwt.JWTVerifier @@ -15,7 +16,6 @@ class TokenManager private constructor(val config: HoconApplicationConfig) { val issuer=config.property("issuer").getString() fun generateJWTToken(user : User): String { val expirationDate = System.currentTimeMillis() + 604800000 // une semaine en miliseconde - val token = JWT.create() .withAudience(audience) .withIssuer(issuer) @@ -41,6 +41,26 @@ class TokenManager private constructor(val config: HoconApplicationConfig) { } } + fun generateOrReplaceJWTToken(user: UserDTO): String { + val userToken = getUserToken(user) + if (userToken != null && !isTokenExpired(userToken)) { + return userToken + } else { + return generateJWTToken(user) + } + } + + fun generateJWTToken(user : UserDTO): String { + val expirationDate = System.currentTimeMillis() + 604800000 // une semaine en miliseconde + val token = JWT.create() + .withAudience(audience) + .withIssuer(issuer) + .withClaim("username", user.username) + .withExpiresAt(Date(expirationDate)) + .sign(Algorithm.HMAC256(secret)) + return token + } + fun isTokenExpired(token: String): Boolean { val expirationTime = JWT.decode(token).expiresAt.time return System.currentTimeMillis() > expirationTime @@ -49,7 +69,9 @@ class TokenManager private constructor(val config: HoconApplicationConfig) { fun getUserToken(user: User): String? { return user.token } - + fun getUserToken(user: UserDTO): String? { + return user.token + } fun getUsernameFromToken(token: String) : String{ val decodedJWT: DecodedJWT = JWT.decode(token) return decodedJWT.getClaim("username").asString() -- 2.36.3 From 59faa48897b1c07d808cafcb974d52f5cc2ee902 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Thu, 11 Jan 2024 09:55:41 +0100 Subject: [PATCH 03/31] :sparkles: Add database for local usage --- Sources/pom.xml | 5 +++++ Sources/src/main/kotlin/allin/entities/UserEntity.kt | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Sources/pom.xml b/Sources/pom.xml index 0d8b30f..c569b14 100644 --- a/Sources/pom.xml +++ b/Sources/pom.xml @@ -32,6 +32,11 @@ ktor-server-core-jvm ${ktor_version} + + org.postgresql + postgresql + 42.7.1 + io.ktor ktor-server-netty-jvm diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index d8f0996..0500cf5 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -1,11 +1,12 @@ package allin.entities import org.ktorm.schema.Table +import org.ktorm.schema.double import org.ktorm.schema.int import org.ktorm.schema.varchar - -object UserEntity : Table("user") { +object UserEntity : Table("utilisateur") { val id = int("id").primaryKey() val username = varchar("username") val password = varchar("password") + val nbCoins = double("nbCoins") } \ No newline at end of file -- 2.36.3 From aa938cbfb38e12fd6ab34de635bf38578c7ded5f Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Mon, 15 Jan 2024 13:34:26 +0100 Subject: [PATCH 04/31] :sparkles: Local Database link --- Sources/src/main/kotlin/allin/dto/UserDTO.kt | 13 +--- .../main/kotlin/allin/entities/UserEntity.kt | 63 ++++++++++++++++++- .../src/main/kotlin/allin/model/BetAction.kt | 0 Sources/src/main/kotlin/allin/model/User.kt | 2 +- .../main/kotlin/allin/routing/BetRouter.kt | 11 ++-- .../main/kotlin/allin/routing/UserRouter.kt | 8 ++- .../main/kotlin/allin/utils/CryptManager.kt | 16 +++-- .../main/kotlin/allin/utils/TokenManager.kt | 22 ++++++- 8 files changed, 106 insertions(+), 29 deletions(-) create mode 100644 Sources/src/main/kotlin/allin/model/BetAction.kt diff --git a/Sources/src/main/kotlin/allin/dto/UserDTO.kt b/Sources/src/main/kotlin/allin/dto/UserDTO.kt index d59f39c..a440450 100644 --- a/Sources/src/main/kotlin/allin/dto/UserDTO.kt +++ b/Sources/src/main/kotlin/allin/dto/UserDTO.kt @@ -1,15 +1,4 @@ package allin.dto - -import allin.model.User import kotlinx.serialization.Serializable - @Serializable -data class UserDTO(val username: String,val email: String, val nbCoins: Int) -@Serializable -data class UserDTOWithToken(val username: String,val email: String, val nbCoins: Int, val token:String?) -fun convertUserToUserDTO(user: User): UserDTO { - return UserDTO(user.username, user.email, user.nbCoins) -} -fun convertUserToUserDTOToken(user: User): UserDTOWithToken { - return UserDTOWithToken(user.username, user.email, user.nbCoins,user.token) -} +data class UserDTO(val username: String, val email: String, val nbCoins: Double, var token:String?) diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index 0500cf5..e1ba032 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -1,12 +1,71 @@ package allin.entities +import allin.dto.UserDTO +import allin.model.User +import allin.routing.database +import org.ktorm.dsl.* +import org.ktorm.entity.* import org.ktorm.schema.Table import org.ktorm.schema.double import org.ktorm.schema.int import org.ktorm.schema.varchar -object UserEntity : Table("utilisateur") { + +interface UserEntity : Entity { + val username: String + var email: String + var password: String + var nbCoins: Double +} +object UsersEntity : Table("utilisateur") { val id = int("id").primaryKey() val username = varchar("username") val password = varchar("password") val nbCoins = double("nbCoins") -} \ No newline at end of file + val email = varchar("email") + + fun getUserToUserDTO(): MutableList { + return database.from(UsersEntity).select().map { + row -> UserDTO( + row[username].toString(), + row[email].toString(), + row[nbCoins]?:0.0, + null + ) + }.toMutableList() + } + + fun getUserByUsernameAndPassword(login: String): Pair { + return database.from(UsersEntity) + .select() + .where { (username eq login) /*and (password eq passwordParam)*/ } + .map { row -> + Pair( + UserDTO( + row[username].toString(), + row[email].toString(), + row[nbCoins] ?: 0.0, + null + ), + row[password].toString() + ) + } + .firstOrNull() ?: Pair(null, null) + } + + fun addUserEntity(user : User){ + database.insert(UsersEntity){ + set(it.nbCoins,user.nbCoins) + set(it.username,user.username) + set(it.password,user.password) + set(it.email,user.email) + } + } + fun deleteUserByUsername(username: String): Boolean { + val deletedCount = database.delete(UsersEntity) { + it.username eq username + } + return deletedCount > 0 + } +} + + diff --git a/Sources/src/main/kotlin/allin/model/BetAction.kt b/Sources/src/main/kotlin/allin/model/BetAction.kt new file mode 100644 index 0000000..e69de29 diff --git a/Sources/src/main/kotlin/allin/model/User.kt b/Sources/src/main/kotlin/allin/model/User.kt index 6234988..e368fec 100644 --- a/Sources/src/main/kotlin/allin/model/User.kt +++ b/Sources/src/main/kotlin/allin/model/User.kt @@ -8,7 +8,7 @@ data class User( val username: String, val email: String, var password: String, - var nbCoins: Int = 1000, + var nbCoins: Int = 500, var token: String? = null ) diff --git a/Sources/src/main/kotlin/allin/routing/BetRouter.kt b/Sources/src/main/kotlin/allin/routing/BetRouter.kt index f55abde..fa1d210 100644 --- a/Sources/src/main/kotlin/allin/routing/BetRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/BetRouter.kt @@ -1,11 +1,8 @@ package allin.routing - -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 io.ktor.server.application.* +import io.ktor.server.request.* +import io.ktor.server.routing.* +import allin.model.* import allin.utils.AppConfig import io.ktor.http.* import io.ktor.server.application.* diff --git a/Sources/src/main/kotlin/allin/routing/UserRouter.kt b/Sources/src/main/kotlin/allin/routing/UserRouter.kt index 5cf3ba3..e0e52b1 100644 --- a/Sources/src/main/kotlin/allin/routing/UserRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/UserRouter.kt @@ -16,6 +16,7 @@ import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* import java.util.* +import org.ktorm.database.Database val users = mutableListOf() val RegexCheckerUser = AppConfig.regexChecker @@ -23,6 +24,11 @@ val CryptManagerUser = AppConfig.cryptManager val tokenManagerUser = AppConfig.tokenManager const val DEFAULT_COINS = 500 +val RegexCheckerUser= AppConfig.regexChecker +val CryptManagerUser= AppConfig.cryptManager +val tokenManagerUser=AppConfig.tokenManager +val database = Database.connect("jdbc:postgresql://localhost:5432/Allin", user = "postgres", password = "lulu") + fun Application.UserRouter() { routing { @@ -79,7 +85,7 @@ fun Application.UserRouter() { } } } - + get("/users/token") { hasToken { principal -> verifyUserFromToken(principal) { user -> diff --git a/Sources/src/main/kotlin/allin/utils/CryptManager.kt b/Sources/src/main/kotlin/allin/utils/CryptManager.kt index 216e733..df9f8be 100644 --- a/Sources/src/main/kotlin/allin/utils/CryptManager.kt +++ b/Sources/src/main/kotlin/allin/utils/CryptManager.kt @@ -4,12 +4,18 @@ import allin.model.User import org.mindrot.jbcrypt.BCrypt class CryptManager { - val salt=BCrypt.gensalt() + //val salt=BCrypt.gensalt() + fun passwordCrypt(password : String): String { + return BCrypt.hashpw(password,"\$2a\$10\$42wsdBeoLKaF6SM9oADONe") + } fun passwordCrypt(user: User){ - user.password=BCrypt.hashpw(user.password,salt) - + user.password=BCrypt.hashpw(user.password,"\$2a\$10\$42wsdBeoLKaF6SM9oADONe") } - fun passwordDecrypt(user: User, password: String): Boolean{ - return BCrypt.hashpw(password,salt)==user.password + fun passwordDecrypt(password: String, passwordClear: String): Boolean{ + return BCrypt.hashpw(passwordClear,"\$2a\$10\$42wsdBeoLKaF6SM9oADONe")==password + } + + fun CheckPassword(hashed: String, clear: String): Boolean{ + return BCrypt.checkpw(hashed,clear) } } \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/utils/TokenManager.kt b/Sources/src/main/kotlin/allin/utils/TokenManager.kt index dbebe03..93b7e50 100644 --- a/Sources/src/main/kotlin/allin/utils/TokenManager.kt +++ b/Sources/src/main/kotlin/allin/utils/TokenManager.kt @@ -40,6 +40,26 @@ class TokenManager private constructor(val config: HoconApplicationConfig) { } } + fun generateOrReplaceJWTToken(user: UserDTO): String { + val userToken = getUserToken(user) + if (userToken != null && !isTokenExpired(userToken)) { + return userToken + } else { + return generateJWTToken(user) + } + } + + fun generateJWTToken(user : UserDTO): String { + val expirationDate = System.currentTimeMillis() + 604800000 // une semaine en miliseconde + val token = JWT.create() + .withAudience(audience) + .withIssuer(issuer) + .withClaim("username", user.username) + .withExpiresAt(Date(expirationDate)) + .sign(Algorithm.HMAC256(secret)) + return token + } + fun isTokenExpired(token: String): Boolean { val expirationTime = JWT.decode(token).expiresAt.time return System.currentTimeMillis() > expirationTime @@ -49,7 +69,7 @@ class TokenManager private constructor(val config: HoconApplicationConfig) { return user.token } - fun getUsernameFromToken(token: String): String { + fun getUsernameFromToken(token: String) : String{ val decodedJWT: DecodedJWT = JWT.decode(token) return decodedJWT.getClaim("username").asString() } -- 2.36.3 From b4ac31431d4d249625a6cc9c622cf17ec68e74f5 Mon Sep 17 00:00:00 2001 From: "arthur.valin" Date: Mon, 15 Jan 2024 16:58:59 +0100 Subject: [PATCH 05/31] Start bet participations and refactoring --- .gitignore | 2 +- .../kotlin/allin/ext/PipelineContextExt.kt | 9 ++-- .../src/main/kotlin/allin/model/ApiMessage.kt | 1 + .../main/kotlin/allin/routing/BetRouter.kt | 24 +++++++-- .../allin/routing/ParticipationRouter.kt | 6 +-- .../main/kotlin/allin/routing/UserRouter.kt | 51 +++++++++--------- .../main/kotlin/allin/utils/TokenManager.kt | 21 ++++---- .../classes/META-INF/allin-api.kotlin_module | Bin 132 -> 0 bytes .../allin/ApplicationKt$extracted$1$1$1.class | Bin 4041 -> 0 bytes .../allin/ApplicationKt$extracted$1$1.class | Bin 2618 -> 0 bytes .../allin/ApplicationKt$extracted$1.class | Bin 2007 -> 0 bytes .../allin/ApplicationKt$extracted$2.class | Bin 1928 -> 0 bytes .../classes/allin/ApplicationKt$main$1.class | Bin 1543 -> 0 bytes .../target/classes/allin/ApplicationKt.class | Bin 3163 -> 0 bytes .../allin/dto/UserDTO$$serializer.class | Bin 5508 -> 0 bytes .../classes/allin/dto/UserDTO$Companion.class | Bin 1275 -> 0 bytes .../target/classes/allin/dto/UserDTO.class | Bin 5137 -> 0 bytes .../target/classes/allin/dto/UserDTOKt.class | Bin 1390 -> 0 bytes .../dto/UserDTOWithToken$$serializer.class | Bin 6120 -> 0 bytes .../dto/UserDTOWithToken$Companion.class | Bin 1338 -> 0 bytes .../classes/allin/dto/UserDTOWithToken.class | Bin 6105 -> 0 bytes .../classes/allin/entities/UserEntity.class | Bin 2022 -> 0 bytes .../classes/allin/model/Bet$$serializer.class | Bin 6534 -> 0 bytes .../classes/allin/model/Bet$Companion.class | Bin 1257 -> 0 bytes Sources/target/classes/allin/model/Bet.class | Bin 9414 -> 0 bytes .../allin/model/CheckUser$$serializer.class | Bin 5271 -> 0 bytes .../allin/model/CheckUser$Companion.class | Bin 1300 -> 0 bytes .../classes/allin/model/CheckUser.class | Bin 4635 -> 0 bytes .../model/UpdatedBetData$$serializer.class | Bin 6054 -> 0 bytes .../model/UpdatedBetData$Companion.class | Bin 1334 -> 0 bytes .../classes/allin/model/UpdatedBetData.class | Bin 7171 -> 0 bytes .../allin/model/User$$serializer.class | Bin 6119 -> 0 bytes .../classes/allin/model/User$Companion.class | Bin 1265 -> 0 bytes Sources/target/classes/allin/model/User.class | Bin 7414 -> 0 bytes .../BasicRoutingKt$BasicRouting$1$1.class | Bin 6007 -> 0 bytes .../BasicRoutingKt$BasicRouting$1.class | Bin 1950 -> 0 bytes .../allin/routing/BasicRoutingKt.class | Bin 1144 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$1$1.class | Bin 9372 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$1.class | Bin 1856 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$2$1.class | Bin 10482 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$2.class | Bin 1856 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$3$1.class | Bin 9610 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$3.class | Bin 1856 -> 0 bytes .../routing/BetRouterKt$BetRouter$1.class | Bin 2187 -> 0 bytes .../classes/allin/routing/BetRouterKt.class | Bin 1608 -> 0 bytes .../UserRouterKt$UserRouter$1$1$1.class | Bin 10934 -> 0 bytes .../routing/UserRouterKt$UserRouter$1$1.class | Bin 1865 -> 0 bytes .../UserRouterKt$UserRouter$1$2$1.class | Bin 10232 -> 0 bytes .../routing/UserRouterKt$UserRouter$1$2.class | Bin 1865 -> 0 bytes .../UserRouterKt$UserRouter$1$3$1.class | Bin 9933 -> 0 bytes .../routing/UserRouterKt$UserRouter$1$3.class | Bin 1865 -> 0 bytes .../UserRouterKt$UserRouter$1$4$1.class | Bin 9821 -> 0 bytes .../routing/UserRouterKt$UserRouter$1$4.class | Bin 1909 -> 0 bytes .../routing/UserRouterKt$UserRouter$1.class | Bin 2570 -> 0 bytes .../classes/allin/routing/UserRouterKt.class | Bin 2733 -> 0 bytes .../allin/serializer/DateSerializer.class | Bin 3623 -> 0 bytes .../classes/allin/utils/CryptManager.class | Bin 1717 -> 0 bytes .../classes/allin/utils/RegexChecker.class | Bin 1249 -> 0 bytes .../classes/allin/utils/TokenManager.class | Bin 4571 -> 0 bytes Sources/target/classes/application.conf | 4 -- Sources/target/classes/logback.xml | 12 ----- .../META-INF/allin-api.kotlin_module | Bin 24 -> 0 bytes .../test-classes/allin/ApplicationTest.class | Bin 486 -> 0 bytes 63 files changed, 67 insertions(+), 63 deletions(-) delete mode 100644 Sources/target/classes/META-INF/allin-api.kotlin_module delete mode 100644 Sources/target/classes/allin/ApplicationKt$extracted$1$1$1.class delete mode 100644 Sources/target/classes/allin/ApplicationKt$extracted$1$1.class delete mode 100644 Sources/target/classes/allin/ApplicationKt$extracted$1.class delete mode 100644 Sources/target/classes/allin/ApplicationKt$extracted$2.class delete mode 100644 Sources/target/classes/allin/ApplicationKt$main$1.class delete mode 100644 Sources/target/classes/allin/ApplicationKt.class delete mode 100644 Sources/target/classes/allin/dto/UserDTO$$serializer.class delete mode 100644 Sources/target/classes/allin/dto/UserDTO$Companion.class delete mode 100644 Sources/target/classes/allin/dto/UserDTO.class delete mode 100644 Sources/target/classes/allin/dto/UserDTOKt.class delete mode 100644 Sources/target/classes/allin/dto/UserDTOWithToken$$serializer.class delete mode 100644 Sources/target/classes/allin/dto/UserDTOWithToken$Companion.class delete mode 100644 Sources/target/classes/allin/dto/UserDTOWithToken.class delete mode 100644 Sources/target/classes/allin/entities/UserEntity.class delete mode 100644 Sources/target/classes/allin/model/Bet$$serializer.class delete mode 100644 Sources/target/classes/allin/model/Bet$Companion.class delete mode 100644 Sources/target/classes/allin/model/Bet.class delete mode 100644 Sources/target/classes/allin/model/CheckUser$$serializer.class delete mode 100644 Sources/target/classes/allin/model/CheckUser$Companion.class delete mode 100644 Sources/target/classes/allin/model/CheckUser.class delete mode 100644 Sources/target/classes/allin/model/UpdatedBetData$$serializer.class delete mode 100644 Sources/target/classes/allin/model/UpdatedBetData$Companion.class delete mode 100644 Sources/target/classes/allin/model/UpdatedBetData.class delete mode 100644 Sources/target/classes/allin/model/User$$serializer.class delete mode 100644 Sources/target/classes/allin/model/User$Companion.class delete mode 100644 Sources/target/classes/allin/model/User.class delete mode 100644 Sources/target/classes/allin/routing/BasicRoutingKt$BasicRouting$1$1.class delete mode 100644 Sources/target/classes/allin/routing/BasicRoutingKt$BasicRouting$1.class delete mode 100644 Sources/target/classes/allin/routing/BasicRoutingKt.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$2$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$2.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$2$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$2.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$3$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$3.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$4$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$4.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt.class delete mode 100644 Sources/target/classes/allin/serializer/DateSerializer.class delete mode 100644 Sources/target/classes/allin/utils/CryptManager.class delete mode 100644 Sources/target/classes/allin/utils/RegexChecker.class delete mode 100644 Sources/target/classes/allin/utils/TokenManager.class delete mode 100644 Sources/target/classes/application.conf delete mode 100644 Sources/target/classes/logback.xml delete mode 100644 Sources/target/test-classes/META-INF/allin-api.kotlin_module delete mode 100644 Sources/target/test-classes/allin/ApplicationTest.class diff --git a/.gitignore b/.gitignore index f0d8881..b3f8ec6 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,4 @@ out/ ### VS Code ### .vscode/ -**/src/target/** \ No newline at end of file +!**/src/target/** \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/ext/PipelineContextExt.kt b/Sources/src/main/kotlin/allin/ext/PipelineContextExt.kt index 0d9cfd9..e111f9b 100644 --- a/Sources/src/main/kotlin/allin/ext/PipelineContextExt.kt +++ b/Sources/src/main/kotlin/allin/ext/PipelineContextExt.kt @@ -1,8 +1,8 @@ package allin.ext +import allin.dto.UserDTO +import allin.entities.UsersEntity import allin.model.ApiMessage -import allin.model.User -import allin.routing.users import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.auth.* @@ -15,9 +15,10 @@ suspend fun PipelineContext<*, ApplicationCall>.hasToken(content: suspend (princ suspend fun PipelineContext<*, ApplicationCall>.verifyUserFromToken( principal: JWTPrincipal, - content: suspend (user: User) -> Unit + content: suspend (user: UserDTO, password: String) -> Unit ) { val username = principal.payload.getClaim("username").asString() - users.find { it.username == username }?.let { content(it) } + val userPassword = UsersEntity.getUserByUsernameAndPassword(username) + userPassword.first?.let { content(it, userPassword.second ?: "") } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.TokenUserNotFound) } \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/model/ApiMessage.kt b/Sources/src/main/kotlin/allin/model/ApiMessage.kt index deaa55f..9f47ea3 100644 --- a/Sources/src/main/kotlin/allin/model/ApiMessage.kt +++ b/Sources/src/main/kotlin/allin/model/ApiMessage.kt @@ -3,6 +3,7 @@ package allin.model object ApiMessage { const val Welcome = "Welcome on AllIn's API !" const val TokenUserNotFound = "User not found with the valid token !" + const val UserNotFound = "User not found." const val BetNotFound = "Bet not found." const val BetAlreadyExist = "Bet already exists." const val IncorrectLoginPassword = "Login and/or password incorrect." diff --git a/Sources/src/main/kotlin/allin/routing/BetRouter.kt b/Sources/src/main/kotlin/allin/routing/BetRouter.kt index fa1d210..6d7cb79 100644 --- a/Sources/src/main/kotlin/allin/routing/BetRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/BetRouter.kt @@ -1,8 +1,11 @@ package allin.routing -import io.ktor.server.application.* -import io.ktor.server.request.* -import io.ktor.server.routing.* -import allin.model.* + +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.* import io.ktor.server.application.* @@ -40,6 +43,7 @@ fun Application.BetRouter() { } } } + route("/bets/gets") { get { // if(bets.size>0) @@ -47,6 +51,16 @@ fun Application.BetRouter() { // else call.respond(HttpStatusCode.NoContent) } } + + route("/bets/get/{id}") { + get { + val id = call.parameters["id"] ?: "" + bets.find { it.id == id }?.let { bet -> + call.respond(HttpStatusCode.Accepted, bet) + } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.BetNotFound) + } + } + route("/bets/delete") { post { val idbet = call.receive>()["id"] @@ -71,7 +85,7 @@ fun Application.BetRouter() { authenticate { get("/bets/current") { hasToken { principal -> - verifyUserFromToken(principal) { user -> + verifyUserFromToken(principal) { user, _ -> val bets = participations .filter { it.username == user.username } .mapNotNull { itParticipation -> bets.find { it.id == itParticipation.betId } } diff --git a/Sources/src/main/kotlin/allin/routing/ParticipationRouter.kt b/Sources/src/main/kotlin/allin/routing/ParticipationRouter.kt index 11ac4da..16106b3 100644 --- a/Sources/src/main/kotlin/allin/routing/ParticipationRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/ParticipationRouter.kt @@ -21,7 +21,7 @@ fun Application.ParticipationRouter() { post("/participations/add") { hasToken { principal -> val participation = call.receive() - verifyUserFromToken(principal) { user -> + verifyUserFromToken(principal) { user, _ -> if (user.nbCoins >= participation.stake) { participations.add( Participation( @@ -43,8 +43,8 @@ fun Application.ParticipationRouter() { hasToken { principal -> val participationId = call.receive() participations.find { it.id == participationId }?.let { participation -> - verifyUserFromToken(principal) { user -> - user.nbCoins += participation.stake + verifyUserFromToken(principal) { user, _ -> + // user.nbCoins += participation.stake participations.remove(participation) call.respond(HttpStatusCode.NoContent) } diff --git a/Sources/src/main/kotlin/allin/routing/UserRouter.kt b/Sources/src/main/kotlin/allin/routing/UserRouter.kt index e0e52b1..b89af65 100644 --- a/Sources/src/main/kotlin/allin/routing/UserRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/UserRouter.kt @@ -1,7 +1,9 @@ package allin.routing -import allin.dto.convertUserToUserDTO -import allin.dto.convertUserToUserDTOToken +import allin.entities.UsersEntity.addUserEntity +import allin.entities.UsersEntity.deleteUserByUsername +import allin.entities.UsersEntity.getUserByUsernameAndPassword +import allin.entities.UsersEntity.getUserToUserDTO import allin.ext.hasToken import allin.ext.verifyUserFromToken import allin.model.ApiMessage @@ -15,18 +17,13 @@ import io.ktor.server.auth.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* -import java.util.* import org.ktorm.database.Database +import java.util.* -val users = mutableListOf() val RegexCheckerUser = AppConfig.regexChecker val CryptManagerUser = AppConfig.cryptManager val tokenManagerUser = AppConfig.tokenManager const val DEFAULT_COINS = 500 - -val RegexCheckerUser= AppConfig.regexChecker -val CryptManagerUser= AppConfig.cryptManager -val tokenManagerUser=AppConfig.tokenManager val database = Database.connect("jdbc:postgresql://localhost:5432/Allin", user = "postgres", password = "lulu") fun Application.UserRouter() { @@ -38,6 +35,7 @@ fun Application.UserRouter() { if (RegexCheckerUser.isEmailInvalid(tempUser.email)) { call.respond(HttpStatusCode.Forbidden, ApiMessage.InvalidMail) } + val users = getUserToUserDTO() users.find { it.username == tempUser.username || it.email == tempUser.email }?.let { user -> call.respond(HttpStatusCode.Conflict, ApiMessage.UserAlreadyExist) } ?: run { @@ -51,7 +49,7 @@ fun Application.UserRouter() { ) CryptManagerUser.passwordCrypt(user) user.token = tokenManagerUser.generateOrReplaceJWTToken(user) - users.add(user) + addUserEntity(user) call.respond(HttpStatusCode.Created, user) } } @@ -60,36 +58,41 @@ fun Application.UserRouter() { route("/users/login") { post { val checkUser = call.receive() - users.find { it.username == checkUser.login || it.email == checkUser.login }?.let { user -> - if (CryptManagerUser.passwordDecrypt(user, checkUser.password)) { - user.token = tokenManagerUser.generateOrReplaceJWTToken(user) - call.respond(HttpStatusCode.OK, convertUserToUserDTOToken(user)) - } else { - call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) - } - } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) + val user = getUserByUsernameAndPassword(checkUser.login) + if (CryptManagerUser.passwordDecrypt(user.second ?: "", checkUser.password)) { + user.first?.let { userDtoWithToken -> + userDtoWithToken.token = tokenManagerUser.generateOrReplaceJWTToken(userDtoWithToken) + call.respond(HttpStatusCode.OK, userDtoWithToken) + } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.UserNotFound) + } else { + call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) + } } } authenticate { post("/users/delete") { hasToken { principal -> - verifyUserFromToken(principal) { user -> + verifyUserFromToken(principal) { _, password -> val checkUser = call.receive() - if (user.username == checkUser.login && user.password == checkUser.password) { - users.remove(user) - call.respond(HttpStatusCode.Accepted, convertUserToUserDTO(user)) + + if (CryptManagerUser.passwordDecrypt(password, checkUser.password)) { + if (!deleteUserByUsername(checkUser.login)) { + call.respond(HttpStatusCode.InternalServerError, "This user can't be delete now !") + } + call.respond(HttpStatusCode.Accepted, password) } else { - call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) + call.respond(HttpStatusCode.NotFound, "Login and/or password incorrect.") } + } } } get("/users/token") { hasToken { principal -> - verifyUserFromToken(principal) { user -> - call.respond(HttpStatusCode.OK, convertUserToUserDTO(user)) + verifyUserFromToken(principal) { userDto, _ -> + call.respond(HttpStatusCode.OK, userDto) } } } diff --git a/Sources/src/main/kotlin/allin/utils/TokenManager.kt b/Sources/src/main/kotlin/allin/utils/TokenManager.kt index 93b7e50..86f2073 100644 --- a/Sources/src/main/kotlin/allin/utils/TokenManager.kt +++ b/Sources/src/main/kotlin/allin/utils/TokenManager.kt @@ -1,5 +1,6 @@ package allin.utils +import allin.dto.UserDTO import allin.model.User import com.auth0.jwt.JWT import com.auth0.jwt.JWTVerifier @@ -40,36 +41,36 @@ class TokenManager private constructor(val config: HoconApplicationConfig) { } } + fun generateOrReplaceJWTToken(user: UserDTO): 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) } } - fun generateJWTToken(user : UserDTO): String { + fun generateJWTToken(user: UserDTO): 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 isTokenExpired(token: String): Boolean { val expirationTime = JWT.decode(token).expiresAt.time return System.currentTimeMillis() > expirationTime } - fun getUserToken(user: User): String? { - return user.token - } + fun getUserToken(user: User): String? = user.token + fun getUserToken(user: UserDTO): String? = user.token - fun getUsernameFromToken(token: String) : String{ + fun getUsernameFromToken(token: String): String { val decodedJWT: DecodedJWT = JWT.decode(token) return decodedJWT.getClaim("username").asString() } diff --git a/Sources/target/classes/META-INF/allin-api.kotlin_module b/Sources/target/classes/META-INF/allin-api.kotlin_module deleted file mode 100644 index 800390ea11a064bbc23773deb2f4818d2e4de1e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmZQzU|?ooU|VB#7(u}O@Bz`%f)HVwoz#gNDri!H#Vq)vy?MGTB)lv!ll z)m_u3Te>%0((R$AeM);;FZDSsr;q(x`rgxrA$A zpjMbMiZ@(`8wM-->Wx6ZbZvIblX>X`mO-?70mob(IblVwk^Wuj%y^b#S|#2;Kb&1P z%7$(mPC=huT9sx%m_T1W-G?i#At7)qy73U@H8cn`j988poTmrUdk8+d zo=eyJqNg4tFt7{l2fTApE`^0j85nsZFz8LOEbv54xDTua1lk-H2Xz#bSQI(T&DSwd zgI@nSXw9ta74%gZEO~~-C^sC(4Jt9`>rRKtrd%p@Iy?rms%V&1R;?U(LgJR)3d4_(pmK}+&*LM_co7$v z5FX00f~(=9c*f(QrxNsJSA| zwW(^XjjxwH>HB=4^M)PLsok|&M)|MCf17&K%~?z)aT!w#zwL}UwqkfW`C2F)Q)-xD zhO?zp2v!&i=^n<|Rpgp+1+#SDBiz1~jx{h(olNiT=N<~wh>s<44GRKK??$_Z=%T>! zZJ9H+EenR7<7<`U>!vKJgr(sV0=mg;+8MZ=-852Il--?6a@qA{XLmJIb$8ydf)z$m zR16#O>W*hoW3NUSNnFPg9mle@U9xENU29T(Z4=PClpr>fRYO$*f!EV@xBur=lySdp zz9>ipe*b@vfu^eX;Db&=YCa{#OsZE>;u3Kuy3J}ZFMgtqST9O;L zlCi_F%BXHzHf|kB92SG3H#QhM-Ov(05*tjs{Es)7FJpOHsd>b3T<2!d4Slvr$Ls8@ zipAE;X61Zl&;Cclw*+3SkJXy8Gs?Z{C#${ijOUiEy!5(goMnqipSh-h?@*dOcxm{q z!1Ftu^0<67d|zPbec#sbLuQAnsBGEB+&r^-Th?VNn>Rd5wIQ==5@^a<1;+>~wR}Ib zpSd<^l%lf(S@!l*VR1=%5#;FAkQOP*j8nFJiv&iu8ysfyou@N~$4bjz1rMO5GL9oX zmOI~;s9}g- z2@bw*p8SM69q|f|*4uFE4)*_%Ac40yAF6`!1P<^EB-Mgep8b^j7?Rxck@K=5@-ME6 zZ0RmeUhDlcdj7x<{#~ywmAU=YUFbYJvw?GyeYf%9w&8mijo}_%5?E-<+{N?;u1xjc z!<@j|&=S8xBK{WI@8jBnLcfELZ{QUI#XI+LeWC4>cVPaVl;ijr=R;_C>Rp`Ha8ARO z3*z7f4X^x%@Sk%WqwI0cX&lE4M-H9Hv%izvFB7h`?WO!_{^tpe5vx7gbz&m2fZ8q7 zfC9fDegoHIT;Jx<_^3$=GzrrI2`Q7zk>x(F9rqDi=)Z%t7ZM$bzQ5p1N8(R-?Kb>( zcv!Wx;!VUYOLrhZ$TI~iSL9K<8zdi(tZ&uHa4;UpP?e-2T+1lsStne{Gf5_jO>6I| z4ScGPPUzpjXKv$jJLPEIlB1P!D1DV;W$sicwNj3uifX^)*Rv$~J+8oEd^=hdmiqny zeuN)W?qBgM!P7S*+2i;%Au)RFH(U+w+UcJseF8qPNXTI|b*SlxnvVL6v!{GKjnC7b uw-yo4;0qaiF@rDR%NcwHU(Mikd~K0GOYn8Pv50*>zTxAWK0+UPAM(GynR{3O diff --git a/Sources/target/classes/allin/ApplicationKt$extracted$1$1.class b/Sources/target/classes/allin/ApplicationKt$extracted$1$1.class deleted file mode 100644 index 9d2dbac06f4b76f1e5af99912e79945aae8d07dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2618 zcmbVN+g95~6y2kMWrPTq=1T5~n;1Jm&|Di68gP@wi6In-)0Ex@c`(AVM5VElyz$Z> z=@+zF4e4dAE><7=QC&SF3!=Etq164&Vx&F`VJ9>v-1G`nv1b zTspq@KxV`<8E{*QYGyn$u7fdrSFZa~EnI6gEXR`~@VIN0d1JZC3(2{are`aZ(7GF2 z;}d1ax9ZXltWX3k5m>w_SFN?D(z^e6af)o=$=LT?;J2Kr2r@RFl6QuYYzMd9okkJ3h)V|Y z7-i@V1a}*0j4@p7VDhgr*YN>)Ul06s5y$GTHNF=9f2?K@N9Zc|YFuHdSH z%eb~Dm)&>jxIs#)3EB3`aDejkS_?576E{)l#fO+6;-Qf9>fj`&-H4M&Ch?I9(QQ)l zTg##41XxUYCWV7S>C{&&B?4Cj+!iEmRfsPT}A!#HA4;d#i=8`oP^pmlso+)J|y zi&L{jI%?l`WTNVAVgZXin8zaqZGD_!D3PuhnPG5y&y0|qLcpnBXpPoBdajuI^{5{h zSX~+WX!4n(ERwQTCD6>)hG}eV7}|hlXh$?M2evkbwK0~{#(>R0K$EjTrg%Vt1cj0L|L*y66ETpo=bRNC+fRE&{O zx+%Ciw1ENj?g7-&)1~r9Um86$>ytH2E7izAF8>mJxr;9`nCp6l13%Ij!#e#>x94#X zhp0y@BRt9-Sqf3ZpwcF_3a^DOvVd#(p<_SeOg{G$`ZjT43nQDbRBv!-d=uAy!7YYO zOyz$=@d9BQNQu(^g|%n;Ln=5&%M zjuNjaA~Z|3B6OQJC_-i~zlHoJ=3b!k1NGZ(QnU&QpiMl+XEfi9kk*_fLaWpw zI%>Nu#{E28G|020zFM`0CRr-5t*G_zl-lcr^@PwqU&6i;mP+`dgfH<`318!z5;&HZ Uz(UxlE}<)g2(c1kCdA>t0q3^U4*&oF diff --git a/Sources/target/classes/allin/ApplicationKt$extracted$1.class b/Sources/target/classes/allin/ApplicationKt$extracted$1.class deleted file mode 100644 index 2e3a1cf59133d4a935cc73e169862bbec87df0b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2007 zcmb7ETT|Oc6#iBi3xpC3xsx`Kq9(>B2zpCfQ(BioQ7}##JER?+7Fif!dBsR8H+|!` z^cS?9q{*~19j1@{QJtQ(9peNuX&$tDw7cg!-?{$t?;n2w_y~^~rg;$f!Y&>j2ENOs zABs(Bc~4}-UFp@VB^`_*DK$c=o*lHBwlAa?2_D!b-rTM6LjT=fB3y+L+v{CvX}RQw zc0-1d9eYvBi)^0AeY;4DCuG;;YAE*ndJpN5@MU48z%X^TSsf{c8-4c!OzTK9q?dhy zTVdGDmO8#B(hp+08a6z!#Rac>QQ>utZkv$35t7gsnl8_|ZH9A}>;oXGXM>wCFg6Me zCWCHupcxk4&Zdd;7*`+}hE&#>+cq(RNdv>UKnHT)j~Q-uIrK4pHJKFBv@cpjoZ(LP zbpmH6MmaoN3ZuGx;K|*H`;=fVL@3(@6WirbmXjbL_=}dJVkxMT^p0Ta)m-&T$PqFk zFyD=Jyu)zG-S^x^7wrL$c+;a=W4N6y9q<;n11{?J{oMo4m4&{OiUO$@R7`GQ+Q7S* zpJfKyTWE$5o4XbVM za!0>sZw6DCCobR7Tb)V>*T`~_Ox__`nf!_rlu0v}KZgA~mVU$CU+BLBpQcwJ2<1u# z+U!A__!OVf{V*QV?PM1RuwuW5dO}_^=0EWm(n%~(9+h;6}nC+6mSSl)1=+RbxRW>q5L{tpE$=}pS5<+ zS}DKs2D}4Lz(t}JNGReb4~3XxJI+R=LIPxYc6N5=oBRCn=P$njxQ7=EH@NRh<*c^b zzVx`3f!fjqai~M?X;CXIWxyD|EjI&g)Eb?ZBb64R;=WVnt!j;zlHc}YC24p80V%CSJdgUV zkYc!=_EV%l}X!3MVa9CujV>yu%%ztGe^7+7O;DB_!Jhq+T**x{7Nyu3&-! zP4riCUw$*_C3P+iyKfmxF%-{N>~-qUX+(i?Hi>Mb%7?SGhPhUs%^ zJ@SUk0yOzg17IK)w z`wUilkzxG22(!x`T?g7FvpzZFWYHL2$`SV=!`KPrQ=xf{Yfgh}wK_v|gP0*XL%_hA zh8d!dhthCG;%elxaD0@vkB@9?)UvG!i`dcQqbaM%=B=Xj#Qy!ew3RhhwIxbznX5p( zYz1*dn@ymX&)MD#));bwE61>KW~xk)`RPGS9>?zNuVaJZQsQLZZPH|>)`A*cfbnwR zaetT7*j0V8V+g}YSt?P9TU8PEC50EU(y}F7)sc}TrNI`io-R5~zpIo8*L)sDf^N~s zy7K%Wq9vqK9t1VYVq4Y~*KtT*?Cl^9J+UE;%gMfj-5z`b6-8>x1u6~Qc1)T+QLR(- zr{0moC9XgkR6V5UQ?HQ!fjEXuqWPW_7rQoNW~4~dSZoraMbGht@yo9Z*}r}rLwx*Ob`1ay7?oyT1`^gT<-pCoy$ivtl9_%3% NVKu_T2)81P`~|{H21oz^ diff --git a/Sources/target/classes/allin/ApplicationKt$main$1.class b/Sources/target/classes/allin/ApplicationKt$main$1.class deleted file mode 100644 index ccafde632bc7683ba679b5b7ee4c28d85530e4aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1543 zcma)6U2hvj6g{(c{ju3Lj+3@YC@pPG>%`DaN}+&Fs4)p$Y7D|963WwfcSt5)&qh0A ztGwm6@C*2mXay3Ac;rVR?l`V%q*Tg-?_AH^d+xnw&g?(`{_z)p2WT^_@;H{tZyp`R zGUP@k>WQfgxKx$RJQ#y+_Y-3y4o3rDDkDTYQK}1 z&M=M%e5qo4sE9#NM3IQPW0ndi|9`+K>wz*Ufyq$kvBYpWJP=`jg7yth`9RS1Fx;)S z5BZ4uF<1Nk*S$j#n)=L6*MjWVEg4sE)x~8jGc2A#LLRFOB_4)CQ;*L~%0nX}57$s~ z@dn;xI5#B>cg|>PZKkV9pA>jL&E#>@!@TXp!EJ`Qi6E?k@_3t}5Olgvo1NA+!^M{} z9m~tZT~v#>gEa={Xp^CQRu_dvNTMhCSj7}=k$X1rQjxq3hJ}}qUkSq_Za7`0GZO@qta&qjsC&#W+a$INGA-8mLyy|SQb!WqQ?Ed{z&MDZe z=su0s;3`o+4w9iJF%xLkK2HyiP-M6?^KkF=4IQ?Uh}2qcCn1k_c`A7?7Ei5Vm~TrZ zIzv)hI@zgwJ5)vvM4(1eOA4CGsQF5;3|^p=NLw-2TF{f3-&SFqXi^c4e~?5B#je~} z+zeBy;&zi^8j2lhORh``?4H8Upkjllyg=j7X9g>lTjD26KjNEqTI5wIf+j|8J^LKq zFXS;Xf|UV9+Kd*h4y|*w^5P4u)L!7aO>?kK*4|9g5A<-C+SJH3|JK@-6x!O0ekOdhGT3eX6eZ_5s>E~gD=PHXLv&ELyEjl pS?}#36W~FB_XB)@hXFpsM*%)YeGg2dflv03)!5SbRO5!m{C_18bH@Mx diff --git a/Sources/target/classes/allin/ApplicationKt.class b/Sources/target/classes/allin/ApplicationKt.class deleted file mode 100644 index a845276e2ed90d90cd8b2fb08db582c88e4616a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3163 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 NOxbX3T(t3r{{d0m31k2O diff --git a/Sources/target/classes/allin/dto/UserDTO$Companion.class b/Sources/target/classes/allin/dto/UserDTO$Companion.class deleted file mode 100644 index d9c38c81b34cbf0733898f2a6854697c37c06df9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1275 zcmb7EOK%cU6#niEWq_ikRBIpBT1yqG?Ld7c(ljcy5v4Sd%BBl*fw5i~?ldzO(zs&P zAL7cTx-oHKNZt9PjAtl)Bt)%?Iq&bBGxwZ(fByRR9l$+2WSHi*Eu>jfj``ZN-1Y6P zM9yjMaVZ>WfHB1Cyv8M^6&n!Bs*s^Vkni*_6aom#S8W>>+<%^~5C&k<|hS|Ydi8JBZC`J(vBZe`C zxqtqlfy)e;WdA74db?=~sVrA=+g!Ka@|LY~j`Wns0J1phR=+O04Hlt+u6Sg%MC>vopWjy!$?6$tJrE* zEO(n%Y_h})PL-xw~5UCC9;rGV*IEvZD)%FDL!1jRf#-8qJ6UP{Z&+1&Fi zx-pTG({iiUhVWBQ_L1cQ95OWSfIkE1B+0)#1#2-dX9iNd1JVZJ7m>}FA={_b`8sTK>RU9P7~(p4)i=`^0=1A kEUuG?xjb%Qeh17$0t-7ZJbGks(?ih1u!mb7k{(jO0StFENdN!< diff --git a/Sources/target/classes/allin/dto/UserDTO.class b/Sources/target/classes/allin/dto/UserDTO.class deleted file mode 100644 index 864d973b74c93c2d96d7cf4d25f3846f19587d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5137 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 AaR2}S diff --git a/Sources/target/classes/allin/dto/UserDTOWithToken$Companion.class b/Sources/target/classes/allin/dto/UserDTOWithToken$Companion.class deleted file mode 100644 index 363fed4fd24995b835dad0269a70114bb862b7fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338 zcmb7EOH&g;5dLO2WRrjrf+8;;NWg%?CipspqQoF&G=wS>M=E<$yY_2ecq`@g zH&Snx-G)%foZH;tO1jDdV~E%JF1H=7w(Rw4UDUJ%lOen)mDEcNW@@I=haQAu2*F|q z>22vVOcySaAj=S=?2>OQZt2ytEsX*`$*3uuR}p{pL3%D1^vuI{As?V_uTEyp3R>2rQ0c~qqEEc7!(^2JhlxtM##kUA%O@)R!H zhXEv_h+~jp;-5cn;VMHW)x9OVzT32=(!x{Ru~)=9-g0!#RlfFGHSKz9+-nFgJ5!0l z2%0mPteqI&Hak{^`TvW?FmMD|6Pj;w&FPwq=B`P@#eyRm9AID#((lPYN)xx4VOVYN z55jPLJpKj${};yWbXO8G27OkC4a9LZjT>r1^%XJ;=G6 zf}y`4l_<8FRpFI+)geuy;MTZP;WYImca_nS+)`Y(JaQO&)lynEMPBVnUy{%A$y_q@ z<&_d%&f&fEustiJpbdi<6aLCXAgo3WXB#zdVuFfXO4%$StXZ9;1pNTP$ zrZX@D5rP4Ie;g1+jHChdlE&_g39`m<7xzeO5S=6Xkn{%T@rdXX@*E?~ t_y){8uIF(hkDItfEGF`}jmZr#A4yDY!1C!u!nBXDk6s^le58EL{01zTP1gVb diff --git a/Sources/target/classes/allin/dto/UserDTOWithToken.class b/Sources/target/classes/allin/dto/UserDTOWithToken.class deleted file mode 100644 index 00325c57b7e904a12dfe0a7977bbf82978b26878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6105 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 diff --git a/Sources/target/classes/allin/model/Bet$$serializer.class b/Sources/target/classes/allin/model/Bet$$serializer.class deleted file mode 100644 index b24930ae913026e1ab08436535809d66b88a3c77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6534 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 diff --git a/Sources/target/classes/allin/model/Bet$Companion.class b/Sources/target/classes/allin/model/Bet$Companion.class deleted file mode 100644 index 76f393cfd87af6f85c2471a2a65e6ddc17a05d1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1257 zcmb7EOHUI~6#ni^>9nOvTNHVSiWF^8m=>Q2gossQwbVoi8y4oaT=BNkJ7ngzA+EaO zhq!X7ZcJR526z4_35PlZkw z+{P|f(p451L!!o8+;+Iyv0qneqN**J4B;iIq+Vt)Guh2J1`v)R1dAc0-%FoiqI71~ zMTVF!JjosTL3j)^nQW=cU&hZpL5)7e1V>o&?`E zx>1Jt|I5aZJR+g$I>**#};UG6BZn;ros-ZYh#4N+7r=}W?_oa`Axyr`7$3J&*uK`$h> z?l!%uSd~HQu^w~tFCOwV=1_3=FiE3_Mi*q0We39`IWYSTkuRhe$k7>u0gGrr{1AXB zVq_&TNFK9G&iBaHS6u2~Tg{ahhE=x2_kK{DuPH0XzR zn$D3!XDgq$GG)h(DsOcrsii0imP hDyE9KiRmpcA8E{N!Sd;|f?GbqJ_dc<_L1?C{R0doE@uD$ diff --git a/Sources/target/classes/allin/model/Bet.class b/Sources/target/classes/allin/model/Bet.class deleted file mode 100644 index c8f6ea00310cad518befeb4e94995e2d607198f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9414 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 L1sH!>3g7<&ggu%A diff --git a/Sources/target/classes/allin/model/CheckUser$$serializer.class b/Sources/target/classes/allin/model/CheckUser$$serializer.class deleted file mode 100644 index 5b18949edb14bffd12ac12c274f322ab45e4d9f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5271 zcmcIo`&Sg#9sk_f#|*=w>mn*9QLHq91z9wPSU{r!>LL;gN`llT!|n}?%+7A+&Z4G| zn7-2YySC}O>BF>5+ti$+QcoLBJSRW&=l(sV-#a@yyWlRU=hVZ_ow@gWzpwlGKCb`% z??3(p;2_>(*kf3hX{U1eEVoia^E|U~UT~+qogSuPnXhq21!H(=?2@r)q%6apOFch( ziD%q_v4y-#Td$n{;Y*uNL@O!!dH4j1md;IvX`xBGHg!*i|wvb!jnINd{?Knk38&fv=mP zB_lJ9kLV!47@q2=k!LE2p=8#8jOZSubnHWK4BN3or-M8|Az9n4YYkCxkYUp-Cx8&c zV#X~xoMEn>AJ)SG`D6o`L-|}GFHD!0y%<9uo^8Z4I8+x0fx>GytLSG)l$<@uUoCRm zr6g@#_0rsh7zS~;5d)yK*X$E{KpL@ljz}5Ok7Q%Iv+7X%BZ%QBj!9X^1BHAkX*DIt`;-%~YaYMWJwem^+9yg!t;g$L5SbH;EMWEgt& zY*NPr&N0+;bAX{T?p9UU(kZHVfuW%)7aZS^+lWjGq(q%m&^blPz!S|K4KoapMZ+p` z4Hq|#PM@`km;V33ST;ijqtS?$F-ryJvO{6oKFO_D7+&wFW8nkGds#%C4eMtWI^rz2 zJYv$NPPOpdEc0`aC47-8<{M#3tUmB@GHkD7FT>!5T*?ru&J%u<7()j-WqP(54sXaP z@L470`+Owmr*T1YdX+LxRZ#f^R38U3)Q(cqCy8`f@S0?SUt~D4LBMU$EU2J-Rtozb zuTSm?`eY5SF^pChEk8fjIrSjM*K{Vb&mQn|*JpKH#pft=tUOgH4X+b4jchhZ;@fJ7 zyCD7Z2EHJ-evw>JFod|Acd{D3OtrvQh6;JX;ThSI%bK0zLKt&Y`3{|V&lrP)9CPmWn}mZraRBDwJd0&GE0(l zeud-;LEIQXl1(a!j!W%Q#NvzGqCUI4v8*AHj>#q39X*vE9v&HI*it4s!(Ah5xCSjM zxy2COWSD$3$Oo}!3p9VllwZB{mfg?r!Sb~}efgTM>`+QStvrTwCBDUD?)Z9ZPi&2s0QK{PTk>ubWMI%KG zBFWom{5!oUxIs_32}Je|J!2&T8k^{gT3c*JXwBw3*!CVRZnXK29!*f#rYYimly zrer#sCKojj`;WR3U3aiQc?(aU2_FgdMOc57^{ZXoOZbF>eyvqo!gCC7p`%sn4lQ9Q zg#KttBz&zeLKETAgxV5`(8LX7pLh!|)BF-nD(DNhg#Sb$aB_wI(I`D5PjEN=o(>(k zvGSk$c-~l9zMt*NyLXYEZVBJU*asf-vkLBFV!9>L8f{hCZJd`L2|)@YyH+rc211dF zXH@K>15xp!_cs8nkOQjLSoK=Cxp{?rQnkElYk;e$kE?Co`F!L%oLq?{rpUg6T;m+DFPf=^LTBWLM%-XkEeY@K+jvztQg-^!+B;^;Lnd;p<1e?{5lx3*Vlh)$ee8 z7vID8iS-X=5K7~RY5XXS>-aIf;wNbeo1e~r3H%H{pFxYjF9d!mU2j6EYKm46qpj2_9kZp76dK|{N{h03BQ5> diff --git a/Sources/target/classes/allin/model/CheckUser$Companion.class b/Sources/target/classes/allin/model/CheckUser$Companion.class deleted file mode 100644 index 82cf4d4af5fe5ca61c1094cc16c6a81416bd2b6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1300 zcmb7E%}*0S6#va`>9z%>6!}&W0c}y(f?o#+5v#;%sfop2IGAY}Vd!?2>`n>s)DwS* zCy(mI#Di(@<{xEzQwo@f0S`Ox^Y`A{dGF27U*En1xQ|B+L`ds@j3g5M7c=>SYEyohkRA3(*83a2O(bTZRl1 zg>zyrG9)OO$#>P+?S;jHv%nR#Bb^B?2F43V6xx`Tkej~ zm4HhXx?Cw=w=;!q(bvU>=aJXM+2v0imnH%Sy$rE@v9!KY%sn%4&xI`Zpbx1ylIW)l z=l-pO0fzZ>=UUvIy}B!v7J=fP`&7K+4NvEM73!c-)qb$XgPI5yGvx#<(}@15>Z$Q< zy=`Tf`@d)meaC<`q4_4)oG!W;TNG|P7-!@!x{axlZt{YRGxbg~W%j@gg7nx-+&(b6#V7NiozM!h0} zbzbpElPdUC?v*)BHpv}jyd<|2*NuQ2#$Gp+mUWR=doq;dvvN9s3_W?JM3D1%7z$dW zM9FUiRk12f=#dVx{1*=M)bogG1Z?7H8|k)Ol3ddnqFpmz5&KMxg)E)M48#Zq^c*=L zjs!`4=q8Qb2G4iE&KF#1Vek`~{{?qC@P)R|CEO!wl3WIojOrO8-qbTo)FNu?88-FM zfYUj6r0fJCGe$5lZ+ab~+GQR;vG(W}w diff --git a/Sources/target/classes/allin/model/CheckUser.class b/Sources/target/classes/allin/model/CheckUser.class deleted file mode 100644 index e2c114335f5cab515d4c7fe19f5a9a0f395b8ad8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4635 zcmbVO>vI#=7609pEUjf3)&gwH#$Xq>@rwu?8WId4V4GTCI~0R~(6m`g7klw~rRc5< zp(&xS(4=kBXWFD6I@1rGe&9o20a|7{6u$Lu>U8?MyK7ls8QRR)y62v~_dI{+-1D#h z{QVyQ4&XNeJ8ai=yxdBuDBaxnk}NErQ?inT5U{S;t9H({y~W&X3s+>pPa-CeIP7?i z|BAqK1JmmV=KPA|EskyE49*MenJ!fpb62FlP_Z3PVW2$?E2KIF;{KAO1UjZ0 z#*{9ai_)LgUJ7g<7~CjUpoJ$+N5%-G3Z<2D$&;SHzkV}HRfSUdZGj{ITMjlcNIRKG z(ThC-X)Un7C@P=3d1@nRt>8I0d9_%*h_HQ<+AjO0(%<-W@Er3sbgv6uultSm|I4A*U&(jF9_@$ z7=QZBFYB8xrZI>fO}#`!HrEmnSr9?%lAnt;P6Y{O9 z?Gi{k>YZ2%b!ASsmjYvuYb*cN=2VWuWsxxxYzI63fn ztgEkus7dPXavEQ4!D~3fN>)J(6Q!zOu2RkZO|)!kGQCWN@zp^QIIxL;rv_11d;?SK z3OO=<6XCTk9i}JB^f)`bU#S+DxEZ^$%mnLXZHr{&CSQAZs-;rZE%x#S>0OY$Ri!^W6yv+>hbZ@AymX zv1^LXtaEj=UZ#&SJ;XcvDA#qa0FWU7_0+b;6=U}jq&`{+@`S%H${;v zL|5bcwe+2Kt9+g&uN7oDc%M)4(Ju*f`Ae13)ftCD^A=Ay(k<4G2)sOy&wn1fbRE2f zN(yD@*efYL_TOD=@e9(u0YL&sH_=t|;TaHQN)8t|T?9kS?#3C>jmh?y^(2U@{cDx~ z_&_odK9(CyB*^v4`pp!s;~jzKnlNH!69m+bF#k93uAVGz>OS8%TQvv6KHnA{%gspN zF513Llo~6mF^+gb|1|3#;#@3~f6dXmeWZ%}g}CtG<|`?q(?}WCgPSS-8I~C?TT+He zw*F)`lik8K&Q-NZGa*MOfo*=%jmyQxR-#Yk_h(LI($`oYan(=@`1 z0To>3VR3Ss)y4yvQPbKMC=yeTKGq_(lN%!~Nbd;6k?ynFNq3AUtWK^Jo3OGZy0~_8 z-8uE>mN?TEDxzgNL|t*S#Y&U8W^Tl6wbBp&kl3x`%Q3B`t{V^u0oeB1W!835kJ-;J zv*CB2sd~P%BJMGiAnI65F}FGs?e&?s598wS$X)bnpF(M2(A#T4Z?6TtJqmh#kTxd3YQ`7w zB?{9@U!ck+u01{R8=t_`X_)S5ipcED(D29|41~Hr=CL@8mK3jY4v#W;f~!u}zrYw!*Z-oeZ3euRk~XpmT;$M(p;qm*w@en%+t=;3Z__Y!H! zJo@J0?%VtnhNYdyOl-xgI2IVx5eXJJj&Xj|-j=!Q5FZ>G{ym!Fw}<};<5M)nZVx|z zF{3q%@c$mB0;bl&eRgdh*UAj&IJ6+1H2;n5Nf=uLd}!^ITT9A8!yB*S>$LeB3U9)`#1jh= z1r#ah8v9uY(as=cK>9weUle!ot-s*gIykxye!|}j1zhI;hwO^ix!&OVDftF|5-9wL z)OWc5E)D*x@nF=HTX4yUrS+C;i|$# vg@nRRg&xH*3cHm)-=}aqIF?s9q%f#(D%hS?IHxeLa9-hp!iNes6h8VdEaqq? diff --git a/Sources/target/classes/allin/model/UpdatedBetData$$serializer.class b/Sources/target/classes/allin/model/UpdatedBetData$$serializer.class deleted file mode 100644 index 39e6f80aecb47f2fac869b5328c6745ead92c32b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6054 zcmcIoiF*^r75|N{mDU1;zyuKjrnreO5V+K#wmEGRL~Ms*Ab^{;YiY0-uUA65GLRl2 zY1*_&)3j+yo8CNxX_b7s_t)eSw18K-&cR%YIbMdy!YlEzj@Dh|NG&` z0CwQ6z@vs`nRa|4osw4kSSDq-GPPg2y@qQvHaaqE8kYI2%xVw~%aNG8qqMA+S;EU~#iogIyzk?u&=Fl{Gp*ml~@TiA&Yrrp7uWsz#n{adE7 zSDrR`!rd1K= z42pHtBV9v-zy>3kl#bI#qcqOn-I&aT@d>QZu?d?6HZAVtirCWdNrAS-$;yUE*zRmJ zYIsZ_m>3*7x^J+jPhjg(W}LITD~x8egwTXmfo)63-Jecd(y%LKZ=tD|61ZSnUT8do zt=J||N1v2nMc_cS2$ps-oid48y^=37+tpknex3A7Ln(HX`=SgSJ*yNM`^n{@tZ zG!WaCk4VNh8Rn91E-M8_s~MwK7}GFI$m~f^WYUi5%91I=*o%F2*n|B7@%!AYp;sVU zF!qo&E@&;b+8i7*b~NyWEcV9Vkf z6BvqNmB(6|l{eVv1r39|14{Z9ZboCol4YGbuF$vZJeUcc$M8cvnnTojbBQ}VpP;}2vn z<-*V5871uV0bd6q0F*m=~TkXd<^!aZ6}}I>Fj`!9akWhFJ?@2J)BWh z%;I*Kj~0Zt#(Sw#G)xGDN@+kqd16TkeF|o&SS@gEK2CVe>m;*5oE7j-8dgpQp(>~) zPEh2pA@~1>x6)Y@yq&AVBp9vwxh#RNaY$OH1zxOGHdb?O{^05&D#K_=P8ILf25Sbu zv-pwETb}6nN&@k zDwZZ#z#5}Oh@D5-Pc=9fY#{Oq8A5lPkDhWC=J4;ErJWsifLv8|~WRtZ>)+KWIEjcMI-p!?rB@Id1ua>ww za4^x^+s6xhWr=7&x(3@_gNvStNiQ2>p?*T@hwQ~T=g*t!i>0O~wO!!W^u-Q+`l9Yx z>nS|J(&*Jak(I?czH?oXMGAwW4tj!jUh=G+zStg&`l6m~o^4{k7WCYHE8vNE53P*^ z*M+0OXdvnddbjD@LI>|$68W{dLn|ZUb);_(M3!+}u2v4kA}jbF;oM4&QI4w=jaoah zI^yHIf9LTNcP{zKBe2dF3`DfsZwFSZW3<<7`L|ZI`~o|Qrn;Z*p4P0kttOhOW_R)A zt7vh^Jd|&#wip?cVKYbDaAi+Rhcl?Rj9GvQk&In^D4okDr^|-Z-r|7hX-e;`4#8L%z?kui6CYxXs^ifq>&OezBCp3V7#jzJWFG zb8)H7ck(omO1;RC?G1NMb8S1nlwj=&)=y(YEtXnQpNb=L>&CKf1MpExVDk+$_G=&E z(SbJa6|@bt`C5JLLv8*m*gn)2XbteamYB^&F^g-?+o@m*F+-b%X`SKL=%;U>tK}MY z4fu9@JN({`fauh`9YN6AJRz2A4S!_Ns{ ztj^ayji+MT6o&k?&aqCd-tR9g`loP`)WLecR+tFH>H>M{P?37LGgR-71i5+{?>+J+ z-X+T^e8GbbU%l@g+J%3w&+w0lTbPeB}t8fWJ3JU9GUV2$!oeF=8 zx&-lZ8I(@sfeh%r3D3#vc;zZyy@}UOM!$CjuTDeLuH%g-TcVe|*YM+(=uZp7&kMsZ z^TSoFS9*xN_wofD4cCPT`Tmph(fsK*;je_mRRqkBI2IDzi+^$5gOBlVj=+ETyu$Ba z@sw{l_%(jB7r*8A?;Kpl+rwP_y~I0s7k?n@KMup2z@HL$FM;>*0bg+?fvfoQFoc7@ z;My?i9b9*CgFbTDNg?K7%E3bp);icomJU92u);yRgB=bm2kHFeSqINMa2(wHA7-n* As{jB1 diff --git a/Sources/target/classes/allin/model/UpdatedBetData$Companion.class b/Sources/target/classes/allin/model/UpdatedBetData$Companion.class deleted file mode 100644 index 2c6d0ca240ab4582184f75fc0f61219f4a9cb829..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 zcmb7E%}*0S6#va`>9(axDT;jgffQ^}*cQJI5F!+b)lw6Sy>Ku?JL1soEZLnB;;AS8 z5KkV}i-`x*;LShE__h=wF;qP4ywBfzZ|A)?KYxAu4&VVEGo-lVNM$$NnsDsbdo`{_ zZB^(su6Zi&HukuZuCl-w61#k#+YVPd_RH;EQPmbqhVYV9QZF-@=}aY#K7?Zk!D0yM zchYB=DPAPOB16mzM+u9|6lJRD zdOP;6(AyrD%D1^vuI{As?UJiYO~)axnI1oqIw?|k76uq1g;IHQrIdflknWK^bq2Q> z#~_kXBrwD<`OlxXaFrpK?%tBUyWg;-(!x{RvDd^~-gI={RlfF`Rqc8k+^Y+3F;j`b z2%0mLs-7C(G&)v>`TvW?Fn9vk5Sr8IaJnX=v2W6FvEYaX2N+nL^anDKvc%PL4D0RI zaLgDnVn(9fiWw1N0)f7ED{^#bj$JB)eW}-(osQ757$8&s7GK`(yZws>w{b!m-$Unw~ZNrreq zDdFWE?)!pvELL`#URA8iAoOS#S@{cx95p`_bOa`Gw5oJ%Hc58SBBFh>UlI9CjDakj zffAx!h!5(S zBWe&0>KO^@p-HE6_*mHuLS~F&jBF;oWI&Rv3Eag!(i%kPh(08}fq6V4`h+~k2{W+; qvw-Ub+$i8CZV`*g0&Zh!3(Q9f(_657dW|sSBkZH!#~mMOADQ3JdrW}< diff --git a/Sources/target/classes/allin/model/UpdatedBetData.class b/Sources/target/classes/allin/model/UpdatedBetData.class deleted file mode 100644 index c65c0cff1b7d3732da97d23f446e343dbe2d2a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7171 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 oVV%Nyg$)WxEiZVPXbV=K^P2(=FnH2GST z*tk^9-sWiuQ+LARX71{Exi!Hz)|9%l_%Nzaqo4v|2_bt?wX&$k|6g=fgcq)LY8(N&B(X?!{7jDRG%tqMe7${6gZqX3yqToiU*rhG{!qXeCAq znT$G{(Wpto?a)kHU=pi&t4A^*^W>|itwgE_4%spulyG1{vj@f|#-`4sMhBmpoSGaT z96dRBQo_EbGWH9j0Wk#+;jn}X>ZN74<5U=pXsSj4%`}xKenPVf8CwWxk+9od%$pa+ zj8m$fDdaT?`^z2IbQo=DSI~-tgy3+jLqh%5BMc*nP9dyI!r>jI3>ilyC}N*(3JK$w z*hDuTkr4Me+&O{B=#g;W30*UmHKU+KtwKJUY3v_QMd!3=e`Z)W9;`wiPt#|)XxlmF zMy4&pPK*`o1(TW8(ZQfu7~O%H6EYsB_ft38E603D+azdspM|GY-dilqX+A-37$-1L zgI@5^YS)w0q&V{h8K*X;oMLjG(B?DDVhlJLPcr4$7jxPeeZ9H#Xa+K>W%V}uF_U*` z5<_Q*Ou?ryq#%W12@&tueGGwMot_>M4lwHO@HF$Mn3m8{%vV0T%dphp{1s2qI6k9b z3=^)yj^zjPnrdr9PW^F|-_}mqDHWSC=FQW~S+RwuB!q41 zE~ZjUR1)S(rIk_@tBgN6!}X&sE1ouf8Z!#c;Th&QU(?NA;k$ycmC*KChM~3Y zQm)a*n(oT0ipb^lYG$xL4^_c)n3d47on|F9*jG}F!NZb zfriBmUhkG>8Ryr%ew)fEgQu9-f#RiNWiZXl+KQGg*mUHlN}abtk}|Kzt(gyFRw zwH}i&a`>DA6M5Ro3oX&L$YAZMN{vpQ=^q^!WEu2%J1tEZ%eYXD0#+nEu+B4;$!H5| zW|AdE8(c|iIXCEE;P%sO3!=6eZDfWiWVOcVtTu1vwP>STUK^tqbbB#cRJ;nG-;}%E zEW>U=v;i+EcoAQeP#qI}K#W;ULgPk9+ODl*;o9X=36)~{GEdbVQ!^&UIcKW1$n4JP znjDp^W?AZj=FrwGi8vtWj1KsQD@LhUB~4vk)8}<*0CZ{n{t^~ms|t*pG)@LeJ0GF`&=m6EP7kX;rH zpd?<^;srKBO9BW|nH60?>|X+NRPd3tOSQ_{B_&WBPyz?thf`~p4h1@-`0n~pJ-^O7 z*b(TgtPP3zC;#y(JA=R+_g2%V8m4hEYZfdv4HOj6={YTT(b3EJy>pk?ob9~Jo_Ei4 zqWCrZk)_n%@rKTL(k$fDn$sT-uCS@G*gG&{DwfquL6ZW3$&vnXrL@^)r>wXoT8U3a zedv_Z5=}-oVo7r7jF!|E5qy4S5JETY^ES6apK8b^&#qFQ6JF2dUr?nKV&l`XGM*P+CRm1IM*HQCjZRE`~O=^YxRXUG5 zP-lmdJl1fel}N|dt?V3<68}$_T4>SHkQBn*@6pyy7wYWrq2#gFE+syw@CGnPy#^*M~+vvT*t2WImJxO z_W^eryRnBOkX0?}xb_j@02IQ^cO)j00RJ4|4DjJ99`31*e}wpZf&{;C-hv}=51-dt zR?)%bBWvg$X&nuAhuW^;_!@dg>mTh21-mOEp}*tPmys0T{>x}?yMaO8xwMLX~#J8ON z02i;^#Ea+Zzi=Iw{zkQexXSlSsJMkF6xvM25+}sZfo@^SpO(=rqgTcgVoToQVSmw~ zC{D{I(>}IDl3P51GD2{TkMsLD=f-LLXKC{1Y4in}-Qsu|`|u`l ze}nya8#Q>BusFCE5GH*9U&70Lx0Az{2?fdPX?z8*5PB5T_$qxNM1FhmHGG{rSs>Ln z@G3nc$zmDJ%Ge49`OV&veugn+(7E)w1%hP!&5@+&#>0KcnzWL6*A z6jYsci!6o9O;Lpkej_&#IM;R^ulIx^p_Z#S5()8WuHlDQxac}zoFqgnI$;Dq;$DO` zBX|QB92bq?$7CP$9P@kFti#@*r-Q4Bqg-u2^?8%?LZ1-|5n}4%E%eLQH5A(DKiBY+ z&3e=o^{AsBV&`IGZx9kuR!2QLsfUak9MyB~5BvfLomKJun4=J9|K#Z!#7)iw7;1mv z=l^xe`DW z>Frx9Je1Bx?_)hG4StpubTEc?qwPn^<*?haq!)?69$0$9_jdiB(N_chNGbs z6KAAoxUd(im0=PPRTH;RHgFRahHJx)s&X*gJfm!tfx4xYr2GtzUB_(`qZl)w!D1Lm zbFW^Pjs=Fi-Q3(-Zq`>xcrPPNo}P(C+$-QNK4Q?0=w$IM_I%BuMnF$Xy{3X9`Aj*! zQy{CxF#Zzqk%)MUN1P(lI^7Jl9;SwZ8bEStD5(&@2joE{t6m}Y1b z8ku9K$5Yxoo7LvEhsIw&<+Qx=YTc#KYTWa^A3J^=(nBZE>0#p3(O@tKn;SL4H#EVI zj$G*^vb2_8*@;A(c+4<5h;XM(!pheD7IlPT!*{s5%>&8zT(PAFI^B?-XvUpA5u_`n zjhK|*5w_Qrp`=6om%IF`InYII&l5r27_ zrXL56Sd)r!G9}pV!4IHfo@#WC@XYkhHQvR*6nfDv_Jbp1}NtEQU=Q z&E6``CqCm!UvyG=Y!RYH^YmQt-RGE`JH_SV`!8^Hhn?WYDN4^V`%K|zbP`Z{$r0OS zLR7dHd%h_yp`eI4;(AJZI;jNXz}Pa;eMq*Vdq56~&YUHtJHKQ8SA6_4efQvV$u;u> z&}JXn#C?21`+0oY5BE}n1&q9awsV5&Z}?o@6%^Apjm4Ao5cV#zA-)c=9%3%U=)dR; B{q6t& diff --git a/Sources/target/classes/allin/routing/BasicRoutingKt.class b/Sources/target/classes/allin/routing/BasicRoutingKt.class deleted file mode 100644 index 64dd93b232990175514e61e70bea5830b5a865bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1144 zcmb7EO-~a+7=C68{aA~XDhh~zPz8#x1-}k8MkJDKT&n?s2Ts%N2-9w7$i z7(=1SyW9yloxZC#g->XTA)ma-u(aUG&}o@4a3=3%R(;h+)@vKD8J4~OFs|lN#El$AaPxANA3MsAo2Q-4oSF(h`$AJG6S!kz9Fq*iQarp%onp9hDhwm%*}N5oH@M-n5LUaJqP=A? z$;AW=tQ89u9e$FrR3WLc$}oF!l($cgY^z||)|f@&gk2zFRan`oSU*0eX^E}I8jGFe zP6xKk4<*BJa=0rk!!WQBHUu4bQi)opT^G>~uLpz_z0l{uE{|la_rTItM;X}`uIfrH z3IDT+>la&2@5fb2L>mFuT4)A)JM2Wh*p#u~@t%v_GY1Jftir-TTsdVujzOeJcSw6l zoJv8lT+AI~xcn8PC%Ao#yC1#~YN0~ZCZ0x?R&9vMR^%EHqQg}qv zCT)Z`Fh)O%*v$%_5PwGa3R diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1$1.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1$1.class deleted file mode 100644 index 524aa644ef35c621a5d731164e8dd1212caab143..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9372 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 diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1.class deleted file mode 100644 index 864d955ce43a036b907354429b18db43d157c497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1856 zcma)7>uwuG7(KIgec5bDVrb%|r5EZpb^=|e1q#>%l914)u3O?XsEUL%wwGk%^=`Gh zw%}i$g(u)5k%~&l;wKM0n&iO89#((|&`yT+_$DY8FbX~_Y1HThF z-hsJcM>{m_;9-;-+qu=;Y7#=gskHn^xgT}grsL7gldf5j?Rry|POp8}@fwlid!e~K zv{uU%$2VJ%ADE#XbnReF+2iG)C+>=15EAeJvM z*LdD4>={Tw*Kq+;oQMvcP@qsbXAu}y!tuI(%NDqipPY~)yjk&s1M|p^>Vb4v4C#4( zBnO45`cbvxx`dp{sW5V?1$GLV*Har;+47=*7)~Qh;w^zojYGT98iG8Lfo$7s2m6_? z9LcUUUCC}ft{>TrsB~(kra%r#stj|O*KrA1=6}xgl?oP_Resd!hCk4a9h#fIM*(&E z$@Sq=xT51S-hMrue|PF$64w~^1aUCnjgI3sl_-*XX$A;cJ*0mW;*RmSTncnfDRus!xQG1~O z`C~#$sa?&xOsy;U3*sz0@D@8v#XtU-42E`xt$I*-L@^S>x2%S#>Z^^)j1}I<#~3n>B=y) zd6`Uac@5VO83xOE=r;w@HRr&SQ70gaUh_La!`^lj<-(9)ZvcM^6-Bn>0?Wc{7YnLK ztaF?{_Kh=-Xyxd^$|12FKY{TxErBXWV=#-0{XMfvPV`he9uq<1bABcB<_j#Wyu{^a z;sjTFxc&mSzflkxodBhb1OevwRgiOoZ9_-`AcG~+JmFfBdcZ6&vreWwZN>CCHz+1! zd8LQt-|+4)xcd{|2k;4csW@Lj8)Ik#_xQg=rQ?Hfrt^I)VCp5bXD7J-D?V1Sf(81T z<04|P`tRAHW0v=h`ed=gG0xS8sL|5sx!ZqM@RZN{B>IFXrG3OKlr4N}VGW;IjDOw2 Y1~&I0LVSU(eZ)g-hxjtYQi$n)0C*MIbN~PV diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$2$1.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$2$1.class deleted file mode 100644 index 4c67bbe22639fa00c7537420fb18ab079fac4e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10482 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 b{Hr$BP~C-y@Hy6Zk&Lhr;fo0K5wd>+t76%i diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3$1.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3$1.class deleted file mode 100644 index 274e3cc0ae10b6611fa3441613b8d62002541691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9610 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 diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3.class deleted file mode 100644 index 8f0297789fb203f6297dc2475d810b55e8e29564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1856 zcma)7Yi}Dx6g{(Xz4m5{6GQWADYSJPJArP}0tFlbiAm^E*DY}xR7FCX*h{kUdbiq# z1>f>p_ys&9Qc($6{m73(oUt8~iqyoCXRl}PoO2)Nj{o}mk3Ru?fE|H(>3Obig+UU# z{=T*D#9K6-@IhP{+J)u9T^&Net+s+#xgU1gmh02am!4IX?Y*WfpMLj!;x}S9@FQz; zU@fmy-N0(aL1;xz*m1%kWsh%o`ibwx<<+vl-0P`yqy(;>dVdC;jL$E=Dct!@N;-8hj|3497D z=_S{L&)|xI%Xs_MbpG2ZD(fAFJwhA|cs+5wrV^!&Yi!%IAc_UP`=1V+M5)Aj25-4E zx`8HcpkUxSZZd_@t^&8tD0}Ht-3OfzxH2M9M@Pv-4ig46EK(Q)iL05=@xDODuGP2K zYLyLviznIj2F8Sir7Uh^SwMTnC4UxoW~IU5p_Z&#ARt=G7~{(yTxBiMYLc_iJu;2%k)cg!hBl+ooai3SX-i^3Thi_u zFMmpF8Fi|8hpDYdKk$ES2T8>7BhGVw&?;MlE_I)R;cruC{ zUM9H>zu^TD!(bT?f~G*W?(X|CPC~L6^&klw&Zes$Ii~15CXMg%?tJ6gJ#{bT^@3!V-;n+T$TCmZ;u;pCA2*^ur}J( z{BqIutXk;#R-pW*@;iVUjliAz4_rIU-^>e4z8cI#OyFGC_Y(k3#0BEZHr?G67?{rO z2*jofxt%l;NTo1{A#Q~Gb|7%M*cS;5DsHAW`m(NA5@s`9 zJdjOkIg<6fS3XdcFyFParJd~MH4&$ACWTWN7dYFaI?BYPK+-C!kQr2~37jQJUySL- zIVX@Pl(x24N^9!^x&Elm&gauOkN1*z7Z-@uBRnRv+OVCfZdnsqfk90qOLW+?MCt@i zUem+*T(6odMtljEQ@Ds}fpm+ms&ZJA1ZMhXY{A6){nNA%(R4M5E3gEHq7pR@t5Rdm z_l>z|VzGbB#R&6*B=zIE!1-RB=tdK`bV5Vsx;nDmqwM&C%m0lg6BwG3Jch zslR@X8wq`@y1;yvrR%vr)xAc*WaxC_m2b?%mwb^OeHNJgU$4u>KNv8Yz70(vp1i?uB=4B)AB+K`D~#wv+B%|Jyr3gW&k#KS6dxa9^%t&NF!3mp zp)S|yj_Wkm@F~A1u-;+hOymm~`UA$JXZY+l6m-lWk!6k-7_|li#wob1`AU1f)}AYz zV|awGQKe;&Fcr<;;4$YV0)9?!cXlyQK(T;!li J;6{Lve*wN?J^KIv diff --git a/Sources/target/classes/allin/routing/BetRouterKt.class b/Sources/target/classes/allin/routing/BetRouterKt.class deleted file mode 100644 index a7e331344e974eabd8c7e12132610a91812ad605..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1608 zcma)6-E-4M5dWRz*s>78F;J2~`842|f*hdq!)aO*NUP$y9m1r; zEq@D7eQeGk;;KF6gqss-GI~4&#jK|Noq3W+Cq_L!cZ(PHBuEa58Q@KRE^>4A>m46 z6s8w#i$Djdt&-lAMijT*j!>sNLH`g9gq%oF9lx)9Q&A|c|^O(okgE#xFANnJV*T)=%_>|$| z6lx#*>wcizbwgaB(vQUqosY)3u@BcHqSuzD3pN#+u5t;NZCu0^h7%=Su*ppsJ~|JA zamA+sOSQ^imUa10PMWtK$NUf7!8t7HzDV^P+(6kz1)nj@PIO0Vw{#016dv8^a~}}+ zNhrR}6{of~dIOV&km)6_7cj7{W(+#~U23jM-1ahqH{6}Khr6~>xMUmihHY3T@kEIq z?k?JenMI?Ttr*qZ7qwuF;TFof;X;wPMR z=&fi(J`Xl|EcJdYEKU2`o2dg%9WM+;ycX~z5%lcX8&N;@#k$mf7sf6&4<&@Qj9KwAGN4p)RsNL!mZTg$|o_L#1=81yVA80iwJ&))*$(QNM xx3^$=xZ~ljhtF}(!x#9{!&mrv3oJnmD_h7X`u9zO)dVvMvI&l-+iMBFeGknLm9zi= diff --git a/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1$1.class b/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1$1.class deleted file mode 100644 index 153891605f5b655883ce6e2f8070b07662d9a591..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10934 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 Z6-`;ZnZ=c?uv7%CW^iodU%SHF_CK$^bawy% diff --git a/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1.class b/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1.class deleted file mode 100644 index c99cc1c1cffea4a0e4eb4bf4e34cf166f4f8208a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1865 zcma)7Yi}Dx6g{(cz4m5{6GIaxErn9k*fDgS7ARm7NKHbQx^9V+pehp5c)cVWuV<@$ zSnw^sgBpfZU13dID09q7uHoU2B*>WLV4l1-!mLReuBG3gZJ7UUY$PsJ`z^wcp@;i zN7j0+;dn+j^n8Oz`nEqIjR_~W_kwOP|4pSL$#8w@{2V$JDTY+dA-D~OM6pEK zCW~fiUq>36hD(^Ejqu0`7|M+cmw^IHIil}%ZH61g*(piNn+?xDG>+}C?Q@69!G-Wb zJ}gbs3!9Pa669P#22zl1u+zxBn%tz$rU-q)aI8SZ8w^*hBirhZK%Q`)_iSni!)mc{ z%=_GMId$}L``EU^>eNn4f*e+5Ar`Tu;R^CpfeRNvDq)54DvsN2c|-Nsfl>Da$ta4` ziwV-Wrr|2yd^Mqeck8Z-wT(%2aWKTKCKgLWb}Drw8LGrC`tDt(IoD zP{&OaG`xd%DTUdt47biHd}*rkqh2svn~|ukqNF2>c?}B6B#n{G=?RRXm6lIHQbXiD&UO)#>b0cDqZWN!Gm%&2O&Z zS=`;{zQfzDy(<@nY{L*nZvRL15E2 zCA%do*9#~Ps^pQ^VaT+cL&3wyCl;;cMZRTkJCbsFM6f@EpF%~2x^jssLtkGk%QjJ| zlk`umqn$@&7082%htyi~6#6e@F*Iq_hr75O-&v4~B2RhaF(D}QTq@^Ye~#ty3tWB5 zPH}yJx1ZzIw-Q1jCqRlLMdQ1OVhp)Byf%U)0OYVrG*8G^B}rfbnBOF(BH5DZ3%Veg z^tJK;Yro^YUvcMWdLP24$O~ARg4QR{I_}aB6p0-lPBLAJv4FW3P@bOR-f#Fs#tJIX zH!)BGX8fKXIp!&L`IpBItw}n4h!$B264;HO4eZhL9ua*?DAfZbOw>$#W?}=Mn-u@1 ZiTkJ@fCcyxTL(x6*beYjfYkume*h$H-cJAk diff --git a/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$2$1.class b/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$2$1.class deleted file mode 100644 index f71e2f60cc0a949f2c9b9166067ba80b42f6b81d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10232 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 diff --git a/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1.class b/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1.class deleted file mode 100644 index 634940f03be9a6c25e502efe6697e661bae29a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2570 zcmb7FZC4vb6n2zG^ioHI)RYRwP%G4IPcGkW)-}VTRTek3031=yTU6u+#o`@ zW!WBYlT)<4qHmhy^g>Dok_yrgMe_g0>u{}Go_$DAxivPq@SDf|5d6 zoha<`Cf7_(IelE(6=g5iHM1(6RCAJwVO);m5=I!VoRS}*VvJ!x^C@?(=7_4{5>6CX zh`Mt!Cna>1A*vTw*Yd@MMTW`qlAfB%C2$Sz#_$f_qr;sNC>`s*ZS}TsG4q3bt{IO&`4GR za7CCTj3}mhK%P-C(+l!U3;Dws)s@>lz|5-ns27;o7R<*n+yUL2>?>N}zPF?0sS%cE zlv~$~u8eTXqCus{m7@5B;i6m?tPrV+*yg_JG5mOjMz)S$q336*MDN-YT*Nbl^C|Ad zaTj@pYo}>UUSWpoCtUUPaZsu!uTT}#8ZD^5Di#wMz+fB-K4a()imR-~Ds+<4%agY1 zv%HTFWB42e2Bkr=N}dE6oiEdCLG@Rb+?e$IRBn7DM%F6B&`Xz(gvTq~<8&OQ-VD*( z#AFkb4H#HW8X@}my&Cxe3Ymk4dt*wLWt6P49RK_0h!T~% zD${hHd2ZR(4|Usj=`|pyW3R7UD#{G;qt}n*c}y9+(J%vnY560&RZ|7FiLaymw`wG= z@Pb{TI+QHfWo~Y8$KWMXtjUH7Yr(KY(XW?;6U?Mmd=hY7=vLEk4O-MG?)jtlg9?jo zS;AQ`x$6pg#s(IxvT3^{3}ST0t}w(_jjF{x-yxLvs_oN7STZE!XaKO$cHiX{S;|fy zF+@*3MrFE)@-TgrLYgtiO3?};5s^&z1rooK#js0lqCJZXtvy3hPP9_)_z4lR0DUs~ z<^e`05Ajy=?R|_NLOnowvo)UFN49%By^p!BF$?Wup2iV&fcu*gR6&i}VG1^aG3ql^ za_4Xx53r1Expg}+ck0cf-NR#%dBrFU8gL#Vc0ogLnd$d8unaEH`OTS}zACG>a zaT_YqI^SrQ>qN(O0!2Kg|4}^Y@N~K53+Vq7%Ci?(`3-9_ZcxN^YBSVJFkpmUwswCr z=x2lePS9J_hfzTlHdzWnXteqrd`JBp0k4y{jV*+9Z0h(z$1^56ybR7XSbN diff --git a/Sources/target/classes/allin/routing/UserRouterKt.class b/Sources/target/classes/allin/routing/UserRouterKt.class deleted file mode 100644 index 1b2e451496dbb211027ce605392ffde2463d1e8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2733 zcma)8TT|Oc6#mvWmaP~N<`QtyTxnuRf=rsWX>rm}7aBJXNr8}1dRxrm$d)Clm1%g( zPwDijk8OAeQ)W6$9{Zy@J!?C)EJG*ESbO$d_B*%T!{7h>`4@m&_?aQYZQF88&u#dY zQ!$@N;Vly_ya&Dp#$Z(WE;nsXvPYX$Q6_GbAyE;&Qk4wp>{O|#LkHMq$&&sY!<8Op zzSIJ$yIaC;!pz+z#mgnvtC&^cZ+hHvq{$t}^|^1kL@&AiQp2`MtFO_*GQvnHB%vn} z!6}A8@@dtr3Fjeqctv;&XUU5es`5>mK`EV@^1HM%C+ns#2t&aPwP2P-MZ73H7vXK$3HQepj5#G_hFczj9|{-tb%!uLGKit;aaw2 zxn|9GJ(KdiD?F3$?ATVhSr2o*L(fgEF~sx!b4%V$;3C7hn(M1Js_xcJ%c1UZxNR04 z-=msZWvSsZ!)RG0tXHEVHcWp#e3u)y%PAC7DHE<;MvHC#_(8aKM5+ip1JR(meCDFQJWE`&1o7C~Jm z@?YJiSq81mW~jb%u1kU39)mtN6)su`nnL*iw{+aZhjg7MRnY>WGQ6`Rl*xRVs%-gp z8KPO$1H+x0Kks>bPhEcv)Q$0cQ!j-(_*6$8WHHduZK>U37(eNHYWSStdMKx5*V(oz z=6#olKsOeeYz<#9Tr9hF)8E?>l5Y#Mt>2O_@-j8{o`yw+nCv%M7zU zg=qVKe7wyYaR;k93V0IAWbjqd@Knb$Re-K!2VVpY-{{y-DwClH_Jmh^=xt9v6h7bL zKBtOD>bp@IDolNn>H`K=Q$&P>FDymnh}xoS@XOK5oPP9DkBmq3NFv(18W%e}gLFvm z=w(JXhBA>{dODIDzBFVIBa&lpevK!TES88EQR2pk+1Fvl4UL!yVkSFG-8gmWw2{gr z(y??TH<0V^hz1Sg&2RA$<>yVNLP+<{E$W75+uqiw`nKor_mK^CO&~r@F~$M_$_Gk1@ec;ufN7;N0{G7>JWwX zLoBQx;K6$O;Q=1M#>#7~?IV4NXQZ~ikMTon5cTao&M7BaDIcSvsFdsU>!(y*rT;-@ zsi0B##Men{npR*O4f;k<$1bf^;(t$;KWrdc#E(VrA~sPjl5?VnZB#bEB%Z_Cz^KF- qiL(+D5*ewsV-mv>BNBrWhD5)_fJ9QFDp8Z@lZZ>4Z*Ff(*#83liLL|y diff --git a/Sources/target/classes/allin/serializer/DateSerializer.class b/Sources/target/classes/allin/serializer/DateSerializer.class deleted file mode 100644 index b3567d9db15eab986a77b8ea1eda8cbe18f066c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3623 zcmbVO*-{%v6g@p?83}=fSOOT^U=tg}G8p3x5hs|%$bjr1La<4k4AK||q!FGT5$tSa z-}9Ic$WxwDi7VccsubnNd{ip8X9h{gP;#s)P51P4pL_1P_jdO`|Ni+mfFbG~ArmAFAV@0{Pyr!kB*vxv)qJ>+9m8zxZ3}w2w za>QAbxAcsS8M_o?2$uu-;bG{g28)TVVK-I<)9izlx5QOh956Uq6}#MlJGg#+BHgcA!PjJg00 zA;O^iPcD8mFr2Nt$dP!w=+d<1M-xL!!L#xi40pRqLYTBn-B>v&ga`T<>wXSZ%1x6Z z&1ebYCA2aGi`Wc9FNW5JBLPS_%Ft@(lBI1~N>a~mWHgZllQ}c1k{<00^>^vlH#^&x zPPb1@4QI2%oXa@An}l{^&g4>RM)RYSvTJhA34Wv`ah>nv#7UeA;AM0%oZ3%Hn@R~{ z%t_E_5FO}Y2;8=5S(?ev=D_dEn+)}#U-+j`R$Hq&r{b8YP@+^;H7lA`Ob9B2t`~|G z!-<)kxuUFT*0QPU23J(W$XRx2b0v|p68TJq%!SCDBed<&QL=V$ENFf;#eH{2VHoZ@ zAo7}#%B3kYm2r(ann?*))KvtRp!{j)n~Y(GqfW6XYnxd`H;9X&W|X)g(wplk?#Bp2 zV`^1Pt-IW>tEQUOY|?wexVx#@=Im|Gtq~E%OL#SiSMVCc$^DD7oVOpBNh61-gTv6U zt5GR>2;-Qj#uz3Uyc?>?HHOZ8((4%=LYP8a6B1WpyI*e%2P@{gqv6r0=-3%C>4YfqEuiv@FL8&@Qw)cyOqQ2()VMT zz#Y1~I_?24$)Pl~YNT-cIYiwRhxVy*eHcb6YFk!2wkWQbAzZ-4AZ;$|46jrK+U4Pp zD8&(Bs@+?eei$Ll;|+nnu{WJu;|#|SD0}C~5O)u%Z<)e8mQguve0A=8WmdCPN>-IV zOWDmTy1Fp&2#5z57`Y>D>EdmGdg;>)zwT@g1*K-G_?O+jT;+_(9=qMy4oYDuC>k+a zmSlhP&i0@j@kFEnX@Fh!KKXCh6|6E;IrVoMQU@%<$^cNo;`%-#PY`**NFC~{Ml7Ku8 z*e61tx}j5DI5!xQOYD$EE&JCk+6(6LhNWkHV8*Bl84k_phL*@@ zmo;-gXh1 zgVZvdp{uiG+fnFEeDg;Cz_H(`;{XYwAduo>ue-R^jXIpe`F(%}%7MZafat!8i>R_0 z-J(`hLR(KH_86l*PjH1{mgo)iKE(8m$n0ZWFXD@G^^vbNXs~Ux)7l!ky}ph)`a&o! zZP6P>lH4kF;2WCZ7XpZ&Fj4-lH+QHNQg-x2-Xs#eksI`MIlP_d>3a;d?+I2U6t%A< z%i^loh!(V?)n*eVkVYC6Y=lo81vVX6z^W~B2Nt1|Il-kyDsUl2;Zc%hjYdR54AT_h zkT2Tv5SgL?PNYJ%xh7{u!HCasnQ-Qjb#bPMh@cXT_Vn%`_YilAE|g*kA!$|tD_9^L zB*G?H^5R>22Gt)q`5C$W9lcAm?t8oa96wMi_~&Wv<`SyncrT8vIPT&eb@6^2AK=3! zFpiJ#@e&$2206AlbWX=H+BlAIoZ%Sa=;P?;ILC3G;{wMpN0MWn;}ebrj#Z9Dj!*5- MR+BwWe=7z3Km8M}r~m)} diff --git a/Sources/target/classes/allin/utils/CryptManager.class b/Sources/target/classes/allin/utils/CryptManager.class deleted file mode 100644 index 30d34fdda670463fb609f1f0741e0afb5ac56931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1717 zcmah}OHhg20~g>LujC$DXcC=H8Qf~>dGY9 zvFZ=$s*5h#nKosz=rCFKM|E6|xBaTqxXv)#vcs*UK?67B zB;UtP+SVZ#huvok_XnvG;7h13x(s}XTXHW2Vu{fT<#M^0L5X2@u(7r0-M|)tCe`3> z&o;0S7k!%&MZdgg^cU7Io3v1oW#3`QU)&AD==la8+0oAx&F|mSxNLsA44L!X43@~^ zfxY%akGuc7f@CShT?6;=iCn>_3}f|V=Nop&4|vGwhfq4lDY{lnezNid26jaL=Z>^0 zq#aOWKc1ZwbY)7>74z&wS29u=A*qs7bm^iqDa>JcI(2rks8ra>(CeQx3RoX8Gc!sh zyQrBu$>H@$(;%5Uw@HqWtv;PLQ#1P9P)VI)6}6&Lc7{-A)Qo1PU;nI)%4!ywtno_R zN|}D&@|MfP@BN^&^P+1rWTVmE=3R$IA6=T{aVQ_r9adNA+R#DW@$AiBXWtHX_`XY? zeBEzyx4{EP+KKb#)1DVP9lPcoJHjFV+e`4Uf4vy=ZNC>Z?Z=J;noe>WamGL(?$86E zMkCIH-UHH9YK5L6`hHE;GM!U*FiL+SQ#!@SAISekwt_l+M<6$%$ybZs91R;XGLFYP z7$<8C6Ol(^S#%k{rbrp1r~IRYZkMF&EumY; ze@vtc38CaZMfDdt@3&we7g5c{c^9Z8=@Ly?iAZyDtdcbTDtHostz(Pi9(fHLT(h1qiI+@g7Wpae*%dG=b4b`AT3yzz~>>%xQtU0{0?)Nuc%y DOvQb} diff --git a/Sources/target/classes/allin/utils/RegexChecker.class b/Sources/target/classes/allin/utils/RegexChecker.class deleted file mode 100644 index fc9cecff4c559270f1c4d6d901e4375efe0049c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1249 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 S@uG{DeC2|RYc6iOSpF}U@mhZX diff --git a/Sources/target/classes/application.conf b/Sources/target/classes/application.conf deleted file mode 100644 index 1b4a12c..0000000 --- a/Sources/target/classes/application.conf +++ /dev/null @@ -1,4 +0,0 @@ -secret="secret" -issuer="http://0.0.0.0:8080/" -audience="http://0.0.0.0:8080/" -realm="Access to main page" \ No newline at end of file diff --git a/Sources/target/classes/logback.xml b/Sources/target/classes/logback.xml deleted file mode 100644 index 3e11d78..0000000 --- a/Sources/target/classes/logback.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/Sources/target/test-classes/META-INF/allin-api.kotlin_module b/Sources/target/test-classes/META-INF/allin-api.kotlin_module deleted file mode 100644 index 1e9f2ca4d180a083a06174d407c30581ce729120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24 YcmZQzU|?ooU|Bb5Ph=;C!8n;et@5ijhZNEOe{1eYGOiynkb>6THvB9#~oo8V##l@vb8d? zFvQXyWt>GTWAkR_&E(CS`TTl&2XKIO!h#G#6_rkVy->BJQE^lYw3z}C{0BLdrBFt9 zrR(NH&|=mhxW_6|=7ivEZq+kL!u62A6d_^ml_nIb|0*64a@9_3?6S+i$hI_+Infxoo#%*y?%Q4hY$*ih`>_w;A+nvKcayuf{DI)@5JW`j_-><3Ya_TqrxS zbTf#I>IQYC6_1=oQEVn})7XRHPyF6sAH!CbxGdS5I3~AWk$T}oV42aj0S7CLnV$iq x;Z6Fh6D(ql<01E^SuWFnQ^8CHvlV3FbBbIAdCWCH8uM6aAfe%DENZwKg>U9JVqO3M -- 2.36.3 From 9e8b42d8626520667996d34231e2b40939a04d9e Mon Sep 17 00:00:00 2001 From: luevard Date: Mon, 15 Jan 2024 22:23:56 +0100 Subject: [PATCH 06/31] :sparkles: Try to add database container --- Sources/src/main/kotlin/allin/Application.kt | 8 ++++++++ Sources/src/main/kotlin/allin/routing/UserRouter.kt | 2 -- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 657f576..f8fecef 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -14,6 +14,13 @@ import io.ktor.server.config.* import io.ktor.server.engine.* import io.ktor.server.netty.* import io.ktor.server.plugins.contentnegotiation.* +import org.ktorm.database.Database + +val db_database=System.getenv().get("POSTGRES_DB") +val db_user=System.getenv().get("POSTGRES_USER") +val db_password=System.getenv().get("POSTGRES_PASSWORD") +val database = Database.connect("jdbc:postgresql:$db_database", user = db_user, password = db_password) + fun main() { embeddedServer(Netty, port = 8080, host = "0.0.0.0") { @@ -24,6 +31,7 @@ fun main() { private fun Application.extracted() { val config = HoconApplicationConfig(ConfigFactory.load()) val tokenManager = TokenManager.getInstance(config) + println("jdbc:postgresql:$db_database$db_user$db_password") authentication { jwt { verifier(tokenManager.verifyJWTToken()) diff --git a/Sources/src/main/kotlin/allin/routing/UserRouter.kt b/Sources/src/main/kotlin/allin/routing/UserRouter.kt index b89af65..4a70e06 100644 --- a/Sources/src/main/kotlin/allin/routing/UserRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/UserRouter.kt @@ -24,8 +24,6 @@ val RegexCheckerUser = AppConfig.regexChecker val CryptManagerUser = AppConfig.cryptManager val tokenManagerUser = AppConfig.tokenManager const val DEFAULT_COINS = 500 -val database = Database.connect("jdbc:postgresql://localhost:5432/Allin", user = "postgres", password = "lulu") - fun Application.UserRouter() { routing { -- 2.36.3 From f56b113bcf083711c2753a1b3aceea230fbf4a82 Mon Sep 17 00:00:00 2001 From: luevard Date: Mon, 15 Jan 2024 22:26:14 +0100 Subject: [PATCH 07/31] :sparkles: Modify dependency --- Sources/src/main/kotlin/allin/entities/UserEntity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index e1ba032..0a54305 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -1,8 +1,8 @@ package allin.entities +import allin.database import allin.dto.UserDTO import allin.model.User -import allin.routing.database import org.ktorm.dsl.* import org.ktorm.entity.* import org.ktorm.schema.Table -- 2.36.3 From e999ee2c8be19498b0793b127805591e6fdd5e72 Mon Sep 17 00:00:00 2001 From: luevard Date: Mon, 15 Jan 2024 22:39:53 +0100 Subject: [PATCH 08/31] :sparkles: Try to see env variable --- Sources/src/main/kotlin/allin/Application.kt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index f8fecef..e8b9cdd 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -19,19 +19,25 @@ import org.ktorm.database.Database val db_database=System.getenv().get("POSTGRES_DB") val db_user=System.getenv().get("POSTGRES_USER") val db_password=System.getenv().get("POSTGRES_PASSWORD") -val database = Database.connect("jdbc:postgresql:$db_database", user = db_user, password = db_password) - - +var database : Database = instanceBD() fun main() { embeddedServer(Netty, port = 8080, host = "0.0.0.0") { extracted() }.start(wait = true) } +fun instanceBD(): Database{ + try{ + database = Database.connect("jdbc:postgresql:$db_database", user = db_user, password = db_password) + }catch (e:Exception){ + println("jdbc:postgresql:$db_database$db_user$db_password") + } + return database +} + private fun Application.extracted() { val config = HoconApplicationConfig(ConfigFactory.load()) val tokenManager = TokenManager.getInstance(config) - println("jdbc:postgresql:$db_database$db_user$db_password") authentication { jwt { verifier(tokenManager.verifyJWTToken()) -- 2.36.3 From ee3c6db7650f7ac64e0b4365a9154f29906ffdb8 Mon Sep 17 00:00:00 2001 From: Lucas EVARD Date: Mon, 15 Jan 2024 22:54:19 +0100 Subject: [PATCH 09/31] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'.drone.yml'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index ec4c05c..d9aed52 100644 --- a/.drone.yml +++ b/.drone.yml @@ -39,12 +39,14 @@ steps: OVERWRITE: false PRIVATE: false ADMINS: lucasevard,emrekartal,arthurvalin,lucasdelanier - CODEFIRST_CLIENTDRONE_ENV_POSTGRES_PASSWORD: + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_ROOT_PASSWORD: from_secret: db_root_password CODEFIRST_CLIENTDRONE_ENV_POSTGRES_DB: from_secret: db_database CODEFIRST_CLIENTDRONE_ENV_POSTGRES_USER: from_secret: db_user + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_PASSWORD: + from_secret: db_password - name: docker-image image: plugins/docker -- 2.36.3 From ab303027fb93d654a1b02661485812730615e432 Mon Sep 17 00:00:00 2001 From: Emre KARTAL Date: Tue, 16 Jan 2024 08:31:32 +0100 Subject: [PATCH 10/31] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'.drone.yml'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.drone.yml b/.drone.yml index d9aed52..a468b58 100644 --- a/.drone.yml +++ b/.drone.yml @@ -67,6 +67,12 @@ steps: CONTAINERNAME: api COMMAND: create OVERWRITE: true + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_DB: + from_secret: db_database + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_USER: + from_secret: db_user + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_PASSWORD: + from_secret: db_password ADMINS: lucasevard,emrekartal,arthurvalin,lucasdelanier depends_on: [docker-image] -- 2.36.3 From c52414ab126dd654a973031cb411731a49d7cce7 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 09:58:47 +0100 Subject: [PATCH 11/31] :sparkles: Change connection string --- Sources/src/main/kotlin/allin/Application.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index e8b9cdd..9939e42 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -28,7 +28,7 @@ fun main() { fun instanceBD(): Database{ try{ - database = Database.connect("jdbc:postgresql:$db_database", user = db_user, password = db_password) + database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) }catch (e:Exception){ println("jdbc:postgresql:$db_database$db_user$db_password") } -- 2.36.3 From 62f3f6a0b9569cb9ac1d5f6b33d68f2fe82e1c1a Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 10:01:27 +0100 Subject: [PATCH 12/31] :sparkles: Change connection string --- Sources/src/main/kotlin/allin/Application.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 9939e42..8fd68a4 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -28,7 +28,7 @@ fun main() { fun instanceBD(): Database{ try{ - database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) + database = Database.connect("jdbc:postgresql://$db_database/", user = db_user, password = db_password) }catch (e:Exception){ println("jdbc:postgresql:$db_database$db_user$db_password") } -- 2.36.3 From f9456dc0c2b2c807c63552cfebe3ad024c1e0b51 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 12:37:11 +0100 Subject: [PATCH 13/31] :sparkles: Change connection string --- Sources/src/main/kotlin/allin/Application.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 8fd68a4..e45ff32 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -28,9 +28,9 @@ fun main() { fun instanceBD(): Database{ try{ - database = Database.connect("jdbc:postgresql://$db_database/", user = db_user, password = db_password) + database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) }catch (e:Exception){ - println("jdbc:postgresql:$db_database$db_user$db_password") + //println("jdbc:postgresql://$db_database$db_user$db_password") } return database } -- 2.36.3 From 5c4daf2671369f565efda74fdb87a7dd15dbc62e Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 16:06:40 +0100 Subject: [PATCH 14/31] :sparkles: Add databaseUtil for add table manually --- Sources/src/main/kotlin/allin/Application.kt | 15 +++++---------- .../src/main/kotlin/allin/entities/UserEntity.kt | 10 +++++++++- .../src/main/kotlin/allin/utils/DatabaseUtil.kt | 12 ++++++++++++ 3 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index e45ff32..e745555 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -1,5 +1,7 @@ package allin +import allin.entities.UserEntity +import allin.entities.UsersEntity import allin.routing.BasicRouting import allin.routing.BetRouter import allin.routing.ParticipationRouter @@ -19,22 +21,14 @@ import org.ktorm.database.Database val db_database=System.getenv().get("POSTGRES_DB") val db_user=System.getenv().get("POSTGRES_USER") val db_password=System.getenv().get("POSTGRES_PASSWORD") -var database : Database = instanceBD() +val database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) + fun main() { embeddedServer(Netty, port = 8080, host = "0.0.0.0") { extracted() }.start(wait = true) } -fun instanceBD(): Database{ - try{ - database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) - }catch (e:Exception){ - //println("jdbc:postgresql://$db_database$db_user$db_password") - } - return database -} - private fun Application.extracted() { val config = HoconApplicationConfig(ConfigFactory.load()) val tokenManager = TokenManager.getInstance(config) @@ -56,4 +50,5 @@ private fun Application.extracted() { UserRouter() BetRouter() ParticipationRouter() + UsersEntity.createUserTable() } diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index 0a54305..765c0a3 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -3,8 +3,10 @@ package allin.entities import allin.database import allin.dto.UserDTO import allin.model.User +import allin.utils.Execute import org.ktorm.dsl.* import org.ktorm.entity.* +import org.ktorm.expression.SqlExpression import org.ktorm.schema.Table import org.ktorm.schema.double import org.ktorm.schema.int @@ -20,7 +22,7 @@ object UsersEntity : Table("utilisateur") { val id = int("id").primaryKey() val username = varchar("username") val password = varchar("password") - val nbCoins = double("nbCoins") + val nbCoins = double("coins") val email = varchar("email") fun getUserToUserDTO(): MutableList { @@ -34,6 +36,12 @@ object UsersEntity : Table("utilisateur") { }.toMutableList() } + fun createUserTable(){ + val request="CREATE TABLE IF not exists utilisateur ( id SERIAL PRIMARY KEY, username VARCHAR(255), password VARCHAR(255),coins double precision,email VARCHAR(255))" + database.Execute(request) + } + + fun getUserByUsernameAndPassword(login: String): Pair { return database.from(UsersEntity) .select() diff --git a/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt new file mode 100644 index 0000000..5130ce3 --- /dev/null +++ b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt @@ -0,0 +1,12 @@ +package allin.utils + +import allin.database +import org.ktorm.database.Database + +fun Database.Execute(request: String){ + database.useTransaction { + val connection = it.connection + connection.prepareStatement(request).execute() + connection.commit() + } +} \ No newline at end of file -- 2.36.3 From 58e46a1793636449fb094a6c150fe862db51535e Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 16:49:23 +0100 Subject: [PATCH 15/31] :sparkles: Try new host name --- Sources/src/main/kotlin/allin/Application.kt | 5 +++-- Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt | 11 ++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index e745555..9e5f881 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -1,6 +1,5 @@ package allin -import allin.entities.UserEntity import allin.entities.UsersEntity import allin.routing.BasicRouting import allin.routing.BetRouter @@ -21,7 +20,9 @@ import org.ktorm.database.Database val db_database=System.getenv().get("POSTGRES_DB") val db_user=System.getenv().get("POSTGRES_USER") val db_password=System.getenv().get("POSTGRES_PASSWORD") -val database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) +val db_host=System.getenv().get("POSTGRES_HOST") + +val database = Database.connect("jdbc:postgresql://AllDev-postgresapi/$db_database", user = db_user, password = db_password) fun main() { embeddedServer(Netty, port = 8080, host = "0.0.0.0") { diff --git a/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt index 5130ce3..033afe4 100644 --- a/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt +++ b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt @@ -4,9 +4,10 @@ import allin.database import org.ktorm.database.Database fun Database.Execute(request: String){ - database.useTransaction { - val connection = it.connection - connection.prepareStatement(request).execute() - connection.commit() - } + if(!request.isNullOrEmpty()) + database.useTransaction { + val connection = it.connection + connection.prepareStatement(request).execute() + connection.commit() + } } \ No newline at end of file -- 2.36.3 From 221c2a4d83c73b1f84dbb279a91506c7bce926b0 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Thu, 11 Jan 2024 09:55:41 +0100 Subject: [PATCH 16/31] :sparkles: Add database for local usage --- Sources/pom.xml | 5 +++++ Sources/src/main/kotlin/allin/entities/UserEntity.kt | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Sources/pom.xml b/Sources/pom.xml index 0d8b30f..c569b14 100644 --- a/Sources/pom.xml +++ b/Sources/pom.xml @@ -32,6 +32,11 @@ ktor-server-core-jvm ${ktor_version} + + org.postgresql + postgresql + 42.7.1 + io.ktor ktor-server-netty-jvm diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index d8f0996..0500cf5 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -1,11 +1,12 @@ package allin.entities import org.ktorm.schema.Table +import org.ktorm.schema.double import org.ktorm.schema.int import org.ktorm.schema.varchar - -object UserEntity : Table("user") { +object UserEntity : Table("utilisateur") { val id = int("id").primaryKey() val username = varchar("username") val password = varchar("password") + val nbCoins = double("nbCoins") } \ No newline at end of file -- 2.36.3 From 95351233b9c9ec96892d8f7766160aeff96db4e6 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Mon, 15 Jan 2024 13:34:26 +0100 Subject: [PATCH 17/31] :sparkles: Local Database link --- Sources/src/main/kotlin/allin/dto/UserDTO.kt | 13 +-- .../main/kotlin/allin/entities/UserEntity.kt | 63 +++++++++++- .../main/kotlin/allin/routing/UserRouter.kt | 97 +++++++++++-------- .../main/kotlin/allin/utils/CryptManager.kt | 16 ++- .../main/kotlin/allin/utils/TokenManager.kt | 20 ++++ 5 files changed, 150 insertions(+), 59 deletions(-) diff --git a/Sources/src/main/kotlin/allin/dto/UserDTO.kt b/Sources/src/main/kotlin/allin/dto/UserDTO.kt index d59f39c..a440450 100644 --- a/Sources/src/main/kotlin/allin/dto/UserDTO.kt +++ b/Sources/src/main/kotlin/allin/dto/UserDTO.kt @@ -1,15 +1,4 @@ package allin.dto - -import allin.model.User import kotlinx.serialization.Serializable - @Serializable -data class UserDTO(val username: String,val email: String, val nbCoins: Int) -@Serializable -data class UserDTOWithToken(val username: String,val email: String, val nbCoins: Int, val token:String?) -fun convertUserToUserDTO(user: User): UserDTO { - return UserDTO(user.username, user.email, user.nbCoins) -} -fun convertUserToUserDTOToken(user: User): UserDTOWithToken { - return UserDTOWithToken(user.username, user.email, user.nbCoins,user.token) -} +data class UserDTO(val username: String, val email: String, val nbCoins: Double, var token:String?) diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index 0500cf5..e1ba032 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -1,12 +1,71 @@ package allin.entities +import allin.dto.UserDTO +import allin.model.User +import allin.routing.database +import org.ktorm.dsl.* +import org.ktorm.entity.* import org.ktorm.schema.Table import org.ktorm.schema.double import org.ktorm.schema.int import org.ktorm.schema.varchar -object UserEntity : Table("utilisateur") { + +interface UserEntity : Entity { + val username: String + var email: String + var password: String + var nbCoins: Double +} +object UsersEntity : Table("utilisateur") { val id = int("id").primaryKey() val username = varchar("username") val password = varchar("password") val nbCoins = double("nbCoins") -} \ No newline at end of file + val email = varchar("email") + + fun getUserToUserDTO(): MutableList { + return database.from(UsersEntity).select().map { + row -> UserDTO( + row[username].toString(), + row[email].toString(), + row[nbCoins]?:0.0, + null + ) + }.toMutableList() + } + + fun getUserByUsernameAndPassword(login: String): Pair { + return database.from(UsersEntity) + .select() + .where { (username eq login) /*and (password eq passwordParam)*/ } + .map { row -> + Pair( + UserDTO( + row[username].toString(), + row[email].toString(), + row[nbCoins] ?: 0.0, + null + ), + row[password].toString() + ) + } + .firstOrNull() ?: Pair(null, null) + } + + fun addUserEntity(user : User){ + database.insert(UsersEntity){ + set(it.nbCoins,user.nbCoins) + set(it.username,user.username) + set(it.password,user.password) + set(it.email,user.email) + } + } + fun deleteUserByUsername(username: String): Boolean { + val deletedCount = database.delete(UsersEntity) { + it.username eq username + } + return deletedCount > 0 + } +} + + diff --git a/Sources/src/main/kotlin/allin/routing/UserRouter.kt b/Sources/src/main/kotlin/allin/routing/UserRouter.kt index 18489be..e0e52b1 100644 --- a/Sources/src/main/kotlin/allin/routing/UserRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/UserRouter.kt @@ -1,81 +1,98 @@ package allin.routing -import allin.dto.* +import allin.dto.convertUserToUserDTO +import allin.dto.convertUserToUserDTOToken +import allin.ext.hasToken +import allin.ext.verifyUserFromToken +import allin.model.ApiMessage import allin.model.CheckUser import allin.model.User +import allin.model.UserRequest import allin.utils.AppConfig import io.ktor.http.* import io.ktor.server.application.* import io.ktor.server.auth.* -import io.ktor.server.auth.jwt.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* +import java.util.* +import org.ktorm.database.Database val users = mutableListOf() +val RegexCheckerUser = AppConfig.regexChecker +val CryptManagerUser = AppConfig.cryptManager +val tokenManagerUser = AppConfig.tokenManager +const val DEFAULT_COINS = 500 + val RegexCheckerUser= AppConfig.regexChecker val CryptManagerUser= AppConfig.cryptManager val tokenManagerUser=AppConfig.tokenManager - +val database = Database.connect("jdbc:postgresql://localhost:5432/Allin", user = "postgres", password = "lulu") fun Application.UserRouter() { routing { - route("/users/register"){ + route("/users/register") { post { - val TempUser = call.receive() - if (RegexCheckerUser.isEmailInvalid(TempUser.email)){ - call.respond(HttpStatusCode.Forbidden,"Input a valid mail !") + val tempUser = call.receive() + if (RegexCheckerUser.isEmailInvalid(tempUser.email)) { + call.respond(HttpStatusCode.Forbidden, ApiMessage.InvalidMail) } - val user = users.find { it.username == TempUser.username || it.email == TempUser.email } - if(user == null) { - CryptManagerUser.passwordCrypt(TempUser) - TempUser.token=tokenManagerUser.generateOrReplaceJWTToken(TempUser) - users.add(TempUser) - call.respond(HttpStatusCode.Created, TempUser) + users.find { it.username == tempUser.username || it.email == tempUser.email }?.let { user -> + call.respond(HttpStatusCode.Conflict, ApiMessage.UserAlreadyExist) + } ?: run { + val user = User( + id = UUID.randomUUID().toString(), + username = tempUser.username, + email = tempUser.email, + password = tempUser.password, + nbCoins = DEFAULT_COINS, + token = null + ) + CryptManagerUser.passwordCrypt(user) + user.token = tokenManagerUser.generateOrReplaceJWTToken(user) + users.add(user) + call.respond(HttpStatusCode.Created, user) } - call.respond(HttpStatusCode.Conflict,"Mail or/and username already exist") } } route("/users/login") { post { val checkUser = call.receive() - val user = users.find { it.username == checkUser.login || it.email == checkUser.login } - if (user != null && CryptManagerUser.passwordDecrypt(user,checkUser.password)) { - user.token=tokenManagerUser.generateOrReplaceJWTToken(user) - call.respond(HttpStatusCode.OK, convertUserToUserDTOToken(user)) - } else { - call.respond(HttpStatusCode.NotFound,"Login and/or password incorrect.") - } + users.find { it.username == checkUser.login || it.email == checkUser.login }?.let { user -> + if (CryptManagerUser.passwordDecrypt(user, checkUser.password)) { + user.token = tokenManagerUser.generateOrReplaceJWTToken(user) + call.respond(HttpStatusCode.OK, convertUserToUserDTOToken(user)) + } else { + call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) + } + } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) } } - route("/users/delete") { - post { - val checkUser = call.receive() - val user = users.find { it.username == checkUser.login || it.email == checkUser.login } - if (user != null && user.password == checkUser.password) { - users.remove(user) - call.respond(HttpStatusCode.Accepted,convertUserToUserDTO(user)) - } else { - call.respond(HttpStatusCode.NotFound,"Login and/or password incorrect.") + authenticate { + post("/users/delete") { + hasToken { principal -> + verifyUserFromToken(principal) { user -> + val checkUser = call.receive() + if (user.username == checkUser.login && user.password == checkUser.password) { + users.remove(user) + call.respond(HttpStatusCode.Accepted, convertUserToUserDTO(user)) + } else { + call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) + } + } } } - } - authenticate { get("/users/token") { - val principal = call.principal() - val username = principal!!.payload.getClaim("username").asString() - val user = users.find { it.username == username } - if (user != null) { - call.respond(HttpStatusCode.OK,convertUserToUserDTO(user)) - } else { - call.respond(HttpStatusCode.NotFound, "User not found with the valid token !") + hasToken { principal -> + verifyUserFromToken(principal) { user -> + call.respond(HttpStatusCode.OK, convertUserToUserDTO(user)) + } } } } - } } diff --git a/Sources/src/main/kotlin/allin/utils/CryptManager.kt b/Sources/src/main/kotlin/allin/utils/CryptManager.kt index 216e733..df9f8be 100644 --- a/Sources/src/main/kotlin/allin/utils/CryptManager.kt +++ b/Sources/src/main/kotlin/allin/utils/CryptManager.kt @@ -4,12 +4,18 @@ import allin.model.User import org.mindrot.jbcrypt.BCrypt class CryptManager { - val salt=BCrypt.gensalt() + //val salt=BCrypt.gensalt() + fun passwordCrypt(password : String): String { + return BCrypt.hashpw(password,"\$2a\$10\$42wsdBeoLKaF6SM9oADONe") + } fun passwordCrypt(user: User){ - user.password=BCrypt.hashpw(user.password,salt) - + user.password=BCrypt.hashpw(user.password,"\$2a\$10\$42wsdBeoLKaF6SM9oADONe") } - fun passwordDecrypt(user: User, password: String): Boolean{ - return BCrypt.hashpw(password,salt)==user.password + fun passwordDecrypt(password: String, passwordClear: String): Boolean{ + return BCrypt.hashpw(passwordClear,"\$2a\$10\$42wsdBeoLKaF6SM9oADONe")==password + } + + fun CheckPassword(hashed: String, clear: String): Boolean{ + return BCrypt.checkpw(hashed,clear) } } \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/utils/TokenManager.kt b/Sources/src/main/kotlin/allin/utils/TokenManager.kt index d35ede5..84da76c 100644 --- a/Sources/src/main/kotlin/allin/utils/TokenManager.kt +++ b/Sources/src/main/kotlin/allin/utils/TokenManager.kt @@ -41,6 +41,26 @@ class TokenManager private constructor(val config: HoconApplicationConfig) { } } + fun generateOrReplaceJWTToken(user: UserDTO): String { + val userToken = getUserToken(user) + if (userToken != null && !isTokenExpired(userToken)) { + return userToken + } else { + return generateJWTToken(user) + } + } + + fun generateJWTToken(user : UserDTO): String { + val expirationDate = System.currentTimeMillis() + 604800000 // une semaine en miliseconde + val token = JWT.create() + .withAudience(audience) + .withIssuer(issuer) + .withClaim("username", user.username) + .withExpiresAt(Date(expirationDate)) + .sign(Algorithm.HMAC256(secret)) + return token + } + fun isTokenExpired(token: String): Boolean { val expirationTime = JWT.decode(token).expiresAt.time return System.currentTimeMillis() > expirationTime -- 2.36.3 From ec69c88e1419702e0c9ee1b8be92d2350869da48 Mon Sep 17 00:00:00 2001 From: "arthur.valin" Date: Mon, 15 Jan 2024 16:58:59 +0100 Subject: [PATCH 18/31] Start bet participations and refactoring --- .gitignore | 4 +- .../kotlin/allin/ext/PipelineContextExt.kt | 24 ++++ .../src/main/kotlin/allin/model/ApiMessage.kt | 14 +++ .../main/kotlin/allin/routing/BetRouter.kt | 109 +++++++++++------- .../allin/routing/ParticipationRouter.kt | 56 +++++++++ .../main/kotlin/allin/routing/UserRouter.kt | 51 ++++---- .../main/kotlin/allin/utils/TokenManager.kt | 21 ++-- .../classes/META-INF/allin-api.kotlin_module | Bin 132 -> 0 bytes .../allin/ApplicationKt$extracted$1$1$1.class | Bin 4041 -> 0 bytes .../allin/ApplicationKt$extracted$1$1.class | Bin 2618 -> 0 bytes .../allin/ApplicationKt$extracted$1.class | Bin 2007 -> 0 bytes .../allin/ApplicationKt$extracted$2.class | Bin 1928 -> 0 bytes .../classes/allin/ApplicationKt$main$1.class | Bin 1543 -> 0 bytes .../target/classes/allin/ApplicationKt.class | Bin 3163 -> 0 bytes .../allin/dto/UserDTO$$serializer.class | Bin 5508 -> 0 bytes .../classes/allin/dto/UserDTO$Companion.class | Bin 1275 -> 0 bytes .../target/classes/allin/dto/UserDTO.class | Bin 5137 -> 0 bytes .../target/classes/allin/dto/UserDTOKt.class | Bin 1390 -> 0 bytes .../dto/UserDTOWithToken$$serializer.class | Bin 6120 -> 0 bytes .../dto/UserDTOWithToken$Companion.class | Bin 1338 -> 0 bytes .../classes/allin/dto/UserDTOWithToken.class | Bin 6105 -> 0 bytes .../classes/allin/entities/UserEntity.class | Bin 2022 -> 0 bytes .../classes/allin/model/Bet$$serializer.class | Bin 6534 -> 0 bytes .../classes/allin/model/Bet$Companion.class | Bin 1257 -> 0 bytes Sources/target/classes/allin/model/Bet.class | Bin 9414 -> 0 bytes .../allin/model/CheckUser$$serializer.class | Bin 5271 -> 0 bytes .../allin/model/CheckUser$Companion.class | Bin 1300 -> 0 bytes .../classes/allin/model/CheckUser.class | Bin 4635 -> 0 bytes .../model/UpdatedBetData$$serializer.class | Bin 6054 -> 0 bytes .../model/UpdatedBetData$Companion.class | Bin 1334 -> 0 bytes .../classes/allin/model/UpdatedBetData.class | Bin 7171 -> 0 bytes .../allin/model/User$$serializer.class | Bin 6119 -> 0 bytes .../classes/allin/model/User$Companion.class | Bin 1265 -> 0 bytes Sources/target/classes/allin/model/User.class | Bin 7414 -> 0 bytes .../BasicRoutingKt$BasicRouting$1$1.class | Bin 6007 -> 0 bytes .../BasicRoutingKt$BasicRouting$1.class | Bin 1950 -> 0 bytes .../allin/routing/BasicRoutingKt.class | Bin 1144 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$1$1.class | Bin 9372 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$1.class | Bin 1856 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$2$1.class | Bin 10482 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$2.class | Bin 1856 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$3$1.class | Bin 9610 -> 0 bytes .../routing/BetRouterKt$BetRouter$1$3.class | Bin 1856 -> 0 bytes .../routing/BetRouterKt$BetRouter$1.class | Bin 2187 -> 0 bytes .../classes/allin/routing/BetRouterKt.class | Bin 1608 -> 0 bytes .../UserRouterKt$UserRouter$1$1$1.class | Bin 10934 -> 0 bytes .../routing/UserRouterKt$UserRouter$1$1.class | Bin 1865 -> 0 bytes .../UserRouterKt$UserRouter$1$2$1.class | Bin 10232 -> 0 bytes .../routing/UserRouterKt$UserRouter$1$2.class | Bin 1865 -> 0 bytes .../UserRouterKt$UserRouter$1$3$1.class | Bin 9933 -> 0 bytes .../routing/UserRouterKt$UserRouter$1$3.class | Bin 1865 -> 0 bytes .../UserRouterKt$UserRouter$1$4$1.class | Bin 9821 -> 0 bytes .../routing/UserRouterKt$UserRouter$1$4.class | Bin 1909 -> 0 bytes .../routing/UserRouterKt$UserRouter$1.class | Bin 2570 -> 0 bytes .../classes/allin/routing/UserRouterKt.class | Bin 2733 -> 0 bytes .../allin/serializer/DateSerializer.class | Bin 3623 -> 0 bytes .../classes/allin/utils/CryptManager.class | Bin 1717 -> 0 bytes .../classes/allin/utils/RegexChecker.class | Bin 1249 -> 0 bytes .../classes/allin/utils/TokenManager.class | Bin 4571 -> 0 bytes Sources/target/classes/application.conf | 4 - Sources/target/classes/logback.xml | 12 -- .../META-INF/allin-api.kotlin_module | Bin 24 -> 0 bytes .../test-classes/allin/ApplicationTest.class | Bin 486 -> 0 bytes 63 files changed, 205 insertions(+), 90 deletions(-) create mode 100644 Sources/src/main/kotlin/allin/ext/PipelineContextExt.kt create mode 100644 Sources/src/main/kotlin/allin/model/ApiMessage.kt create mode 100644 Sources/src/main/kotlin/allin/routing/ParticipationRouter.kt delete mode 100644 Sources/target/classes/META-INF/allin-api.kotlin_module delete mode 100644 Sources/target/classes/allin/ApplicationKt$extracted$1$1$1.class delete mode 100644 Sources/target/classes/allin/ApplicationKt$extracted$1$1.class delete mode 100644 Sources/target/classes/allin/ApplicationKt$extracted$1.class delete mode 100644 Sources/target/classes/allin/ApplicationKt$extracted$2.class delete mode 100644 Sources/target/classes/allin/ApplicationKt$main$1.class delete mode 100644 Sources/target/classes/allin/ApplicationKt.class delete mode 100644 Sources/target/classes/allin/dto/UserDTO$$serializer.class delete mode 100644 Sources/target/classes/allin/dto/UserDTO$Companion.class delete mode 100644 Sources/target/classes/allin/dto/UserDTO.class delete mode 100644 Sources/target/classes/allin/dto/UserDTOKt.class delete mode 100644 Sources/target/classes/allin/dto/UserDTOWithToken$$serializer.class delete mode 100644 Sources/target/classes/allin/dto/UserDTOWithToken$Companion.class delete mode 100644 Sources/target/classes/allin/dto/UserDTOWithToken.class delete mode 100644 Sources/target/classes/allin/entities/UserEntity.class delete mode 100644 Sources/target/classes/allin/model/Bet$$serializer.class delete mode 100644 Sources/target/classes/allin/model/Bet$Companion.class delete mode 100644 Sources/target/classes/allin/model/Bet.class delete mode 100644 Sources/target/classes/allin/model/CheckUser$$serializer.class delete mode 100644 Sources/target/classes/allin/model/CheckUser$Companion.class delete mode 100644 Sources/target/classes/allin/model/CheckUser.class delete mode 100644 Sources/target/classes/allin/model/UpdatedBetData$$serializer.class delete mode 100644 Sources/target/classes/allin/model/UpdatedBetData$Companion.class delete mode 100644 Sources/target/classes/allin/model/UpdatedBetData.class delete mode 100644 Sources/target/classes/allin/model/User$$serializer.class delete mode 100644 Sources/target/classes/allin/model/User$Companion.class delete mode 100644 Sources/target/classes/allin/model/User.class delete mode 100644 Sources/target/classes/allin/routing/BasicRoutingKt$BasicRouting$1$1.class delete mode 100644 Sources/target/classes/allin/routing/BasicRoutingKt$BasicRouting$1.class delete mode 100644 Sources/target/classes/allin/routing/BasicRoutingKt.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$2$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$2.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1.class delete mode 100644 Sources/target/classes/allin/routing/BetRouterKt.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$2$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$2.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$3$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$3.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$4$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$4.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1.class delete mode 100644 Sources/target/classes/allin/routing/UserRouterKt.class delete mode 100644 Sources/target/classes/allin/serializer/DateSerializer.class delete mode 100644 Sources/target/classes/allin/utils/CryptManager.class delete mode 100644 Sources/target/classes/allin/utils/RegexChecker.class delete mode 100644 Sources/target/classes/allin/utils/TokenManager.class delete mode 100644 Sources/target/classes/application.conf delete mode 100644 Sources/target/classes/logback.xml delete mode 100644 Sources/target/test-classes/META-INF/allin-api.kotlin_module delete mode 100644 Sources/target/test-classes/allin/ApplicationTest.class diff --git a/.gitignore b/.gitignore index c426c32..f0d8881 100644 --- a/.gitignore +++ b/.gitignore @@ -33,4 +33,6 @@ out/ /.nb-gradle/ ### VS Code ### -.vscode/ \ No newline at end of file +.vscode/ + +**/src/target/** \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/ext/PipelineContextExt.kt b/Sources/src/main/kotlin/allin/ext/PipelineContextExt.kt new file mode 100644 index 0000000..e111f9b --- /dev/null +++ b/Sources/src/main/kotlin/allin/ext/PipelineContextExt.kt @@ -0,0 +1,24 @@ +package allin.ext + +import allin.dto.UserDTO +import allin.entities.UsersEntity +import allin.model.ApiMessage +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.auth.* +import io.ktor.server.auth.jwt.* +import io.ktor.server.response.* +import io.ktor.util.pipeline.* + +suspend fun PipelineContext<*, ApplicationCall>.hasToken(content: suspend (principal: JWTPrincipal) -> Unit) = + call.principal()?.let { content(it) } ?: call.respond(HttpStatusCode.Unauthorized) + +suspend fun PipelineContext<*, ApplicationCall>.verifyUserFromToken( + principal: JWTPrincipal, + content: suspend (user: UserDTO, password: String) -> Unit +) { + val username = principal.payload.getClaim("username").asString() + val userPassword = UsersEntity.getUserByUsernameAndPassword(username) + userPassword.first?.let { content(it, userPassword.second ?: "") } + ?: call.respond(HttpStatusCode.NotFound, ApiMessage.TokenUserNotFound) +} \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/model/ApiMessage.kt b/Sources/src/main/kotlin/allin/model/ApiMessage.kt new file mode 100644 index 0000000..9f47ea3 --- /dev/null +++ b/Sources/src/main/kotlin/allin/model/ApiMessage.kt @@ -0,0 +1,14 @@ +package allin.model + +object ApiMessage { + const val Welcome = "Welcome on AllIn's API !" + const val TokenUserNotFound = "User not found with the valid token !" + const val UserNotFound = "User not found." + const val BetNotFound = "Bet not found." + const val BetAlreadyExist = "Bet already exists." + const val IncorrectLoginPassword = "Login and/or password incorrect." + const val UserAlreadyExist = "Mail and/or username already exists." + const val InvalidMail = "Invalid mail." + const val ParticipationNotFound = "Participation not found." + const val NotEnoughCoins = "Not enough coins." +} \ 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 997cee5..6d7cb79 100644 --- a/Sources/src/main/kotlin/allin/routing/BetRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/BetRouter.kt @@ -1,65 +1,96 @@ package allin.routing -import io.ktor.server.application.* -import io.ktor.server.request.* -import io.ktor.server.routing.* -import allin.model.* + +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.* +import io.ktor.server.application.* +import io.ktor.server.auth.* +import io.ktor.server.request.* import io.ktor.server.response.* +import io.ktor.server.routing.* +import java.util.* val bets = mutableListOf() -val tokenManagerBet= AppConfig.tokenManager +val tokenManagerBet = AppConfig.tokenManager -fun CreateId() : Int{ - return bets.size -} - -fun Application.BetRouter(){ - routing{ - route("/bets/add"){ - post{ +fun Application.BetRouter() { + routing { + route("/bets/add") { + post { val bet = call.receive() - val id = CreateId() + val id = UUID.randomUUID().toString() val username = tokenManagerBet.getUsernameFromToken(bet.createdBy) - val findbet = bets.find { it.id == id } - if(findbet==null){ - val betWithId = convertBetWithoutIdToBet(bet,id,username) + bets.find { it.id == id }?.let { + call.respond(HttpStatusCode.Conflict, ApiMessage.BetAlreadyExist) + } ?: run { + val betWithId = Bet( + id, + bet.theme, + bet.sentenceBet, + bet.endRegistration, + bet.endBet, + bet.isPrivate, + bet.response, + username + ) bets.add(betWithId) call.respond(HttpStatusCode.Created, betWithId) } - call.respond(HttpStatusCode.Conflict,"Bet already exist") } } - route("/bets/gets"){ - get{ - // if(bets.size>0) - call.respond(HttpStatusCode.Accepted, bets.toList()) - // else call.respond(HttpStatusCode.NoContent) + + route("/bets/gets") { + get { + // if(bets.size>0) + call.respond(HttpStatusCode.Accepted, bets.toList()) + // else call.respond(HttpStatusCode.NoContent) + } + } + + route("/bets/get/{id}") { + get { + val id = call.parameters["id"] ?: "" + bets.find { it.id == id }?.let { bet -> + call.respond(HttpStatusCode.Accepted, bet) + } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.BetNotFound) } } - route("/bets/delete"){ - post{ - val idbet = call.receive>()["id"] - val findbet = bets.find { it.id == idbet } - if(findbet==null){ - call.respond(HttpStatusCode.NotFound, "Bet doesnt find") - } - bets.remove(findbet) - findbet as Bet - call.respond(HttpStatusCode.Accepted, findbet) + + route("/bets/delete") { + post { + val idbet = call.receive>()["id"] + bets.find { it.id == idbet }?.let { findbet -> + bets.remove(findbet) + call.respond(HttpStatusCode.Accepted, findbet) + } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.BetNotFound) } } - route("bets/update"){ - post{ + route("bets/update") { + post { val updatedBetData = call.receive() - val findbet = bets.find { it.id == updatedBetData.id } - if (findbet == null) { - call.respond(HttpStatusCode.NotFound, "Bet not found") - } else { + bets.find { it.id == updatedBetData.id }?.let { findbet -> findbet.endBet = updatedBetData.endBet findbet.isPrivate = updatedBetData.isPrivate findbet.response = updatedBetData.response call.respond(HttpStatusCode.Accepted, findbet) + } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.BetNotFound) + } + } + + authenticate { + get("/bets/current") { + hasToken { principal -> + verifyUserFromToken(principal) { user, _ -> + val bets = participations + .filter { it.username == user.username } + .mapNotNull { itParticipation -> bets.find { it.id == itParticipation.betId } } + call.respond(HttpStatusCode.OK, bets) + } } } } diff --git a/Sources/src/main/kotlin/allin/routing/ParticipationRouter.kt b/Sources/src/main/kotlin/allin/routing/ParticipationRouter.kt new file mode 100644 index 0000000..16106b3 --- /dev/null +++ b/Sources/src/main/kotlin/allin/routing/ParticipationRouter.kt @@ -0,0 +1,56 @@ +package allin.routing + +import allin.ext.hasToken +import allin.ext.verifyUserFromToken +import allin.model.ApiMessage +import allin.model.Participation +import allin.model.ParticipationRequest +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.auth.* +import io.ktor.server.request.* +import io.ktor.server.response.* +import io.ktor.server.routing.* +import java.util.* + +val participations = mutableListOf() + +fun Application.ParticipationRouter() { + routing { + authenticate { + post("/participations/add") { + hasToken { principal -> + val participation = call.receive() + verifyUserFromToken(principal) { user, _ -> + if (user.nbCoins >= participation.stake) { + participations.add( + Participation( + id = UUID.randomUUID().toString(), + betId = participation.betId, + username = user.username, + answer = participation.answer, + stake = participation.stake + ) + ) + call.respond(HttpStatusCode.Created) + } else { + call.respond(HttpStatusCode.Forbidden, ApiMessage.NotEnoughCoins) + } + } + } + } + delete("/participations/delete") { + hasToken { principal -> + val participationId = call.receive() + participations.find { it.id == participationId }?.let { participation -> + verifyUserFromToken(principal) { user, _ -> + // user.nbCoins += participation.stake + participations.remove(participation) + call.respond(HttpStatusCode.NoContent) + } + } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.ParticipationNotFound) + } + } + } + } +} \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/routing/UserRouter.kt b/Sources/src/main/kotlin/allin/routing/UserRouter.kt index e0e52b1..b89af65 100644 --- a/Sources/src/main/kotlin/allin/routing/UserRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/UserRouter.kt @@ -1,7 +1,9 @@ package allin.routing -import allin.dto.convertUserToUserDTO -import allin.dto.convertUserToUserDTOToken +import allin.entities.UsersEntity.addUserEntity +import allin.entities.UsersEntity.deleteUserByUsername +import allin.entities.UsersEntity.getUserByUsernameAndPassword +import allin.entities.UsersEntity.getUserToUserDTO import allin.ext.hasToken import allin.ext.verifyUserFromToken import allin.model.ApiMessage @@ -15,18 +17,13 @@ import io.ktor.server.auth.* import io.ktor.server.request.* import io.ktor.server.response.* import io.ktor.server.routing.* -import java.util.* import org.ktorm.database.Database +import java.util.* -val users = mutableListOf() val RegexCheckerUser = AppConfig.regexChecker val CryptManagerUser = AppConfig.cryptManager val tokenManagerUser = AppConfig.tokenManager const val DEFAULT_COINS = 500 - -val RegexCheckerUser= AppConfig.regexChecker -val CryptManagerUser= AppConfig.cryptManager -val tokenManagerUser=AppConfig.tokenManager val database = Database.connect("jdbc:postgresql://localhost:5432/Allin", user = "postgres", password = "lulu") fun Application.UserRouter() { @@ -38,6 +35,7 @@ fun Application.UserRouter() { if (RegexCheckerUser.isEmailInvalid(tempUser.email)) { call.respond(HttpStatusCode.Forbidden, ApiMessage.InvalidMail) } + val users = getUserToUserDTO() users.find { it.username == tempUser.username || it.email == tempUser.email }?.let { user -> call.respond(HttpStatusCode.Conflict, ApiMessage.UserAlreadyExist) } ?: run { @@ -51,7 +49,7 @@ fun Application.UserRouter() { ) CryptManagerUser.passwordCrypt(user) user.token = tokenManagerUser.generateOrReplaceJWTToken(user) - users.add(user) + addUserEntity(user) call.respond(HttpStatusCode.Created, user) } } @@ -60,36 +58,41 @@ fun Application.UserRouter() { route("/users/login") { post { val checkUser = call.receive() - users.find { it.username == checkUser.login || it.email == checkUser.login }?.let { user -> - if (CryptManagerUser.passwordDecrypt(user, checkUser.password)) { - user.token = tokenManagerUser.generateOrReplaceJWTToken(user) - call.respond(HttpStatusCode.OK, convertUserToUserDTOToken(user)) - } else { - call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) - } - } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) + val user = getUserByUsernameAndPassword(checkUser.login) + if (CryptManagerUser.passwordDecrypt(user.second ?: "", checkUser.password)) { + user.first?.let { userDtoWithToken -> + userDtoWithToken.token = tokenManagerUser.generateOrReplaceJWTToken(userDtoWithToken) + call.respond(HttpStatusCode.OK, userDtoWithToken) + } ?: call.respond(HttpStatusCode.NotFound, ApiMessage.UserNotFound) + } else { + call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) + } } } authenticate { post("/users/delete") { hasToken { principal -> - verifyUserFromToken(principal) { user -> + verifyUserFromToken(principal) { _, password -> val checkUser = call.receive() - if (user.username == checkUser.login && user.password == checkUser.password) { - users.remove(user) - call.respond(HttpStatusCode.Accepted, convertUserToUserDTO(user)) + + if (CryptManagerUser.passwordDecrypt(password, checkUser.password)) { + if (!deleteUserByUsername(checkUser.login)) { + call.respond(HttpStatusCode.InternalServerError, "This user can't be delete now !") + } + call.respond(HttpStatusCode.Accepted, password) } else { - call.respond(HttpStatusCode.NotFound, ApiMessage.IncorrectLoginPassword) + call.respond(HttpStatusCode.NotFound, "Login and/or password incorrect.") } + } } } get("/users/token") { hasToken { principal -> - verifyUserFromToken(principal) { user -> - call.respond(HttpStatusCode.OK, convertUserToUserDTO(user)) + verifyUserFromToken(principal) { userDto, _ -> + call.respond(HttpStatusCode.OK, userDto) } } } diff --git a/Sources/src/main/kotlin/allin/utils/TokenManager.kt b/Sources/src/main/kotlin/allin/utils/TokenManager.kt index 84da76c..75f15d5 100644 --- a/Sources/src/main/kotlin/allin/utils/TokenManager.kt +++ b/Sources/src/main/kotlin/allin/utils/TokenManager.kt @@ -1,5 +1,6 @@ package allin.utils +import allin.dto.UserDTO import allin.model.User import com.auth0.jwt.JWT import com.auth0.jwt.JWTVerifier @@ -41,36 +42,36 @@ class TokenManager private constructor(val config: HoconApplicationConfig) { } } + fun generateOrReplaceJWTToken(user: UserDTO): 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) } } - fun generateJWTToken(user : UserDTO): String { + fun generateJWTToken(user: UserDTO): 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 isTokenExpired(token: String): Boolean { val expirationTime = JWT.decode(token).expiresAt.time return System.currentTimeMillis() > expirationTime } - fun getUserToken(user: User): String? { - return user.token - } + fun getUserToken(user: User): String? = user.token + fun getUserToken(user: UserDTO): String? = user.token - fun getUsernameFromToken(token: String) : String{ + fun getUsernameFromToken(token: String): String { val decodedJWT: DecodedJWT = JWT.decode(token) return decodedJWT.getClaim("username").asString() } diff --git a/Sources/target/classes/META-INF/allin-api.kotlin_module b/Sources/target/classes/META-INF/allin-api.kotlin_module deleted file mode 100644 index 800390ea11a064bbc23773deb2f4818d2e4de1e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmZQzU|?ooU|VB#7(u}O@Bz`%f)HVwoz#gNDri!H#Vq)vy?MGTB)lv!ll z)m_u3Te>%0((R$AeM);;FZDSsr;q(x`rgxrA$A zpjMbMiZ@(`8wM-->Wx6ZbZvIblX>X`mO-?70mob(IblVwk^Wuj%y^b#S|#2;Kb&1P z%7$(mPC=huT9sx%m_T1W-G?i#At7)qy73U@H8cn`j988poTmrUdk8+d zo=eyJqNg4tFt7{l2fTApE`^0j85nsZFz8LOEbv54xDTua1lk-H2Xz#bSQI(T&DSwd zgI@nSXw9ta74%gZEO~~-C^sC(4Jt9`>rRKtrd%p@Iy?rms%V&1R;?U(LgJR)3d4_(pmK}+&*LM_co7$v z5FX00f~(=9c*f(QrxNsJSA| zwW(^XjjxwH>HB=4^M)PLsok|&M)|MCf17&K%~?z)aT!w#zwL}UwqkfW`C2F)Q)-xD zhO?zp2v!&i=^n<|Rpgp+1+#SDBiz1~jx{h(olNiT=N<~wh>s<44GRKK??$_Z=%T>! zZJ9H+EenR7<7<`U>!vKJgr(sV0=mg;+8MZ=-852Il--?6a@qA{XLmJIb$8ydf)z$m zR16#O>W*hoW3NUSNnFPg9mle@U9xENU29T(Z4=PClpr>fRYO$*f!EV@xBur=lySdp zz9>ipe*b@vfu^eX;Db&=YCa{#OsZE>;u3Kuy3J}ZFMgtqST9O;L zlCi_F%BXHzHf|kB92SG3H#QhM-Ov(05*tjs{Es)7FJpOHsd>b3T<2!d4Slvr$Ls8@ zipAE;X61Zl&;Cclw*+3SkJXy8Gs?Z{C#${ijOUiEy!5(goMnqipSh-h?@*dOcxm{q z!1Ftu^0<67d|zPbec#sbLuQAnsBGEB+&r^-Th?VNn>Rd5wIQ==5@^a<1;+>~wR}Ib zpSd<^l%lf(S@!l*VR1=%5#;FAkQOP*j8nFJiv&iu8ysfyou@N~$4bjz1rMO5GL9oX zmOI~;s9}g- z2@bw*p8SM69q|f|*4uFE4)*_%Ac40yAF6`!1P<^EB-Mgep8b^j7?Rxck@K=5@-ME6 zZ0RmeUhDlcdj7x<{#~ywmAU=YUFbYJvw?GyeYf%9w&8mijo}_%5?E-<+{N?;u1xjc z!<@j|&=S8xBK{WI@8jBnLcfELZ{QUI#XI+LeWC4>cVPaVl;ijr=R;_C>Rp`Ha8ARO z3*z7f4X^x%@Sk%WqwI0cX&lE4M-H9Hv%izvFB7h`?WO!_{^tpe5vx7gbz&m2fZ8q7 zfC9fDegoHIT;Jx<_^3$=GzrrI2`Q7zk>x(F9rqDi=)Z%t7ZM$bzQ5p1N8(R-?Kb>( zcv!Wx;!VUYOLrhZ$TI~iSL9K<8zdi(tZ&uHa4;UpP?e-2T+1lsStne{Gf5_jO>6I| z4ScGPPUzpjXKv$jJLPEIlB1P!D1DV;W$sicwNj3uifX^)*Rv$~J+8oEd^=hdmiqny zeuN)W?qBgM!P7S*+2i;%Au)RFH(U+w+UcJseF8qPNXTI|b*SlxnvVL6v!{GKjnC7b uw-yo4;0qaiF@rDR%NcwHU(Mikd~K0GOYn8Pv50*>zTxAWK0+UPAM(GynR{3O diff --git a/Sources/target/classes/allin/ApplicationKt$extracted$1$1.class b/Sources/target/classes/allin/ApplicationKt$extracted$1$1.class deleted file mode 100644 index 9d2dbac06f4b76f1e5af99912e79945aae8d07dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2618 zcmbVN+g95~6y2kMWrPTq=1T5~n;1Jm&|Di68gP@wi6In-)0Ex@c`(AVM5VElyz$Z> z=@+zF4e4dAE><7=QC&SF3!=Etq164&Vx&F`VJ9>v-1G`nv1b zTspq@KxV`<8E{*QYGyn$u7fdrSFZa~EnI6gEXR`~@VIN0d1JZC3(2{are`aZ(7GF2 z;}d1ax9ZXltWX3k5m>w_SFN?D(z^e6af)o=$=LT?;J2Kr2r@RFl6QuYYzMd9okkJ3h)V|Y z7-i@V1a}*0j4@p7VDhgr*YN>)Ul06s5y$GTHNF=9f2?K@N9Zc|YFuHdSH z%eb~Dm)&>jxIs#)3EB3`aDejkS_?576E{)l#fO+6;-Qf9>fj`&-H4M&Ch?I9(QQ)l zTg##41XxUYCWV7S>C{&&B?4Cj+!iEmRfsPT}A!#HA4;d#i=8`oP^pmlso+)J|y zi&L{jI%?l`WTNVAVgZXin8zaqZGD_!D3PuhnPG5y&y0|qLcpnBXpPoBdajuI^{5{h zSX~+WX!4n(ERwQTCD6>)hG}eV7}|hlXh$?M2evkbwK0~{#(>R0K$EjTrg%Vt1cj0L|L*y66ETpo=bRNC+fRE&{O zx+%Ciw1ENj?g7-&)1~r9Um86$>ytH2E7izAF8>mJxr;9`nCp6l13%Ij!#e#>x94#X zhp0y@BRt9-Sqf3ZpwcF_3a^DOvVd#(p<_SeOg{G$`ZjT43nQDbRBv!-d=uAy!7YYO zOyz$=@d9BQNQu(^g|%n;Ln=5&%M zjuNjaA~Z|3B6OQJC_-i~zlHoJ=3b!k1NGZ(QnU&QpiMl+XEfi9kk*_fLaWpw zI%>Nu#{E28G|020zFM`0CRr-5t*G_zl-lcr^@PwqU&6i;mP+`dgfH<`318!z5;&HZ Uz(UxlE}<)g2(c1kCdA>t0q3^U4*&oF diff --git a/Sources/target/classes/allin/ApplicationKt$extracted$1.class b/Sources/target/classes/allin/ApplicationKt$extracted$1.class deleted file mode 100644 index 2e3a1cf59133d4a935cc73e169862bbec87df0b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2007 zcmb7ETT|Oc6#iBi3xpC3xsx`Kq9(>B2zpCfQ(BioQ7}##JER?+7Fif!dBsR8H+|!` z^cS?9q{*~19j1@{QJtQ(9peNuX&$tDw7cg!-?{$t?;n2w_y~^~rg;$f!Y&>j2ENOs zABs(Bc~4}-UFp@VB^`_*DK$c=o*lHBwlAa?2_D!b-rTM6LjT=fB3y+L+v{CvX}RQw zc0-1d9eYvBi)^0AeY;4DCuG;;YAE*ndJpN5@MU48z%X^TSsf{c8-4c!OzTK9q?dhy zTVdGDmO8#B(hp+08a6z!#Rac>QQ>utZkv$35t7gsnl8_|ZH9A}>;oXGXM>wCFg6Me zCWCHupcxk4&Zdd;7*`+}hE&#>+cq(RNdv>UKnHT)j~Q-uIrK4pHJKFBv@cpjoZ(LP zbpmH6MmaoN3ZuGx;K|*H`;=fVL@3(@6WirbmXjbL_=}dJVkxMT^p0Ta)m-&T$PqFk zFyD=Jyu)zG-S^x^7wrL$c+;a=W4N6y9q<;n11{?J{oMo4m4&{OiUO$@R7`GQ+Q7S* zpJfKyTWE$5o4XbVM za!0>sZw6DCCobR7Tb)V>*T`~_Ox__`nf!_rlu0v}KZgA~mVU$CU+BLBpQcwJ2<1u# z+U!A__!OVf{V*QV?PM1RuwuW5dO}_^=0EWm(n%~(9+h;6}nC+6mSSl)1=+RbxRW>q5L{tpE$=}pS5<+ zS}DKs2D}4Lz(t}JNGReb4~3XxJI+R=LIPxYc6N5=oBRCn=P$njxQ7=EH@NRh<*c^b zzVx`3f!fjqai~M?X;CXIWxyD|EjI&g)Eb?ZBb64R;=WVnt!j;zlHc}YC24p80V%CSJdgUV zkYc!=_EV%l}X!3MVa9CujV>yu%%ztGe^7+7O;DB_!Jhq+T**x{7Nyu3&-! zP4riCUw$*_C3P+iyKfmxF%-{N>~-qUX+(i?Hi>Mb%7?SGhPhUs%^ zJ@SUk0yOzg17IK)w z`wUilkzxG22(!x`T?g7FvpzZFWYHL2$`SV=!`KPrQ=xf{Yfgh}wK_v|gP0*XL%_hA zh8d!dhthCG;%elxaD0@vkB@9?)UvG!i`dcQqbaM%=B=Xj#Qy!ew3RhhwIxbznX5p( zYz1*dn@ymX&)MD#));bwE61>KW~xk)`RPGS9>?zNuVaJZQsQLZZPH|>)`A*cfbnwR zaetT7*j0V8V+g}YSt?P9TU8PEC50EU(y}F7)sc}TrNI`io-R5~zpIo8*L)sDf^N~s zy7K%Wq9vqK9t1VYVq4Y~*KtT*?Cl^9J+UE;%gMfj-5z`b6-8>x1u6~Qc1)T+QLR(- zr{0moC9XgkR6V5UQ?HQ!fjEXuqWPW_7rQoNW~4~dSZoraMbGht@yo9Z*}r}rLwx*Ob`1ay7?oyT1`^gT<-pCoy$ivtl9_%3% NVKu_T2)81P`~|{H21oz^ diff --git a/Sources/target/classes/allin/ApplicationKt$main$1.class b/Sources/target/classes/allin/ApplicationKt$main$1.class deleted file mode 100644 index ccafde632bc7683ba679b5b7ee4c28d85530e4aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1543 zcma)6U2hvj6g{(c{ju3Lj+3@YC@pPG>%`DaN}+&Fs4)p$Y7D|963WwfcSt5)&qh0A ztGwm6@C*2mXay3Ac;rVR?l`V%q*Tg-?_AH^d+xnw&g?(`{_z)p2WT^_@;H{tZyp`R zGUP@k>WQfgxKx$RJQ#y+_Y-3y4o3rDDkDTYQK}1 z&M=M%e5qo4sE9#NM3IQPW0ndi|9`+K>wz*Ufyq$kvBYpWJP=`jg7yth`9RS1Fx;)S z5BZ4uF<1Nk*S$j#n)=L6*MjWVEg4sE)x~8jGc2A#LLRFOB_4)CQ;*L~%0nX}57$s~ z@dn;xI5#B>cg|>PZKkV9pA>jL&E#>@!@TXp!EJ`Qi6E?k@_3t}5Olgvo1NA+!^M{} z9m~tZT~v#>gEa={Xp^CQRu_dvNTMhCSj7}=k$X1rQjxq3hJ}}qUkSq_Za7`0GZO@qta&qjsC&#W+a$INGA-8mLyy|SQb!WqQ?Ed{z&MDZe z=su0s;3`o+4w9iJF%xLkK2HyiP-M6?^KkF=4IQ?Uh}2qcCn1k_c`A7?7Ei5Vm~TrZ zIzv)hI@zgwJ5)vvM4(1eOA4CGsQF5;3|^p=NLw-2TF{f3-&SFqXi^c4e~?5B#je~} z+zeBy;&zi^8j2lhORh``?4H8Upkjllyg=j7X9g>lTjD26KjNEqTI5wIf+j|8J^LKq zFXS;Xf|UV9+Kd*h4y|*w^5P4u)L!7aO>?kK*4|9g5A<-C+SJH3|JK@-6x!O0ekOdhGT3eX6eZ_5s>E~gD=PHXLv&ELyEjl pS?}#36W~FB_XB)@hXFpsM*%)YeGg2dflv03)!5SbRO5!m{C_18bH@Mx diff --git a/Sources/target/classes/allin/ApplicationKt.class b/Sources/target/classes/allin/ApplicationKt.class deleted file mode 100644 index a845276e2ed90d90cd8b2fb08db582c88e4616a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3163 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 NOxbX3T(t3r{{d0m31k2O diff --git a/Sources/target/classes/allin/dto/UserDTO$Companion.class b/Sources/target/classes/allin/dto/UserDTO$Companion.class deleted file mode 100644 index d9c38c81b34cbf0733898f2a6854697c37c06df9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1275 zcmb7EOK%cU6#niEWq_ikRBIpBT1yqG?Ld7c(ljcy5v4Sd%BBl*fw5i~?ldzO(zs&P zAL7cTx-oHKNZt9PjAtl)Bt)%?Iq&bBGxwZ(fByRR9l$+2WSHi*Eu>jfj``ZN-1Y6P zM9yjMaVZ>WfHB1Cyv8M^6&n!Bs*s^Vkni*_6aom#S8W>>+<%^~5C&k<|hS|Ydi8JBZC`J(vBZe`C zxqtqlfy)e;WdA74db?=~sVrA=+g!Ka@|LY~j`Wns0J1phR=+O04Hlt+u6Sg%MC>vopWjy!$?6$tJrE* zEO(n%Y_h})PL-xw~5UCC9;rGV*IEvZD)%FDL!1jRf#-8qJ6UP{Z&+1&Fi zx-pTG({iiUhVWBQ_L1cQ95OWSfIkE1B+0)#1#2-dX9iNd1JVZJ7m>}FA={_b`8sTK>RU9P7~(p4)i=`^0=1A kEUuG?xjb%Qeh17$0t-7ZJbGks(?ih1u!mb7k{(jO0StFENdN!< diff --git a/Sources/target/classes/allin/dto/UserDTO.class b/Sources/target/classes/allin/dto/UserDTO.class deleted file mode 100644 index 864d973b74c93c2d96d7cf4d25f3846f19587d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5137 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 AaR2}S diff --git a/Sources/target/classes/allin/dto/UserDTOWithToken$Companion.class b/Sources/target/classes/allin/dto/UserDTOWithToken$Companion.class deleted file mode 100644 index 363fed4fd24995b835dad0269a70114bb862b7fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1338 zcmb7EOH&g;5dLO2WRrjrf+8;;NWg%?CipspqQoF&G=wS>M=E<$yY_2ecq`@g zH&Snx-G)%foZH;tO1jDdV~E%JF1H=7w(Rw4UDUJ%lOen)mDEcNW@@I=haQAu2*F|q z>22vVOcySaAj=S=?2>OQZt2ytEsX*`$*3uuR}p{pL3%D1^vuI{As?V_uTEyp3R>2rQ0c~qqEEc7!(^2JhlxtM##kUA%O@)R!H zhXEv_h+~jp;-5cn;VMHW)x9OVzT32=(!x{Ru~)=9-g0!#RlfFGHSKz9+-nFgJ5!0l z2%0mPteqI&Hak{^`TvW?FmMD|6Pj;w&FPwq=B`P@#eyRm9AID#((lPYN)xx4VOVYN z55jPLJpKj${};yWbXO8G27OkC4a9LZjT>r1^%XJ;=G6 zf}y`4l_<8FRpFI+)geuy;MTZP;WYImca_nS+)`Y(JaQO&)lynEMPBVnUy{%A$y_q@ z<&_d%&f&fEustiJpbdi<6aLCXAgo3WXB#zdVuFfXO4%$StXZ9;1pNTP$ zrZX@D5rP4Ie;g1+jHChdlE&_g39`m<7xzeO5S=6Xkn{%T@rdXX@*E?~ t_y){8uIF(hkDItfEGF`}jmZr#A4yDY!1C!u!nBXDk6s^le58EL{01zTP1gVb diff --git a/Sources/target/classes/allin/dto/UserDTOWithToken.class b/Sources/target/classes/allin/dto/UserDTOWithToken.class deleted file mode 100644 index 00325c57b7e904a12dfe0a7977bbf82978b26878..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6105 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 diff --git a/Sources/target/classes/allin/model/Bet$$serializer.class b/Sources/target/classes/allin/model/Bet$$serializer.class deleted file mode 100644 index b24930ae913026e1ab08436535809d66b88a3c77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6534 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 diff --git a/Sources/target/classes/allin/model/Bet$Companion.class b/Sources/target/classes/allin/model/Bet$Companion.class deleted file mode 100644 index 76f393cfd87af6f85c2471a2a65e6ddc17a05d1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1257 zcmb7EOHUI~6#ni^>9nOvTNHVSiWF^8m=>Q2gossQwbVoi8y4oaT=BNkJ7ngzA+EaO zhq!X7ZcJR526z4_35PlZkw z+{P|f(p451L!!o8+;+Iyv0qneqN**J4B;iIq+Vt)Guh2J1`v)R1dAc0-%FoiqI71~ zMTVF!JjosTL3j)^nQW=cU&hZpL5)7e1V>o&?`E zx>1Jt|I5aZJR+g$I>**#};UG6BZn;ros-ZYh#4N+7r=}W?_oa`Axyr`7$3J&*uK`$h> z?l!%uSd~HQu^w~tFCOwV=1_3=FiE3_Mi*q0We39`IWYSTkuRhe$k7>u0gGrr{1AXB zVq_&TNFK9G&iBaHS6u2~Tg{ahhE=x2_kK{DuPH0XzR zn$D3!XDgq$GG)h(DsOcrsii0imP hDyE9KiRmpcA8E{N!Sd;|f?GbqJ_dc<_L1?C{R0doE@uD$ diff --git a/Sources/target/classes/allin/model/Bet.class b/Sources/target/classes/allin/model/Bet.class deleted file mode 100644 index c8f6ea00310cad518befeb4e94995e2d607198f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9414 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 L1sH!>3g7<&ggu%A diff --git a/Sources/target/classes/allin/model/CheckUser$$serializer.class b/Sources/target/classes/allin/model/CheckUser$$serializer.class deleted file mode 100644 index 5b18949edb14bffd12ac12c274f322ab45e4d9f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5271 zcmcIo`&Sg#9sk_f#|*=w>mn*9QLHq91z9wPSU{r!>LL;gN`llT!|n}?%+7A+&Z4G| zn7-2YySC}O>BF>5+ti$+QcoLBJSRW&=l(sV-#a@yyWlRU=hVZ_ow@gWzpwlGKCb`% z??3(p;2_>(*kf3hX{U1eEVoia^E|U~UT~+qogSuPnXhq21!H(=?2@r)q%6apOFch( ziD%q_v4y-#Td$n{;Y*uNL@O!!dH4j1md;IvX`xBGHg!*i|wvb!jnINd{?Knk38&fv=mP zB_lJ9kLV!47@q2=k!LE2p=8#8jOZSubnHWK4BN3or-M8|Az9n4YYkCxkYUp-Cx8&c zV#X~xoMEn>AJ)SG`D6o`L-|}GFHD!0y%<9uo^8Z4I8+x0fx>GytLSG)l$<@uUoCRm zr6g@#_0rsh7zS~;5d)yK*X$E{KpL@ljz}5Ok7Q%Iv+7X%BZ%QBj!9X^1BHAkX*DIt`;-%~YaYMWJwem^+9yg!t;g$L5SbH;EMWEgt& zY*NPr&N0+;bAX{T?p9UU(kZHVfuW%)7aZS^+lWjGq(q%m&^blPz!S|K4KoapMZ+p` z4Hq|#PM@`km;V33ST;ijqtS?$F-ryJvO{6oKFO_D7+&wFW8nkGds#%C4eMtWI^rz2 zJYv$NPPOpdEc0`aC47-8<{M#3tUmB@GHkD7FT>!5T*?ru&J%u<7()j-WqP(54sXaP z@L470`+Owmr*T1YdX+LxRZ#f^R38U3)Q(cqCy8`f@S0?SUt~D4LBMU$EU2J-Rtozb zuTSm?`eY5SF^pChEk8fjIrSjM*K{Vb&mQn|*JpKH#pft=tUOgH4X+b4jchhZ;@fJ7 zyCD7Z2EHJ-evw>JFod|Acd{D3OtrvQh6;JX;ThSI%bK0zLKt&Y`3{|V&lrP)9CPmWn}mZraRBDwJd0&GE0(l zeud-;LEIQXl1(a!j!W%Q#NvzGqCUI4v8*AHj>#q39X*vE9v&HI*it4s!(Ah5xCSjM zxy2COWSD$3$Oo}!3p9VllwZB{mfg?r!Sb~}efgTM>`+QStvrTwCBDUD?)Z9ZPi&2s0QK{PTk>ubWMI%KG zBFWom{5!oUxIs_32}Je|J!2&T8k^{gT3c*JXwBw3*!CVRZnXK29!*f#rYYimly zrer#sCKojj`;WR3U3aiQc?(aU2_FgdMOc57^{ZXoOZbF>eyvqo!gCC7p`%sn4lQ9Q zg#KttBz&zeLKETAgxV5`(8LX7pLh!|)BF-nD(DNhg#Sb$aB_wI(I`D5PjEN=o(>(k zvGSk$c-~l9zMt*NyLXYEZVBJU*asf-vkLBFV!9>L8f{hCZJd`L2|)@YyH+rc211dF zXH@K>15xp!_cs8nkOQjLSoK=Cxp{?rQnkElYk;e$kE?Co`F!L%oLq?{rpUg6T;m+DFPf=^LTBWLM%-XkEeY@K+jvztQg-^!+B;^;Lnd;p<1e?{5lx3*Vlh)$ee8 z7vID8iS-X=5K7~RY5XXS>-aIf;wNbeo1e~r3H%H{pFxYjF9d!mU2j6EYKm46qpj2_9kZp76dK|{N{h03BQ5> diff --git a/Sources/target/classes/allin/model/CheckUser$Companion.class b/Sources/target/classes/allin/model/CheckUser$Companion.class deleted file mode 100644 index 82cf4d4af5fe5ca61c1094cc16c6a81416bd2b6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1300 zcmb7E%}*0S6#va`>9z%>6!}&W0c}y(f?o#+5v#;%sfop2IGAY}Vd!?2>`n>s)DwS* zCy(mI#Di(@<{xEzQwo@f0S`Ox^Y`A{dGF27U*En1xQ|B+L`ds@j3g5M7c=>SYEyohkRA3(*83a2O(bTZRl1 zg>zyrG9)OO$#>P+?S;jHv%nR#Bb^B?2F43V6xx`Tkej~ zm4HhXx?Cw=w=;!q(bvU>=aJXM+2v0imnH%Sy$rE@v9!KY%sn%4&xI`Zpbx1ylIW)l z=l-pO0fzZ>=UUvIy}B!v7J=fP`&7K+4NvEM73!c-)qb$XgPI5yGvx#<(}@15>Z$Q< zy=`Tf`@d)meaC<`q4_4)oG!W;TNG|P7-!@!x{axlZt{YRGxbg~W%j@gg7nx-+&(b6#V7NiozM!h0} zbzbpElPdUC?v*)BHpv}jyd<|2*NuQ2#$Gp+mUWR=doq;dvvN9s3_W?JM3D1%7z$dW zM9FUiRk12f=#dVx{1*=M)bogG1Z?7H8|k)Ol3ddnqFpmz5&KMxg)E)M48#Zq^c*=L zjs!`4=q8Qb2G4iE&KF#1Vek`~{{?qC@P)R|CEO!wl3WIojOrO8-qbTo)FNu?88-FM zfYUj6r0fJCGe$5lZ+ab~+GQR;vG(W}w diff --git a/Sources/target/classes/allin/model/CheckUser.class b/Sources/target/classes/allin/model/CheckUser.class deleted file mode 100644 index e2c114335f5cab515d4c7fe19f5a9a0f395b8ad8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4635 zcmbVO>vI#=7609pEUjf3)&gwH#$Xq>@rwu?8WId4V4GTCI~0R~(6m`g7klw~rRc5< zp(&xS(4=kBXWFD6I@1rGe&9o20a|7{6u$Lu>U8?MyK7ls8QRR)y62v~_dI{+-1D#h z{QVyQ4&XNeJ8ai=yxdBuDBaxnk}NErQ?inT5U{S;t9H({y~W&X3s+>pPa-CeIP7?i z|BAqK1JmmV=KPA|EskyE49*MenJ!fpb62FlP_Z3PVW2$?E2KIF;{KAO1UjZ0 z#*{9ai_)LgUJ7g<7~CjUpoJ$+N5%-G3Z<2D$&;SHzkV}HRfSUdZGj{ITMjlcNIRKG z(ThC-X)Un7C@P=3d1@nRt>8I0d9_%*h_HQ<+AjO0(%<-W@Er3sbgv6uultSm|I4A*U&(jF9_@$ z7=QZBFYB8xrZI>fO}#`!HrEmnSr9?%lAnt;P6Y{O9 z?Gi{k>YZ2%b!ASsmjYvuYb*cN=2VWuWsxxxYzI63fn ztgEkus7dPXavEQ4!D~3fN>)J(6Q!zOu2RkZO|)!kGQCWN@zp^QIIxL;rv_11d;?SK z3OO=<6XCTk9i}JB^f)`bU#S+DxEZ^$%mnLXZHr{&CSQAZs-;rZE%x#S>0OY$Ri!^W6yv+>hbZ@AymX zv1^LXtaEj=UZ#&SJ;XcvDA#qa0FWU7_0+b;6=U}jq&`{+@`S%H${;v zL|5bcwe+2Kt9+g&uN7oDc%M)4(Ju*f`Ae13)ftCD^A=Ay(k<4G2)sOy&wn1fbRE2f zN(yD@*efYL_TOD=@e9(u0YL&sH_=t|;TaHQN)8t|T?9kS?#3C>jmh?y^(2U@{cDx~ z_&_odK9(CyB*^v4`pp!s;~jzKnlNH!69m+bF#k93uAVGz>OS8%TQvv6KHnA{%gspN zF513Llo~6mF^+gb|1|3#;#@3~f6dXmeWZ%}g}CtG<|`?q(?}WCgPSS-8I~C?TT+He zw*F)`lik8K&Q-NZGa*MOfo*=%jmyQxR-#Yk_h(LI($`oYan(=@`1 z0To>3VR3Ss)y4yvQPbKMC=yeTKGq_(lN%!~Nbd;6k?ynFNq3AUtWK^Jo3OGZy0~_8 z-8uE>mN?TEDxzgNL|t*S#Y&U8W^Tl6wbBp&kl3x`%Q3B`t{V^u0oeB1W!835kJ-;J zv*CB2sd~P%BJMGiAnI65F}FGs?e&?s598wS$X)bnpF(M2(A#T4Z?6TtJqmh#kTxd3YQ`7w zB?{9@U!ck+u01{R8=t_`X_)S5ipcED(D29|41~Hr=CL@8mK3jY4v#W;f~!u}zrYw!*Z-oeZ3euRk~XpmT;$M(p;qm*w@en%+t=;3Z__Y!H! zJo@J0?%VtnhNYdyOl-xgI2IVx5eXJJj&Xj|-j=!Q5FZ>G{ym!Fw}<};<5M)nZVx|z zF{3q%@c$mB0;bl&eRgdh*UAj&IJ6+1H2;n5Nf=uLd}!^ITT9A8!yB*S>$LeB3U9)`#1jh= z1r#ah8v9uY(as=cK>9weUle!ot-s*gIykxye!|}j1zhI;hwO^ix!&OVDftF|5-9wL z)OWc5E)D*x@nF=HTX4yUrS+C;i|$# vg@nRRg&xH*3cHm)-=}aqIF?s9q%f#(D%hS?IHxeLa9-hp!iNes6h8VdEaqq? diff --git a/Sources/target/classes/allin/model/UpdatedBetData$$serializer.class b/Sources/target/classes/allin/model/UpdatedBetData$$serializer.class deleted file mode 100644 index 39e6f80aecb47f2fac869b5328c6745ead92c32b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6054 zcmcIoiF*^r75|N{mDU1;zyuKjrnreO5V+K#wmEGRL~Ms*Ab^{;YiY0-uUA65GLRl2 zY1*_&)3j+yo8CNxX_b7s_t)eSw18K-&cR%YIbMdy!YlEzj@Dh|NG&` z0CwQ6z@vs`nRa|4osw4kSSDq-GPPg2y@qQvHaaqE8kYI2%xVw~%aNG8qqMA+S;EU~#iogIyzk?u&=Fl{Gp*ml~@TiA&Yrrp7uWsz#n{adE7 zSDrR`!rd1K= z42pHtBV9v-zy>3kl#bI#qcqOn-I&aT@d>QZu?d?6HZAVtirCWdNrAS-$;yUE*zRmJ zYIsZ_m>3*7x^J+jPhjg(W}LITD~x8egwTXmfo)63-Jecd(y%LKZ=tD|61ZSnUT8do zt=J||N1v2nMc_cS2$ps-oid48y^=37+tpknex3A7Ln(HX`=SgSJ*yNM`^n{@tZ zG!WaCk4VNh8Rn91E-M8_s~MwK7}GFI$m~f^WYUi5%91I=*o%F2*n|B7@%!AYp;sVU zF!qo&E@&;b+8i7*b~NyWEcV9Vkf z6BvqNmB(6|l{eVv1r39|14{Z9ZboCol4YGbuF$vZJeUcc$M8cvnnTojbBQ}VpP;}2vn z<-*V5871uV0bd6q0F*m=~TkXd<^!aZ6}}I>Fj`!9akWhFJ?@2J)BWh z%;I*Kj~0Zt#(Sw#G)xGDN@+kqd16TkeF|o&SS@gEK2CVe>m;*5oE7j-8dgpQp(>~) zPEh2pA@~1>x6)Y@yq&AVBp9vwxh#RNaY$OH1zxOGHdb?O{^05&D#K_=P8ILf25Sbu zv-pwETb}6nN&@k zDwZZ#z#5}Oh@D5-Pc=9fY#{Oq8A5lPkDhWC=J4;ErJWsifLv8|~WRtZ>)+KWIEjcMI-p!?rB@Id1ua>ww za4^x^+s6xhWr=7&x(3@_gNvStNiQ2>p?*T@hwQ~T=g*t!i>0O~wO!!W^u-Q+`l9Yx z>nS|J(&*Jak(I?czH?oXMGAwW4tj!jUh=G+zStg&`l6m~o^4{k7WCYHE8vNE53P*^ z*M+0OXdvnddbjD@LI>|$68W{dLn|ZUb);_(M3!+}u2v4kA}jbF;oM4&QI4w=jaoah zI^yHIf9LTNcP{zKBe2dF3`DfsZwFSZW3<<7`L|ZI`~o|Qrn;Z*p4P0kttOhOW_R)A zt7vh^Jd|&#wip?cVKYbDaAi+Rhcl?Rj9GvQk&In^D4okDr^|-Z-r|7hX-e;`4#8L%z?kui6CYxXs^ifq>&OezBCp3V7#jzJWFG zb8)H7ck(omO1;RC?G1NMb8S1nlwj=&)=y(YEtXnQpNb=L>&CKf1MpExVDk+$_G=&E z(SbJa6|@bt`C5JLLv8*m*gn)2XbteamYB^&F^g-?+o@m*F+-b%X`SKL=%;U>tK}MY z4fu9@JN({`fauh`9YN6AJRz2A4S!_Ns{ ztj^ayji+MT6o&k?&aqCd-tR9g`loP`)WLecR+tFH>H>M{P?37LGgR-71i5+{?>+J+ z-X+T^e8GbbU%l@g+J%3w&+w0lTbPeB}t8fWJ3JU9GUV2$!oeF=8 zx&-lZ8I(@sfeh%r3D3#vc;zZyy@}UOM!$CjuTDeLuH%g-TcVe|*YM+(=uZp7&kMsZ z^TSoFS9*xN_wofD4cCPT`Tmph(fsK*;je_mRRqkBI2IDzi+^$5gOBlVj=+ETyu$Ba z@sw{l_%(jB7r*8A?;Kpl+rwP_y~I0s7k?n@KMup2z@HL$FM;>*0bg+?fvfoQFoc7@ z;My?i9b9*CgFbTDNg?K7%E3bp);icomJU92u);yRgB=bm2kHFeSqINMa2(wHA7-n* As{jB1 diff --git a/Sources/target/classes/allin/model/UpdatedBetData$Companion.class b/Sources/target/classes/allin/model/UpdatedBetData$Companion.class deleted file mode 100644 index 2c6d0ca240ab4582184f75fc0f61219f4a9cb829..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 zcmb7E%}*0S6#va`>9(axDT;jgffQ^}*cQJI5F!+b)lw6Sy>Ku?JL1soEZLnB;;AS8 z5KkV}i-`x*;LShE__h=wF;qP4ywBfzZ|A)?KYxAu4&VVEGo-lVNM$$NnsDsbdo`{_ zZB^(su6Zi&HukuZuCl-w61#k#+YVPd_RH;EQPmbqhVYV9QZF-@=}aY#K7?Zk!D0yM zchYB=DPAPOB16mzM+u9|6lJRD zdOP;6(AyrD%D1^vuI{As?UJiYO~)axnI1oqIw?|k76uq1g;IHQrIdflknWK^bq2Q> z#~_kXBrwD<`OlxXaFrpK?%tBUyWg;-(!x{RvDd^~-gI={RlfF`Rqc8k+^Y+3F;j`b z2%0mLs-7C(G&)v>`TvW?Fn9vk5Sr8IaJnX=v2W6FvEYaX2N+nL^anDKvc%PL4D0RI zaLgDnVn(9fiWw1N0)f7ED{^#bj$JB)eW}-(osQ757$8&s7GK`(yZws>w{b!m-$Unw~ZNrreq zDdFWE?)!pvELL`#URA8iAoOS#S@{cx95p`_bOa`Gw5oJ%Hc58SBBFh>UlI9CjDakj zffAx!h!5(S zBWe&0>KO^@p-HE6_*mHuLS~F&jBF;oWI&Rv3Eag!(i%kPh(08}fq6V4`h+~k2{W+; qvw-Ub+$i8CZV`*g0&Zh!3(Q9f(_657dW|sSBkZH!#~mMOADQ3JdrW}< diff --git a/Sources/target/classes/allin/model/UpdatedBetData.class b/Sources/target/classes/allin/model/UpdatedBetData.class deleted file mode 100644 index c65c0cff1b7d3732da97d23f446e343dbe2d2a5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7171 zcmbVRi+@w)8GcThTho*#fdah%!3Jp4VoI%wf=Gcf0;M8F6xf`H^w=Iqlaenf;5KEO zlg;a{ZaOzMw>dX)Q;-5OU4>oU{p#-1-TsRGwmsi>PSVqog#F}abH3aAzR&x9@9i94 z|If>>0_erRG&Jk!w3$haWrvM);jj@=q=xbnHR7M&6`l+T%&ku~cS zZQDRLHzUc{9uLU^YKkNT=5jl97?X{ixNj_+U0KwK^~{mM}AU zBbU+BiDX7H6=q8KP^Y0WHEN^|+Vng0oIYmopoSIg4jh)sYaA;!vX0$B)MHKnK{ROa z=L|7UIEEi#4K?j@*MqqMxG_(I%N*9AC4-oc1+{QtA+74Lkuq8kwP==`EgEV~u_I?r z(3T|I8^j_kmOD#kk}1;$5yn!vd6fote$*5iS_dlMD9z*7J^P?J;+L(%Gjhu3o;$b7l zqXe{9LmlPqw2e6%lG0ei@)LGzsfo3aZavrPI?JAl^s8-Vf~fe zbxlWgL+`pWi?X<@vXyS-4e-8i&=8bRW5dSXdLfZN6)Q*o=2b)>{}7?Md6U9iW^Cx5|Ut7!F-gD~nL{_E{3`R8XDKEt1g= z-c47u6vX7UQ)1X#ophHZy^Rsj6)k2HQr<2pH&&PF;B+6&xifZ_94=ak=Hs~7t zX=9A3QkLopf~)G6OvwqI?JOeVpr9ILChjIa@2=o8k#I5r2}-45~Ra# z4^jm^N+M(nQN-Y^@kMW=LLa~fr9$^Jv03;wWV2~Q&y=9OO>6Cy)_MTPCG!t69EI{z zZ?=#hFYpdlRe)acGU-GCp=z)6ISsuP7*xGO4Mux1IlBqCte>mEy3}aRu=MFM@WIH(5=8@QBjOUD$Y&xldZ_E%vA7R#7y^Fm}R2QfW46 z^2(xOG+RgyN7)5N_Z!iIklQBNQUXjk9h z#(oXevXPUH;r%&$z7|j6gob){M$`F3!*wjQ+Gf72Y_i(A%QR;6$R6-?0H^R08ei~QDJ;|S;G=bo8nzu*1h}itpHw;OT;J#}nzz_rj7 zaD}Fh1^AyU#WC8?#xj`dD!2`seDc!RLeE~i^u&7r;bJAJ+5x;Mps9C zL%)AP#2a!oySi)mbgO5;uZ29#?uA;nmuo(*`6F{ewatNuJL2lD<9ZD0>gp+(%C zI@aU&yDX?`q{OL_g4#2OyAF{g)wa$JEtZUX{GlZZwzlQc<5F~#tAz2m#_>{)>(qE@ z=qiredc2_+pA_f~E#qK0pDXxm-*V}=wzJjJbG7%5i^tv6OPW98_J=~@X16~Qn!7V> zVdR#dTU?wMYUH8;==O{`{9xAL?>fhKrt_gZWb z!!ph&K&izJh$E?(OO2#DGJ~v;AD3tpOCcZr%C)exk!6$OGfeg?xF(S&_>}BC@t4qa zk^>8uS1kq=hM;x8#t=q3I(TX}aqA1Si0jJ`J8mdci#V-l*{`0o@}DLx1H7qz-{Nl_ zWq0zgD}|L*ZV|5LWVYz&Y}|9ohz?WLZd;sF>9*Op8_Ez{23`@x z!z7GrN|tjHD9e>2a9E4F_m*^b5-Z)y5r=VYNna;{(zhHzc^&!5hz=z!eivO;`grpU zAHM+Co|djfP42U}QCiaCY`JZ7$!(iUZrfaP+h+NhRJm>Q47Xi9!^-7dn9j2XYi(E9 zMOZ$HUfbw#-}?mo(vvy%*yGmijUJypj;?F;g#4V;@=)82?znX^j7 zNxW;?Kvqnxw+-aHXia{^u{AqH^T-JAm9owuwYDX+WRzpd8o8@DiSBs;!(9|DT`-v?rE0x46b%P(kbCmRALdi0m0RPT&%on8 z+4&k=Pr_4kvU3Wq?GjTL|4zsi35t`}a~M}AIFE83EpE1P(pKDbPh+cx*XRE?!o=1P zv?5O;qs)@;+=@fU5u@}3pA54!m|-E1w_)DL`c6QZBVCQk48=YP5mF}J? zykDX_j}LjcBJ*7IJU$|Ky(_);ZkyVjPRmyM3n)uPl@0pvpq+yI@DME{ZPv%U|0qGc z#j&I)5SXkAkJ%A(f|SxRyF(43hL(FzprIwya0*|T#Fx+E>#91m%IdIER)$X`gNtW-^4kaT3oH@|zq( z!Iv50qZIcsfsf-8>+wmd^(leJ@#%d$@fib8;7RLiA7Z?+vyFr}&)Y^PgOI;rB}0 z(;Rhj{$q;&$v)I1@zW%Jmc-BT3l8ziBz}co?}H}r8~k=3x&)Td76Q+y-}wTy0?h)8 z)HJMqxqDLJd4b0SyaI87xdQD19RkY*RtQ`zkPzq==n=R^pjY5pf$Ibg2pkf)Q{ZL+ Yp;$dA@Q}d60*?qhD)5HDq`>d~2bGT^eEQZ<#nwEt7n-`$zrY?9ps_`c@L%)NW=x#xY(J$F9+@B1GD zxEucwxY@8Q(@y6LIccSjIkLEE6JMrbnNP~11|e{A@U$^$q%Ff9O+PqtT4vqe!SRC2 zT~p}_s^OXiJ8jyoEZT;Zen8r?Xt**rTqU(@a51CazFvX&V%i!)0^6^hzJ`cEWS421 zZl6G~z2kTcI+~&gBPtMb$4p1y)+IvJYD;mF?%4_XkWn=9lBziK;&bzz?H#8YD1K-j zkwiMK3UODb(*O3sLUA;GTDl`e!?c~WVcP|_Y)vOURB(q%mPM@luiYM-2IS*L$#OIK z3Cq!tpdZ^CNWYxhdap|77*=Cl6fI~KST!o$0qJCm=7d`)3Us%3G~k=7VmWEgfb;vP zbaZ}QV0Qx=RoNf1N~5N|DDZ0N#gN2?CIoO(!|U*Xp zAT+cIr0b(qr5|>Srad|zMH)UMpl61LkM0@j-zTtbCG{5*=#60$?r6g8xKp5O1@0N! zt!3RVuw^BF3$~P*bvB^`DS;jJnT?c8%T*D+*PF~UbPl;1HVZT}a8$e-BbF36&?s7K zOxxQivTAW+NMmahTd<8R=;BI664=#n)o~9ii>Gz^ z^kja%4AMw+t7B%FfcFZtX2)c9+|TN2krBA7y-tOluZx~*dsRXEEPA5Y3EKNctdBC7 z?_*i2Z|}uAXt-Zs^@wDWkYFk6mWs6UXd@FWmkSNeUgg~9PEHBj zdtDlI(731YdByGv0;&4OJ!X&Fg){bkQ(C!wQ&~Box)}|RvTtb5c#VV+#bX!|h)FwF zlRwuf6jM0|sf2o*HdtI+G>i$n(4MKWrXPS;1F5&IzS?G`U8_cn(!0N4JLLjVC>}P7 z3sm zH`uUz#ik3-;z{Mgr>>y_`z$qlxfx$kv3k``WD+k`_1ccy`4g~OICkJ}b?SZXn!;%b z9Tm?u3X0M23gv*)(!iBKZ2HLz9e)%3u}Z$tv|;KB8A zeM2mvCnAY}9^4w;+H~N`%c8v2d~j_%wt@KDBk@%nSF4qS$@m)19dL*uW{AOgGQe%6a4+C3jJ`4!l?HlM?z5&pNjkYaYz0@_i zej?O1`aEySC+TKm!ep>4kTzC(8)i_bq}wviBjKhaCAO1!nXxBL$7IK}XZ`}t?b^=>DL!9v!sjvM??!aY8)Y1kaK4X?3YHS8MM@x#W1zqV;HpKAZV zfMG0S^UF!U#Y~e7+30YgRLsi#rn(VDEAc9G3}T<&@g-7Y8w*ufMLx%*s$87UGCm_5 z*8=ek>L$$Js-W=;388=EuQW#{48olk(fk)q0{ED3wTVDn;XCHfVK)1xM=ew z-0(IRSK9pdGETf!E)wLWhC7us+xSZ{*3RSRS=_oDNsV$Td1m?eDst<_s%*z7V}NTZ z{R7-KmYW^vmkY#&Z7$1dfwtFHkMD9#TgLw&*Su;_`19!>P4hp=Av1D^sa0Wv`^h8?2 zp>y3~0zw`@YYm4zK-dH5tzpdrL}qX#i0-D=a9sBwo=QiP(HT4vrhQKKM7bE};xsPZ z@+#gX-5Go_fbLLh=q;M)wK@KA4Dq>xPbZ%~K1cXG&gZFM-}KxkOT?R=dvA$^({ryA zwou6FxfcmrBqQslit5K+YijqRW&H04oaw{rDfg5IpxXaX;o7t;-|_D zD&&Oe$BLTWgFM4>mf}@{^q-t-D$JRbe6u6*gMW;AgbC|RC7xjDbR`@=fQC|=XE4QJ z33Vkyn=j!@e9z$N02bzJ%on1Kbd(dl{7|zAoFgYSE8-b)QzEPiR7FtLVGnlTtAwa5 z>>-Luok(Zu0=`~9E6SQurwWsZrzz>!_=ZpC00mK^L_1SmvoJ5<*@XgE3XCUkv`Q;l z6*x+PzeQPee7jn)9;KQ}nf}WNoVbYR-oXo(@zROJchBR6S!nu2{NPY$;zz*?c(pU} znm7E+8-5Wg179x>@8D)7jwm~^-0zX_UaAzvzX(s1jbP#fmdzFx)ekv($sfeOxgNkr z_=F?yDWB*0`wc4lD+j;EZ+7Fi{5|d9P5kZ@SKpHOJ^p|{lJuWWA(+9RGk7~g_nqey z?_}^U-a7^1-~uk5LaT#I4rUxY9z|>DT;iFB1Hj(E%+4!A!3zSEj1D3!odt>#3|cZvO8^vr=Ivj zJb6?vCLT-YB`0Pf)-!yxy4sk}@6~2ml(YkzA-*7$)Qb%E#N>JxIuLgegToNh?`6a=TsS-I zJcCPlB=_Y95i*QVOcr(mO;zl9M|!R)zxQ(W*o{Ds&f~YxmUw=Vuw#WF-1f>sZ-!i| z$m2={x|t;Mih(XxeV@FB+ltN{6(m9j-3*C*admB}n0v-B(v~T6%6q;GJxC{!LNCMU zKY!1`Wro>_Rv)}_t>Q_gMX0#%Jr(bG)z`T|MLMjObP%raa7Tpmlj|-l)AZg<>BRW9 z(zG(n{9iPNo+H4D(0q$)PA#!2HJet2nImZqFt8oc?@1$NiQAfGSZ>t&T&v%5tyH7# zS_xu|KwqPtIM}!Q8}&IW%bqw1>)>PDN?9+uQ}$pY9ZOr;j%@7t&wY0ADIPb`=9tMb zcCM93x6Ob`PBy1F&37ej@81)3FvZY$YEa~VyzmT;xdAgfnie@nH-e$NAeAUqE1M!* zuN|2L$9k!%ZkXWnv5j*ES)SHLswoY5$1dzMS?Dh zyBbu(l311|^gs)_-iE_0O*&@U51Tl;Z`31?B+tx)XvfqyB)$-1Axoz*lagRSSBp== zC8-CUq_Lae*%sLOic1ajeJ1l+a0iF*xu(wr+$Cy~Tm({#5?vwQ)H6-gB5LaCH}%k3 z)7f{ZYy~lu4PcOLHa$W>nye|@#vRgHM5l?~C%uIkJRtg*JckG~ya79pt9gv%aShjr h#b_QkFtz~}A%pP^I1xQAxEUcHp)>(IaM2tg$I3YA?Wa-5gmL*3cv!zWb zZIdo();2A4Ax+zmwluq0LYfk2lP2BQKl%y!A=;+r&U=z&Bp}eA?KgL3?%cWSnR(A2 z{`akS0Ia}23 ztu@eoH7>HmMp7o(yi+tH9h)${s5H<#p2>-Q`}R*nlIfhxq$1I@sH~E4XcrnL7MW-;j zQ0Ida^9+PaUExP17F5E4dOv~|)#%3@i@M2xCq2@iq230Js2>Z_BD}5KGnW}R(|#{L9L$!?Ej$Ia|o%K>g5 zweB)dHEQN0-y~E9=5}_KI)pwX(|~x?;@@F=ls#qUW_opHY?8$CtRq|RZ5zB;X23^T zLwOG}98nH&x-jJIjLI6>a<@2?B&TiC7tc&gX3}OlCz1-CzT(dE;?9cV&Mgc{JTrO7 zz_a`X-`-oFmSZ9l&Mts#~CT3K=F`W9$lr|`LO}FNz6CVp}CBe zaR%mJ4j`MRlBtBi&wvkGq(W*WJ38~#yxxngM4;H@q?t|_=q=;N(hRa?uJvOZ?hvtq z)S;(E*C+)JF^_s$@@2|_9SmAei(O{y?=;ZFtSIqMvE1Dv_bx40*CChPEzA0^zHE;y zyVsA+=n?8u6fhQ3WBtV8S@3K5%Y#q*aX(i0@Bm^4f-}w|mYJjCwm5T)x)K@ghv`EC z57J#(Q?V3Dm=8_GQiOzAm68wIz1%#OH3x*}ny^<`Kl_w z9QET7d`<)(xuSCm$FXIv6|m%C$>pO=$mr0n-M0_*4;WZ>1&3Zy0PFpW_);alfJY5< zmk(`zJDqCOAjUE}v|4_UTZddJ3XG%+jyZ5+j=6#%g)QXDlh>vAs*$fby7jC0 znz;3GR=d&#<<3myCa0KqS8|g!r)(LqG*zKY46L|N!}93EH=kZ@N&z_ z2WuwM#Q;(6hQX?|t%z(kC$napaZRwmJrkxyhC0Y_@JjGj| zIKRcJvKHPyTSm+l9zL8-QcNzz!@DYLPNrgU^X_DBj8~TYMmuLlxs%U4$bFTfGy~wy zNrG24N9=W_%>5<-wm!cwuOV3nWs0laTcevd5Aa}Wy8P-m0w?o)Q;5DXfi!;Fm6uji~JpY zg?NcDmK)1v4s1`-Kk3meNt1|{XECt4Gn&6rUMIBs@l*WFho9gS-KQS?#5sqzs8g;DgzC| zv-Q%W6{H)B=%yn2CRwd{sshc{{<^n5u#htsj`YbEdUH+b?KPzp(3Do7uSfw3Ft*JJ zv`|26pEuB^#Tr{LJtvARvNn9qAl*)y3X*OObdbKe&mCCImfN}mog}*0hS_#+z4Vx| zGiX^)`y@mSPH#=1c4vd-fO{@JTEmGNYa$Q`wmH3_z#L9%MQ2aX4b*bFE--IrQ{HK_ z8Rlz-1!M?X#?S0oAE>?fl6#4y58uA3icpa`t}CcFHkl;u%Im|DaUP6~JEzjQdVAS$83la#W5DEljX#=Bo7w&pUvy0#8NOYaschWbl1!Oc#*%cha@?qw z3S~L{PWNak+mL)bC>i5tgv-Vp@e@EObxcTb}s+%t`)aPKsl!*$MSw1w+k)983j%l`wP@-7&n%z2db zNA@>Z5^*yYvq#ysB|?e*4m~DX3vTquhY#(CKCP__f8uDPi)xA+il5S>2>~&nle8GH zg`0_4?R6~sM~=Z8toYYTCp!Ul+{PMLxVxvf&ROp|gRrIYpULfnquK{i-c33345Ax7 zwo@V;lTlarO*Fhp!ZC|gZ1h_UwvEMc3!=BIpr-2=w4|({=Ia*}!BX3_jcmpL{_aqp z#F+7Io{6M5!_6PDaGu3ih@zkQD!C-l@rZvUIzcSwS4S%n#a?SW#mQ@VEr?sN(q6pA z*2^7kWQNVwNWwFtk-MOgn;NxneGs>nbyUaoI7)ITh*bqg%_u|{b$on&TW{9K`yvyXh#DTaYgr%SrsE zL^zO&eu$YRkkncVN$26%GgHnIUQ4irIIV@uXe}U4D}!nwPOHXAL7dhC;^+V9W;|)7;$RtEGvsrXZMK{mf+A6C-;s5VfrVqFx$npW`3^Up z>9n22Xkn(~eRwKP!Y8I%Ocq>-&5dw;#1q8ffrGVTd_)IZw1fY}$fJOl0T|P@PaSMs z4J5U1#7EClJBf56-2Eb4&Qsm*!f_m~ic{Se;Ly(Mp~KE1tp`PM_M3|O&FnW9_1oBQ zJ0TK8XLdUBlg=5{YvA#C|Bbm+y|&h0ThNwz6f!e`3?}JC$ufMZM1BzQ(1En@5A#IM2 zOp0R)$MK!Loc*qe@8SDY;0@G~Q9Nf|p%|g_nBHTY!Pz(Pw!}>$_cuO66d=X$0k4?T zY|pX%JI5XPt={l$QomsT9h&#cy{L%dLKN>taS@kD;#X1p8t?6eq3}L_vlkJC#Z*V( zW&Nzw&!EB_g@p=>6kbtyRpD6$w?eN%kHT_=6$-Z~tW;Q{M8Z;qTNPF*bStb@Sfj93 oVV%Nyg$)WxEiZVPXbV=K^P2(=FnH2GST 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 B{q6t& diff --git a/Sources/target/classes/allin/routing/BasicRoutingKt.class b/Sources/target/classes/allin/routing/BasicRoutingKt.class deleted file mode 100644 index 64dd93b232990175514e61e70bea5830b5a865bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1144 zcmb7EO-~a+7=C68{aA~XDhh~zPz8#x1-}k8MkJDKT&n?s2Ts%N2-9w7$i z7(=1SyW9yloxZC#g->XTA)ma-u(aUG&}o@4a3=3%R(;h+)@vKD8J4~OFs|lN#El$AaPxANA3MsAo2Q-4oSF(h`$AJG6S!kz9Fq*iQarp%onp9hDhwm%*}N5oH@M-n5LUaJqP=A? z$;AW=tQ89u9e$FrR3WLc$}oF!l($cgY^z||)|f@&gk2zFRan`oSU*0eX^E}I8jGFe zP6xKk4<*BJa=0rk!!WQBHUu4bQi)opT^G>~uLpz_z0l{uE{|la_rTItM;X}`uIfrH z3IDT+>la&2@5fb2L>mFuT4)A)JM2Wh*p#u~@t%v_GY1Jftir-TTsdVujzOeJcSw6l zoJv8lT+AI~xcn8PC%Ao#yC1#~YN0~ZCZ0x?R&9vMR^%EHqQg}qv zCT)Z`Fh)O%*v$%_5PwGa3R diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1$1.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1$1.class deleted file mode 100644 index 524aa644ef35c621a5d731164e8dd1212caab143..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9372 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 diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$1.class deleted file mode 100644 index 864d955ce43a036b907354429b18db43d157c497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1856 zcma)7>uwuG7(KIgec5bDVrb%|r5EZpb^=|e1q#>%l914)u3O?XsEUL%wwGk%^=`Gh zw%}i$g(u)5k%~&l;wKM0n&iO89#((|&`yT+_$DY8FbX~_Y1HThF z-hsJcM>{m_;9-;-+qu=;Y7#=gskHn^xgT}grsL7gldf5j?Rry|POp8}@fwlid!e~K zv{uU%$2VJ%ADE#XbnReF+2iG)C+>=15EAeJvM z*LdD4>={Tw*Kq+;oQMvcP@qsbXAu}y!tuI(%NDqipPY~)yjk&s1M|p^>Vb4v4C#4( zBnO45`cbvxx`dp{sW5V?1$GLV*Har;+47=*7)~Qh;w^zojYGT98iG8Lfo$7s2m6_? z9LcUUUCC}ft{>TrsB~(kra%r#stj|O*KrA1=6}xgl?oP_Resd!hCk4a9h#fIM*(&E z$@Sq=xT51S-hMrue|PF$64w~^1aUCnjgI3sl_-*XX$A;cJ*0mW;*RmSTncnfDRus!xQG1~O z`C~#$sa?&xOsy;U3*sz0@D@8v#XtU-42E`xt$I*-L@^S>x2%S#>Z^^)j1}I<#~3n>B=y) zd6`Uac@5VO83xOE=r;w@HRr&SQ70gaUh_La!`^lj<-(9)ZvcM^6-Bn>0?Wc{7YnLK ztaF?{_Kh=-Xyxd^$|12FKY{TxErBXWV=#-0{XMfvPV`he9uq<1bABcB<_j#Wyu{^a z;sjTFxc&mSzflkxodBhb1OevwRgiOoZ9_-`AcG~+JmFfBdcZ6&vreWwZN>CCHz+1! zd8LQt-|+4)xcd{|2k;4csW@Lj8)Ik#_xQg=rQ?Hfrt^I)VCp5bXD7J-D?V1Sf(81T z<04|P`tRAHW0v=h`ed=gG0xS8sL|5sx!ZqM@RZN{B>IFXrG3OKlr4N}VGW;IjDOw2 Y1~&I0LVSU(eZ)g-hxjtYQi$n)0C*MIbN~PV diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$2$1.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$2$1.class deleted file mode 100644 index 4c67bbe22639fa00c7537420fb18ab079fac4e60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10482 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 b{Hr$BP~C-y@Hy6Zk&Lhr;fo0K5wd>+t76%i diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3$1.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3$1.class deleted file mode 100644 index 274e3cc0ae10b6611fa3441613b8d62002541691..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9610 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 diff --git a/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3.class b/Sources/target/classes/allin/routing/BetRouterKt$BetRouter$1$3.class deleted file mode 100644 index 8f0297789fb203f6297dc2475d810b55e8e29564..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1856 zcma)7Yi}Dx6g{(Xz4m5{6GQWADYSJPJArP}0tFlbiAm^E*DY}xR7FCX*h{kUdbiq# z1>f>p_ys&9Qc($6{m73(oUt8~iqyoCXRl}PoO2)Nj{o}mk3Ru?fE|H(>3Obig+UU# z{=T*D#9K6-@IhP{+J)u9T^&Net+s+#xgU1gmh02am!4IX?Y*WfpMLj!;x}S9@FQz; zU@fmy-N0(aL1;xz*m1%kWsh%o`ibwx<<+vl-0P`yqy(;>dVdC;jL$E=Dct!@N;-8hj|3497D z=_S{L&)|xI%Xs_MbpG2ZD(fAFJwhA|cs+5wrV^!&Yi!%IAc_UP`=1V+M5)Aj25-4E zx`8HcpkUxSZZd_@t^&8tD0}Ht-3OfzxH2M9M@Pv-4ig46EK(Q)iL05=@xDODuGP2K zYLyLviznIj2F8Sir7Uh^SwMTnC4UxoW~IU5p_Z&#ARt=G7~{(yTxBiMYLc_iJu;2%k)cg!hBl+ooai3SX-i^3Thi_u zFMmpF8Fi|8hpDYdKk$ES2T8>7BhGVw&?;MlE_I)R;cruC{ zUM9H>zu^TD!(bT?f~G*W?(X|CPC~L6^&klw&Zes$Ii~15CXMg%?tJ6gJ#{bT^@3!V-;n+T$TCmZ;u;pCA2*^ur}J( z{BqIutXk;#R-pW*@;iVUjliAz4_rIU-^>e4z8cI#OyFGC_Y(k3#0BEZHr?G67?{rO z2*jofxt%l;NTo1{A#Q~Gb|7%M*cS;5DsHAW`m(NA5@s`9 zJdjOkIg<6fS3XdcFyFParJd~MH4&$ACWTWN7dYFaI?BYPK+-C!kQr2~37jQJUySL- zIVX@Pl(x24N^9!^x&Elm&gauOkN1*z7Z-@uBRnRv+OVCfZdnsqfk90qOLW+?MCt@i zUem+*T(6odMtljEQ@Ds}fpm+ms&ZJA1ZMhXY{A6){nNA%(R4M5E3gEHq7pR@t5Rdm z_l>z|VzGbB#R&6*B=zIE!1-RB=tdK`bV5Vsx;nDmqwM&C%m0lg6BwG3Jch zslR@X8wq`@y1;yvrR%vr)xAc*WaxC_m2b?%mwb^OeHNJgU$4u>KNv8Yz70(vp1i?uB=4B)AB+K`D~#wv+B%|Jyr3gW&k#KS6dxa9^%t&NF!3mp zp)S|yj_Wkm@F~A1u-;+hOymm~`UA$JXZY+l6m-lWk!6k-7_|li#wob1`AU1f)}AYz zV|awGQKe;&Fcr<;;4$YV0)9?!cXlyQK(T;!li J;6{Lve*wN?J^KIv diff --git a/Sources/target/classes/allin/routing/BetRouterKt.class b/Sources/target/classes/allin/routing/BetRouterKt.class deleted file mode 100644 index a7e331344e974eabd8c7e12132610a91812ad605..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1608 zcma)6-E-4M5dWRz*s>78F;J2~`842|f*hdq!)aO*NUP$y9m1r; zEq@D7eQeGk;;KF6gqss-GI~4&#jK|Noq3W+Cq_L!cZ(PHBuEa58Q@KRE^>4A>m46 z6s8w#i$Djdt&-lAMijT*j!>sNLH`g9gq%oF9lx)9Q&A|c|^O(okgE#xFANnJV*T)=%_>|$| z6lx#*>wcizbwgaB(vQUqosY)3u@BcHqSuzD3pN#+u5t;NZCu0^h7%=Su*ppsJ~|JA zamA+sOSQ^imUa10PMWtK$NUf7!8t7HzDV^P+(6kz1)nj@PIO0Vw{#016dv8^a~}}+ zNhrR}6{of~dIOV&km)6_7cj7{W(+#~U23jM-1ahqH{6}Khr6~>xMUmihHY3T@kEIq z?k?JenMI?Ttr*qZ7qwuF;TFof;X;wPMR z=&fi(J`Xl|EcJdYEKU2`o2dg%9WM+;ycX~z5%lcX8&N;@#k$mf7sf6&4<&@Qj9KwAGN4p)RsNL!mZTg$|o_L#1=81yVA80iwJ&))*$(QNM xx3^$=xZ~ljhtF}(!x#9{!&mrv3oJnmD_h7X`u9zO)dVvMvI&l-+iMBFeGknLm9zi= diff --git a/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1$1.class b/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1$1.class deleted file mode 100644 index 153891605f5b655883ce6e2f8070b07662d9a591..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10934 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 Z6-`;ZnZ=c?uv7%CW^iodU%SHF_CK$^bawy% diff --git a/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1.class b/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$1.class deleted file mode 100644 index c99cc1c1cffea4a0e4eb4bf4e34cf166f4f8208a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1865 zcma)7Yi}Dx6g{(cz4m5{6GIaxErn9k*fDgS7ARm7NKHbQx^9V+pehp5c)cVWuV<@$ zSnw^sgBpfZU13dID09q7uHoU2B*>WLV4l1-!mLReuBG3gZJ7UUY$PsJ`z^wcp@;i zN7j0+;dn+j^n8Oz`nEqIjR_~W_kwOP|4pSL$#8w@{2V$JDTY+dA-D~OM6pEK zCW~fiUq>36hD(^Ejqu0`7|M+cmw^IHIil}%ZH61g*(piNn+?xDG>+}C?Q@69!G-Wb zJ}gbs3!9Pa669P#22zl1u+zxBn%tz$rU-q)aI8SZ8w^*hBirhZK%Q`)_iSni!)mc{ z%=_GMId$}L``EU^>eNn4f*e+5Ar`Tu;R^CpfeRNvDq)54DvsN2c|-Nsfl>Da$ta4` ziwV-Wrr|2yd^Mqeck8Z-wT(%2aWKTKCKgLWb}Drw8LGrC`tDt(IoD zP{&OaG`xd%DTUdt47biHd}*rkqh2svn~|ukqNF2>c?}B6B#n{G=?RRXm6lIHQbXiD&UO)#>b0cDqZWN!Gm%&2O&Z zS=`;{zQfzDy(<@nY{L*nZvRL15E2 zCA%do*9#~Ps^pQ^VaT+cL&3wyCl;;cMZRTkJCbsFM6f@EpF%~2x^jssLtkGk%QjJ| zlk`umqn$@&7082%htyi~6#6e@F*Iq_hr75O-&v4~B2RhaF(D}QTq@^Ye~#ty3tWB5 zPH}yJx1ZzIw-Q1jCqRlLMdQ1OVhp)Byf%U)0OYVrG*8G^B}rfbnBOF(BH5DZ3%Veg z^tJK;Yro^YUvcMWdLP24$O~ARg4QR{I_}aB6p0-lPBLAJv4FW3P@bOR-f#Fs#tJIX zH!)BGX8fKXIp!&L`IpBItw}n4h!$B264;HO4eZhL9ua*?DAfZbOw>$#W?}=Mn-u@1 ZiTkJ@fCcyxTL(x6*beYjfYkume*h$H-cJAk diff --git a/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$2$1.class b/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1$2$1.class deleted file mode 100644 index f71e2f60cc0a949f2c9b9166067ba80b42f6b81d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10232 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 diff --git a/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1.class b/Sources/target/classes/allin/routing/UserRouterKt$UserRouter$1.class deleted file mode 100644 index 634940f03be9a6c25e502efe6697e661bae29a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2570 zcmb7FZC4vb6n2zG^ioHI)RYRwP%G4IPcGkW)-}VTRTek3031=yTU6u+#o`@ zW!WBYlT)<4qHmhy^g>Dok_yrgMe_g0>u{}Go_$DAxivPq@SDf|5d6 zoha<`Cf7_(IelE(6=g5iHM1(6RCAJwVO);m5=I!VoRS}*VvJ!x^C@?(=7_4{5>6CX zh`Mt!Cna>1A*vTw*Yd@MMTW`qlAfB%C2$Sz#_$f_qr;sNC>`s*ZS}TsG4q3bt{IO&`4GR za7CCTj3}mhK%P-C(+l!U3;Dws)s@>lz|5-ns27;o7R<*n+yUL2>?>N}zPF?0sS%cE zlv~$~u8eTXqCus{m7@5B;i6m?tPrV+*yg_JG5mOjMz)S$q336*MDN-YT*Nbl^C|Ad zaTj@pYo}>UUSWpoCtUUPaZsu!uTT}#8ZD^5Di#wMz+fB-K4a()imR-~Ds+<4%agY1 zv%HTFWB42e2Bkr=N}dE6oiEdCLG@Rb+?e$IRBn7DM%F6B&`Xz(gvTq~<8&OQ-VD*( z#AFkb4H#HW8X@}my&Cxe3Ymk4dt*wLWt6P49RK_0h!T~% zD${hHd2ZR(4|Usj=`|pyW3R7UD#{G;qt}n*c}y9+(J%vnY560&RZ|7FiLaymw`wG= z@Pb{TI+QHfWo~Y8$KWMXtjUH7Yr(KY(XW?;6U?Mmd=hY7=vLEk4O-MG?)jtlg9?jo zS;AQ`x$6pg#s(IxvT3^{3}ST0t}w(_jjF{x-yxLvs_oN7STZE!XaKO$cHiX{S;|fy zF+@*3MrFE)@-TgrLYgtiO3?};5s^&z1rooK#js0lqCJZXtvy3hPP9_)_z4lR0DUs~ z<^e`05Ajy=?R|_NLOnowvo)UFN49%By^p!BF$?Wup2iV&fcu*gR6&i}VG1^aG3ql^ za_4Xx53r1Expg}+ck0cf-NR#%dBrFU8gL#Vc0ogLnd$d8unaEH`OTS}zACG>a zaT_YqI^SrQ>qN(O0!2Kg|4}^Y@N~K53+Vq7%Ci?(`3-9_ZcxN^YBSVJFkpmUwswCr z=x2lePS9J_hfzTlHdzWnXteqrd`JBp0k4y{jV*+9Z0h(z$1^56ybR7XSbN diff --git a/Sources/target/classes/allin/routing/UserRouterKt.class b/Sources/target/classes/allin/routing/UserRouterKt.class deleted file mode 100644 index 1b2e451496dbb211027ce605392ffde2463d1e8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2733 zcma)8TT|Oc6#mvWmaP~N<`QtyTxnuRf=rsWX>rm}7aBJXNr8}1dRxrm$d)Clm1%g( zPwDijk8OAeQ)W6$9{Zy@J!?C)EJG*ESbO$d_B*%T!{7h>`4@m&_?aQYZQF88&u#dY zQ!$@N;Vly_ya&Dp#$Z(WE;nsXvPYX$Q6_GbAyE;&Qk4wp>{O|#LkHMq$&&sY!<8Op zzSIJ$yIaC;!pz+z#mgnvtC&^cZ+hHvq{$t}^|^1kL@&AiQp2`MtFO_*GQvnHB%vn} z!6}A8@@dtr3Fjeqctv;&XUU5es`5>mK`EV@^1HM%C+ns#2t&aPwP2P-MZ73H7vXK$3HQepj5#G_hFczj9|{-tb%!uLGKit;aaw2 zxn|9GJ(KdiD?F3$?ATVhSr2o*L(fgEF~sx!b4%V$;3C7hn(M1Js_xcJ%c1UZxNR04 z-=msZWvSsZ!)RG0tXHEVHcWp#e3u)y%PAC7DHE<;MvHC#_(8aKM5+ip1JR(meCDFQJWE`&1o7C~Jm z@?YJiSq81mW~jb%u1kU39)mtN6)su`nnL*iw{+aZhjg7MRnY>WGQ6`Rl*xRVs%-gp z8KPO$1H+x0Kks>bPhEcv)Q$0cQ!j-(_*6$8WHHduZK>U37(eNHYWSStdMKx5*V(oz z=6#olKsOeeYz<#9Tr9hF)8E?>l5Y#Mt>2O_@-j8{o`yw+nCv%M7zU zg=qVKe7wyYaR;k93V0IAWbjqd@Knb$Re-K!2VVpY-{{y-DwClH_Jmh^=xt9v6h7bL zKBtOD>bp@IDolNn>H`K=Q$&P>FDymnh}xoS@XOK5oPP9DkBmq3NFv(18W%e}gLFvm z=w(JXhBA>{dODIDzBFVIBa&lpevK!TES88EQR2pk+1Fvl4UL!yVkSFG-8gmWw2{gr z(y??TH<0V^hz1Sg&2RA$<>yVNLP+<{E$W75+uqiw`nKor_mK^CO&~r@F~$M_$_Gk1@ec;ufN7;N0{G7>JWwX zLoBQx;K6$O;Q=1M#>#7~?IV4NXQZ~ikMTon5cTao&M7BaDIcSvsFdsU>!(y*rT;-@ zsi0B##Men{npR*O4f;k<$1bf^;(t$;KWrdc#E(VrA~sPjl5?VnZB#bEB%Z_Cz^KF- qiL(+D5*ewsV-mv>BNBrWhD5)_fJ9QFDp8Z@lZZ>4Z*Ff(*#83liLL|y diff --git a/Sources/target/classes/allin/serializer/DateSerializer.class b/Sources/target/classes/allin/serializer/DateSerializer.class deleted file mode 100644 index b3567d9db15eab986a77b8ea1eda8cbe18f066c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3623 zcmbVO*-{%v6g@p?83}=fSOOT^U=tg}G8p3x5hs|%$bjr1La<4k4AK||q!FGT5$tSa z-}9Ic$WxwDi7VccsubnNd{ip8X9h{gP;#s)P51P4pL_1P_jdO`|Ni+mfFbG~ArmAFAV@0{Pyr!kB*vxv)qJ>+9m8zxZ3}w2w za>QAbxAcsS8M_o?2$uu-;bG{g28)TVVK-I<)9izlx5QOh956Uq6}#MlJGg#+BHgcA!PjJg00 zA;O^iPcD8mFr2Nt$dP!w=+d<1M-xL!!L#xi40pRqLYTBn-B>v&ga`T<>wXSZ%1x6Z z&1ebYCA2aGi`Wc9FNW5JBLPS_%Ft@(lBI1~N>a~mWHgZllQ}c1k{<00^>^vlH#^&x zPPb1@4QI2%oXa@An}l{^&g4>RM)RYSvTJhA34Wv`ah>nv#7UeA;AM0%oZ3%Hn@R~{ z%t_E_5FO}Y2;8=5S(?ev=D_dEn+)}#U-+j`R$Hq&r{b8YP@+^;H7lA`Ob9B2t`~|G z!-<)kxuUFT*0QPU23J(W$XRx2b0v|p68TJq%!SCDBed<&QL=V$ENFf;#eH{2VHoZ@ zAo7}#%B3kYm2r(ann?*))KvtRp!{j)n~Y(GqfW6XYnxd`H;9X&W|X)g(wplk?#Bp2 zV`^1Pt-IW>tEQUOY|?wexVx#@=Im|Gtq~E%OL#SiSMVCc$^DD7oVOpBNh61-gTv6U zt5GR>2;-Qj#uz3Uyc?>?HHOZ8((4%=LYP8a6B1WpyI*e%2P@{gqv6r0=-3%C>4YfqEuiv@FL8&@Qw)cyOqQ2()VMT zz#Y1~I_?24$)Pl~YNT-cIYiwRhxVy*eHcb6YFk!2wkWQbAzZ-4AZ;$|46jrK+U4Pp zD8&(Bs@+?eei$Ll;|+nnu{WJu;|#|SD0}C~5O)u%Z<)e8mQguve0A=8WmdCPN>-IV zOWDmTy1Fp&2#5z57`Y>D>EdmGdg;>)zwT@g1*K-G_?O+jT;+_(9=qMy4oYDuC>k+a zmSlhP&i0@j@kFEnX@Fh!KKXCh6|6E;IrVoMQU@%<$^cNo;`%-#PY`**NFC~{Ml7Ku8 z*e61tx}j5DI5!xQOYD$EE&JCk+6(6LhNWkHV8*Bl84k_phL*@@ zmo;-gXh1 zgVZvdp{uiG+fnFEeDg;Cz_H(`;{XYwAduo>ue-R^jXIpe`F(%}%7MZafat!8i>R_0 z-J(`hLR(KH_86l*PjH1{mgo)iKE(8m$n0ZWFXD@G^^vbNXs~Ux)7l!ky}ph)`a&o! zZP6P>lH4kF;2WCZ7XpZ&Fj4-lH+QHNQg-x2-Xs#eksI`MIlP_d>3a;d?+I2U6t%A< z%i^loh!(V?)n*eVkVYC6Y=lo81vVX6z^W~B2Nt1|Il-kyDsUl2;Zc%hjYdR54AT_h zkT2Tv5SgL?PNYJ%xh7{u!HCasnQ-Qjb#bPMh@cXT_Vn%`_YilAE|g*kA!$|tD_9^L zB*G?H^5R>22Gt)q`5C$W9lcAm?t8oa96wMi_~&Wv<`SyncrT8vIPT&eb@6^2AK=3! zFpiJ#@e&$2206AlbWX=H+BlAIoZ%Sa=;P?;ILC3G;{wMpN0MWn;}ebrj#Z9Dj!*5- MR+BwWe=7z3Km8M}r~m)} diff --git a/Sources/target/classes/allin/utils/CryptManager.class b/Sources/target/classes/allin/utils/CryptManager.class deleted file mode 100644 index 30d34fdda670463fb609f1f0741e0afb5ac56931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1717 zcmah}OHhg20~g>LujC$DXcC=H8Qf~>dGY9 zvFZ=$s*5h#nKosz=rCFKM|E6|xBaTqxXv)#vcs*UK?67B zB;UtP+SVZ#huvok_XnvG;7h13x(s}XTXHW2Vu{fT<#M^0L5X2@u(7r0-M|)tCe`3> z&o;0S7k!%&MZdgg^cU7Io3v1oW#3`QU)&AD==la8+0oAx&F|mSxNLsA44L!X43@~^ zfxY%akGuc7f@CShT?6;=iCn>_3}f|V=Nop&4|vGwhfq4lDY{lnezNid26jaL=Z>^0 zq#aOWKc1ZwbY)7>74z&wS29u=A*qs7bm^iqDa>JcI(2rks8ra>(CeQx3RoX8Gc!sh zyQrBu$>H@$(;%5Uw@HqWtv;PLQ#1P9P)VI)6}6&Lc7{-A)Qo1PU;nI)%4!ywtno_R zN|}D&@|MfP@BN^&^P+1rWTVmE=3R$IA6=T{aVQ_r9adNA+R#DW@$AiBXWtHX_`XY? zeBEzyx4{EP+KKb#)1DVP9lPcoJHjFV+e`4Uf4vy=ZNC>Z?Z=J;noe>WamGL(?$86E zMkCIH-UHH9YK5L6`hHE;GM!U*FiL+SQ#!@SAISekwt_l+M<6$%$ybZs91R;XGLFYP z7$<8C6Ol(^S#%k{rbrp1r~IRYZkMF&EumY; ze@vtc38CaZMfDdt@3&we7g5c{c^9Z8=@Ly?iAZyDtdcbTDtHostz(Pi9(fHLT(h1qiI+@g7Wpae*%dG=b4b`AT3yzz~>>%xQtU0{0?)Nuc%y DOvQb} diff --git a/Sources/target/classes/allin/utils/RegexChecker.class b/Sources/target/classes/allin/utils/RegexChecker.class deleted file mode 100644 index fc9cecff4c559270f1c4d6d901e4375efe0049c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1249 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 S@uG{DeC2|RYc6iOSpF}U@mhZX diff --git a/Sources/target/classes/application.conf b/Sources/target/classes/application.conf deleted file mode 100644 index 1b4a12c..0000000 --- a/Sources/target/classes/application.conf +++ /dev/null @@ -1,4 +0,0 @@ -secret="secret" -issuer="http://0.0.0.0:8080/" -audience="http://0.0.0.0:8080/" -realm="Access to main page" \ No newline at end of file diff --git a/Sources/target/classes/logback.xml b/Sources/target/classes/logback.xml deleted file mode 100644 index 3e11d78..0000000 --- a/Sources/target/classes/logback.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/Sources/target/test-classes/META-INF/allin-api.kotlin_module b/Sources/target/test-classes/META-INF/allin-api.kotlin_module deleted file mode 100644 index 1e9f2ca4d180a083a06174d407c30581ce729120..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24 YcmZQzU|?ooU|Bb5Ph=;C!8n;et@5ijhZNEOe{1eYGOiynkb>6THvB9#~oo8V##l@vb8d? zFvQXyWt>GTWAkR_&E(CS`TTl&2XKIO!h#G#6_rkVy->BJQE^lYw3z}C{0BLdrBFt9 zrR(NH&|=mhxW_6|=7ivEZq+kL!u62A6d_^ml_nIb|0*64a@9_3?6S+i$hI_+Infxoo#%*y?%Q4hY$*ih`>_w;A+nvKcayuf{DI)@5JW`j_-><3Ya_TqrxS zbTf#I>IQYC6_1=oQEVn})7XRHPyF6sAH!CbxGdS5I3~AWk$T}oV42aj0S7CLnV$iq x;Z6Fh6D(ql<01E^SuWFnQ^8CHvlV3FbBbIAdCWCH8uM6aAfe%DENZwKg>U9JVqO3M -- 2.36.3 From d10379286fde9b6634dfcf7aebcf9cfc974757d0 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Thu, 11 Jan 2024 09:55:41 +0100 Subject: [PATCH 19/31] :sparkles: Add database for local usage --- Sources/src/main/kotlin/allin/Application.kt | 2 -- Sources/src/main/kotlin/allin/model/User.kt | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 93119eb..5f8fb99 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -1,6 +1,4 @@ package allin - -import allin.model.User import allin.routing.BasicRouting import allin.routing.BetRouter import allin.routing.UserRouter diff --git a/Sources/src/main/kotlin/allin/model/User.kt b/Sources/src/main/kotlin/allin/model/User.kt index d01dc50..3159bc9 100644 --- a/Sources/src/main/kotlin/allin/model/User.kt +++ b/Sources/src/main/kotlin/allin/model/User.kt @@ -1,10 +1,10 @@ package allin.model import allin.dto.UserDTO +import allin.routing.users import kotlinx.serialization.Serializable @Serializable data class User(val username: String, val email: String, var password: String, var nbCoins: Int = 1000, var token: String? = null) - @Serializable -data class CheckUser(val login: String,val password: String) \ No newline at end of file +data class CheckUser(val login: String,val password: String) -- 2.36.3 From bc1207e6d8a8d3e253aaa68fbe5d4c54f4c69b0a Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Mon, 15 Jan 2024 13:34:26 +0100 Subject: [PATCH 20/31] :sparkles: Local Database link --- Sources/src/main/kotlin/allin/model/Bet.kt | 15 +++-------- .../src/main/kotlin/allin/model/BetAction.kt | 4 +-- Sources/src/main/kotlin/allin/model/User.kt | 4 +-- .../kotlin/allin/serializer/DateSerializer.kt | 26 +++++++++---------- 4 files changed, 19 insertions(+), 30 deletions(-) diff --git a/Sources/src/main/kotlin/allin/model/Bet.kt b/Sources/src/main/kotlin/allin/model/Bet.kt index 5d4bc13..c99b923 100644 --- a/Sources/src/main/kotlin/allin/model/Bet.kt +++ b/Sources/src/main/kotlin/allin/model/Bet.kt @@ -1,19 +1,10 @@ package allin.model -import allin.dto.UserDTOWithToken -import allin.serializer.DateSerializer +import allin.serializer.ZonedDateTimeSerializer import kotlinx.serialization.Serializable import java.util.* @Serializable -data class Bet(val id: Int, val theme: String, val sentenceBet: String, @Serializable(DateSerializer::class) val endRegistration: Date, @Serializable(DateSerializer::class) var endBet : Date, var isPrivate : Boolean, var response : MutableList, val createdBy : String) - -@Serializable -data class UpdatedBetData(val id: Int,@Serializable(DateSerializer::class) val endBet: Date, val isPrivate: Boolean, val response: MutableList) - +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) @Serializable -data class BetWithoutId(val theme: String, val sentenceBet: String, @Serializable(DateSerializer::class) val endRegistration: Date, @Serializable(DateSerializer::class) var endBet : Date, var isPrivate : Boolean, var response : MutableList, val createdBy : String) - -fun convertBetWithoutIdToBet(betWithoutId: BetWithoutId,id : Int, username : String): Bet { - return Bet(id,betWithoutId.theme,betWithoutId.sentenceBet,betWithoutId.endRegistration, betWithoutId.endBet, betWithoutId.isPrivate, betWithoutId.response, username) -} +data class UpdatedBetData(val id: Int,@Serializable(ZonedDateTimeSerializer::class) val endBet: Date, val isPrivate: Boolean, val response: MutableList) \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/model/BetAction.kt b/Sources/src/main/kotlin/allin/model/BetAction.kt index f830e2c..2f2298b 100644 --- a/Sources/src/main/kotlin/allin/model/BetAction.kt +++ b/Sources/src/main/kotlin/allin/model/BetAction.kt @@ -1,5 +1,5 @@ package allin.model -import allin.dto.UserDTOWithToken +import allin.dto.UserDTO data class BetAction(val id:Int, val coins: Int, val user: String, val bet: Int) -data class BetActionCompleted(val id:Int, val coins: Int, val user: UserDTOWithToken, val bet: Bet) +data class BetActionCompleted(val id:Int, val coins: Int, val user: UserDTO, val bet: Bet) diff --git a/Sources/src/main/kotlin/allin/model/User.kt b/Sources/src/main/kotlin/allin/model/User.kt index 3159bc9..4f3f1f0 100644 --- a/Sources/src/main/kotlin/allin/model/User.kt +++ b/Sources/src/main/kotlin/allin/model/User.kt @@ -1,10 +1,8 @@ package allin.model -import allin.dto.UserDTO -import allin.routing.users import kotlinx.serialization.Serializable @Serializable -data class User(val username: String, val email: String, var password: String, var nbCoins: Int = 1000, var token: String? = null) +data class User(val username: String, val email: String, var password: String, var nbCoins: Double = 1000.0, var token: String? = null) @Serializable data class CheckUser(val login: String,val password: String) diff --git a/Sources/src/main/kotlin/allin/serializer/DateSerializer.kt b/Sources/src/main/kotlin/allin/serializer/DateSerializer.kt index 6002c28..dc84760 100644 --- a/Sources/src/main/kotlin/allin/serializer/DateSerializer.kt +++ b/Sources/src/main/kotlin/allin/serializer/DateSerializer.kt @@ -6,22 +6,22 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.encoding.Decoder import kotlinx.serialization.encoding.Encoder -import java.text.SimpleDateFormat -import java.util.* +import java.time.ZonedDateTime +import java.time.format.DateTimeFormatter -@Serializer(Date::class) -class DateSerializer : KSerializer { - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Date", PrimitiveKind.STRING) +@Serializer(ZonedDateTime::class) +object ZonedDateTimeSerializer : KSerializer { + private val formatter: DateTimeFormatter = DateTimeFormatter.ISO_ZONED_DATE_TIME - val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.FRANCE) + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("ZonedDateTime", PrimitiveKind.STRING) - override fun deserialize(decoder: Decoder): Date { - val dateString = decoder.decodeString() - return formatter.parse(dateString) + override fun serialize(encoder: Encoder, value: ZonedDateTime) { + encoder.encodeString(formatter.format(value)) } - override fun serialize(encoder: Encoder, value: Date) { - val dateString = formatter.format(value) - encoder.encodeString(dateString) + override fun deserialize(decoder: Decoder): ZonedDateTime { + val dateString = decoder.decodeString() + return ZonedDateTime.parse(dateString, formatter) } -} \ No newline at end of file +} -- 2.36.3 From d8ff355d3efbc9b57081a920270e69d32b808f1a Mon Sep 17 00:00:00 2001 From: luevard Date: Mon, 15 Jan 2024 22:23:56 +0100 Subject: [PATCH 21/31] :sparkles: Try to add database container --- Sources/src/main/kotlin/allin/Application.kt | 21 ++++++++++++++----- .../main/kotlin/allin/routing/UserRouter.kt | 2 -- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 5f8fb99..f8fecef 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -1,17 +1,26 @@ package allin + import allin.routing.BasicRouting import allin.routing.BetRouter +import allin.routing.ParticipationRouter import allin.routing.UserRouter +import allin.utils.TokenManager import com.typesafe.config.ConfigFactory import io.ktor.serialization.kotlinx.json.* import io.ktor.server.application.* +import io.ktor.server.auth.* +import io.ktor.server.auth.jwt.* import io.ktor.server.config.* import io.ktor.server.engine.* import io.ktor.server.netty.* import io.ktor.server.plugins.contentnegotiation.* -import allin.utils.TokenManager -import io.ktor.server.auth.* -import io.ktor.server.auth.jwt.* +import org.ktorm.database.Database + +val db_database=System.getenv().get("POSTGRES_DB") +val db_user=System.getenv().get("POSTGRES_USER") +val db_password=System.getenv().get("POSTGRES_PASSWORD") +val database = Database.connect("jdbc:postgresql:$db_database", user = db_user, password = db_password) + fun main() { embeddedServer(Netty, port = 8080, host = "0.0.0.0") { @@ -22,12 +31,13 @@ fun main() { private fun Application.extracted() { val config = HoconApplicationConfig(ConfigFactory.load()) val tokenManager = TokenManager.getInstance(config) + println("jdbc:postgresql:$db_database$db_user$db_password") authentication { jwt { verifier(tokenManager.verifyJWTToken()) - realm=config.property("realm").getString() + realm = config.property("realm").getString() validate { jwtCredential -> - if(jwtCredential.payload.getClaim("username").asString().isNotEmpty()) + if (jwtCredential.payload.getClaim("username").asString().isNotEmpty()) JWTPrincipal(jwtCredential.payload) else null } @@ -39,4 +49,5 @@ private fun Application.extracted() { BasicRouting() UserRouter() BetRouter() + ParticipationRouter() } diff --git a/Sources/src/main/kotlin/allin/routing/UserRouter.kt b/Sources/src/main/kotlin/allin/routing/UserRouter.kt index b89af65..4a70e06 100644 --- a/Sources/src/main/kotlin/allin/routing/UserRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/UserRouter.kt @@ -24,8 +24,6 @@ val RegexCheckerUser = AppConfig.regexChecker val CryptManagerUser = AppConfig.cryptManager val tokenManagerUser = AppConfig.tokenManager const val DEFAULT_COINS = 500 -val database = Database.connect("jdbc:postgresql://localhost:5432/Allin", user = "postgres", password = "lulu") - fun Application.UserRouter() { routing { -- 2.36.3 From 106405b6a18bc968e0c452cb1969395ce582854d Mon Sep 17 00:00:00 2001 From: luevard Date: Mon, 15 Jan 2024 22:26:14 +0100 Subject: [PATCH 22/31] :sparkles: Modify dependency --- Sources/src/main/kotlin/allin/entities/UserEntity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index e1ba032..0a54305 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -1,8 +1,8 @@ package allin.entities +import allin.database import allin.dto.UserDTO import allin.model.User -import allin.routing.database import org.ktorm.dsl.* import org.ktorm.entity.* import org.ktorm.schema.Table -- 2.36.3 From 1704a99ffd015554667b024552314f1e7366ed49 Mon Sep 17 00:00:00 2001 From: luevard Date: Mon, 15 Jan 2024 22:39:53 +0100 Subject: [PATCH 23/31] :sparkles: Try to see env variable --- Sources/src/main/kotlin/allin/Application.kt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index f8fecef..e8b9cdd 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -19,19 +19,25 @@ import org.ktorm.database.Database val db_database=System.getenv().get("POSTGRES_DB") val db_user=System.getenv().get("POSTGRES_USER") val db_password=System.getenv().get("POSTGRES_PASSWORD") -val database = Database.connect("jdbc:postgresql:$db_database", user = db_user, password = db_password) - - +var database : Database = instanceBD() fun main() { embeddedServer(Netty, port = 8080, host = "0.0.0.0") { extracted() }.start(wait = true) } +fun instanceBD(): Database{ + try{ + database = Database.connect("jdbc:postgresql:$db_database", user = db_user, password = db_password) + }catch (e:Exception){ + println("jdbc:postgresql:$db_database$db_user$db_password") + } + return database +} + private fun Application.extracted() { val config = HoconApplicationConfig(ConfigFactory.load()) val tokenManager = TokenManager.getInstance(config) - println("jdbc:postgresql:$db_database$db_user$db_password") authentication { jwt { verifier(tokenManager.verifyJWTToken()) -- 2.36.3 From 570ceb276015050f320340f14f8d268f7a524992 Mon Sep 17 00:00:00 2001 From: Lucas EVARD Date: Mon, 15 Jan 2024 22:54:19 +0100 Subject: [PATCH 24/31] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'.drone.yml'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index ec4c05c..d9aed52 100644 --- a/.drone.yml +++ b/.drone.yml @@ -39,12 +39,14 @@ steps: OVERWRITE: false PRIVATE: false ADMINS: lucasevard,emrekartal,arthurvalin,lucasdelanier - CODEFIRST_CLIENTDRONE_ENV_POSTGRES_PASSWORD: + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_ROOT_PASSWORD: from_secret: db_root_password CODEFIRST_CLIENTDRONE_ENV_POSTGRES_DB: from_secret: db_database CODEFIRST_CLIENTDRONE_ENV_POSTGRES_USER: from_secret: db_user + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_PASSWORD: + from_secret: db_password - name: docker-image image: plugins/docker -- 2.36.3 From b9d8d28d6474d6d530597b2b29260b4c28a77e5c Mon Sep 17 00:00:00 2001 From: Emre KARTAL Date: Tue, 16 Jan 2024 08:31:32 +0100 Subject: [PATCH 25/31] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'.drone.yml'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .drone.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.drone.yml b/.drone.yml index d9aed52..a468b58 100644 --- a/.drone.yml +++ b/.drone.yml @@ -67,6 +67,12 @@ steps: CONTAINERNAME: api COMMAND: create OVERWRITE: true + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_DB: + from_secret: db_database + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_USER: + from_secret: db_user + CODEFIRST_CLIENTDRONE_ENV_POSTGRES_PASSWORD: + from_secret: db_password ADMINS: lucasevard,emrekartal,arthurvalin,lucasdelanier depends_on: [docker-image] -- 2.36.3 From a3b2b8482ebd6f79e1ccaa955451531550b0c5db Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 09:58:47 +0100 Subject: [PATCH 26/31] :sparkles: Change connection string --- Sources/src/main/kotlin/allin/Application.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index e8b9cdd..9939e42 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -28,7 +28,7 @@ fun main() { fun instanceBD(): Database{ try{ - database = Database.connect("jdbc:postgresql:$db_database", user = db_user, password = db_password) + database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) }catch (e:Exception){ println("jdbc:postgresql:$db_database$db_user$db_password") } -- 2.36.3 From 030ffdacea107f53279dc0b9116df1d9dd79b93b Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 10:01:27 +0100 Subject: [PATCH 27/31] :sparkles: Change connection string --- Sources/src/main/kotlin/allin/Application.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 9939e42..8fd68a4 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -28,7 +28,7 @@ fun main() { fun instanceBD(): Database{ try{ - database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) + database = Database.connect("jdbc:postgresql://$db_database/", user = db_user, password = db_password) }catch (e:Exception){ println("jdbc:postgresql:$db_database$db_user$db_password") } -- 2.36.3 From 6a591a2816494210aea69a0325ebe9691937b7ac Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 12:37:11 +0100 Subject: [PATCH 28/31] :sparkles: Change connection string --- Sources/src/main/kotlin/allin/Application.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index 8fd68a4..e45ff32 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -28,9 +28,9 @@ fun main() { fun instanceBD(): Database{ try{ - database = Database.connect("jdbc:postgresql://$db_database/", user = db_user, password = db_password) + database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) }catch (e:Exception){ - println("jdbc:postgresql:$db_database$db_user$db_password") + //println("jdbc:postgresql://$db_database$db_user$db_password") } return database } -- 2.36.3 From b31867128536db6d5cb979cd375ebce7c42b1cc9 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 16:06:40 +0100 Subject: [PATCH 29/31] :sparkles: Add databaseUtil for add table manually --- Sources/src/main/kotlin/allin/Application.kt | 15 +++++---------- .../src/main/kotlin/allin/entities/UserEntity.kt | 10 +++++++++- .../src/main/kotlin/allin/utils/DatabaseUtil.kt | 12 ++++++++++++ 3 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index e45ff32..e745555 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -1,5 +1,7 @@ package allin +import allin.entities.UserEntity +import allin.entities.UsersEntity import allin.routing.BasicRouting import allin.routing.BetRouter import allin.routing.ParticipationRouter @@ -19,22 +21,14 @@ import org.ktorm.database.Database val db_database=System.getenv().get("POSTGRES_DB") val db_user=System.getenv().get("POSTGRES_USER") val db_password=System.getenv().get("POSTGRES_PASSWORD") -var database : Database = instanceBD() +val database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) + fun main() { embeddedServer(Netty, port = 8080, host = "0.0.0.0") { extracted() }.start(wait = true) } -fun instanceBD(): Database{ - try{ - database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) - }catch (e:Exception){ - //println("jdbc:postgresql://$db_database$db_user$db_password") - } - return database -} - private fun Application.extracted() { val config = HoconApplicationConfig(ConfigFactory.load()) val tokenManager = TokenManager.getInstance(config) @@ -56,4 +50,5 @@ private fun Application.extracted() { UserRouter() BetRouter() ParticipationRouter() + UsersEntity.createUserTable() } diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index 0a54305..765c0a3 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -3,8 +3,10 @@ package allin.entities import allin.database import allin.dto.UserDTO import allin.model.User +import allin.utils.Execute import org.ktorm.dsl.* import org.ktorm.entity.* +import org.ktorm.expression.SqlExpression import org.ktorm.schema.Table import org.ktorm.schema.double import org.ktorm.schema.int @@ -20,7 +22,7 @@ object UsersEntity : Table("utilisateur") { val id = int("id").primaryKey() val username = varchar("username") val password = varchar("password") - val nbCoins = double("nbCoins") + val nbCoins = double("coins") val email = varchar("email") fun getUserToUserDTO(): MutableList { @@ -34,6 +36,12 @@ object UsersEntity : Table("utilisateur") { }.toMutableList() } + fun createUserTable(){ + val request="CREATE TABLE IF not exists utilisateur ( id SERIAL PRIMARY KEY, username VARCHAR(255), password VARCHAR(255),coins double precision,email VARCHAR(255))" + database.Execute(request) + } + + fun getUserByUsernameAndPassword(login: String): Pair { return database.from(UsersEntity) .select() diff --git a/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt new file mode 100644 index 0000000..5130ce3 --- /dev/null +++ b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt @@ -0,0 +1,12 @@ +package allin.utils + +import allin.database +import org.ktorm.database.Database + +fun Database.Execute(request: String){ + database.useTransaction { + val connection = it.connection + connection.prepareStatement(request).execute() + connection.commit() + } +} \ No newline at end of file -- 2.36.3 From 7b7ad8f935c6718af4839615901c6d48696bf967 Mon Sep 17 00:00:00 2001 From: luevard <99143550+saucepommefrite@users.noreply.github.com> Date: Tue, 16 Jan 2024 16:49:23 +0100 Subject: [PATCH 30/31] :sparkles: Try new host name --- Sources/src/main/kotlin/allin/Application.kt | 5 +++-- Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt | 11 ++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Sources/src/main/kotlin/allin/Application.kt b/Sources/src/main/kotlin/allin/Application.kt index e745555..9e5f881 100644 --- a/Sources/src/main/kotlin/allin/Application.kt +++ b/Sources/src/main/kotlin/allin/Application.kt @@ -1,6 +1,5 @@ package allin -import allin.entities.UserEntity import allin.entities.UsersEntity import allin.routing.BasicRouting import allin.routing.BetRouter @@ -21,7 +20,9 @@ import org.ktorm.database.Database val db_database=System.getenv().get("POSTGRES_DB") val db_user=System.getenv().get("POSTGRES_USER") val db_password=System.getenv().get("POSTGRES_PASSWORD") -val database = Database.connect("jdbc:postgresql://$db_database", user = db_user, password = db_password) +val db_host=System.getenv().get("POSTGRES_HOST") + +val database = Database.connect("jdbc:postgresql://AllDev-postgresapi/$db_database", user = db_user, password = db_password) fun main() { embeddedServer(Netty, port = 8080, host = "0.0.0.0") { diff --git a/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt index 5130ce3..033afe4 100644 --- a/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt +++ b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt @@ -4,9 +4,10 @@ import allin.database import org.ktorm.database.Database fun Database.Execute(request: String){ - database.useTransaction { - val connection = it.connection - connection.prepareStatement(request).execute() - connection.commit() - } + if(!request.isNullOrEmpty()) + database.useTransaction { + val connection = it.connection + connection.prepareStatement(request).execute() + connection.commit() + } } \ No newline at end of file -- 2.36.3 From 4887614c7517ec7b1c7489f4cb4afafd7e4ab67a Mon Sep 17 00:00:00 2001 From: luevard Date: Tue, 16 Jan 2024 18:37:19 +0100 Subject: [PATCH 31/31] :sparkles: Rebasing master into Link_Database for future merge --- Sources/src/main/kotlin/allin/Application.kt | 2 +- Sources/src/main/kotlin/allin/model/Bet.kt | 32 +++++++++++++++++-- .../main/kotlin/allin/model/Participation.kt | 19 +++++++++++ Sources/src/main/kotlin/allin/model/User.kt | 23 +++++++++++-- .../main/kotlin/allin/routing/BetRouter.kt | 3 +- .../main/kotlin/allin/utils/TokenManager.kt | 18 +++++------ 6 files changed, 80 insertions(+), 17 deletions(-) create mode 100644 Sources/src/main/kotlin/allin/model/Participation.kt 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 { -- 2.36.3