62 lines
1.9 KiB
Kotlin
62 lines
1.9 KiB
Kotlin
package be.vandewalleh.routing
|
|
|
|
import be.vandewalleh.entities.User
|
|
import be.vandewalleh.extensions.respondStatus
|
|
import be.vandewalleh.extensions.userId
|
|
import be.vandewalleh.services.UserService
|
|
import be.vandewalleh.validation.receiveValidated
|
|
import be.vandewalleh.validation.user.registerValidator
|
|
import io.ktor.application.*
|
|
import io.ktor.auth.*
|
|
import io.ktor.http.*
|
|
import io.ktor.request.*
|
|
import io.ktor.response.*
|
|
import io.ktor.routing.*
|
|
import org.kodein.di.Kodein
|
|
import org.kodein.di.generic.instance
|
|
import org.mindrot.jbcrypt.BCrypt
|
|
import java.time.LocalDateTime
|
|
|
|
fun Routing.user(kodein: Kodein) {
|
|
val userService by kodein.instance<UserService>()
|
|
|
|
route("/user") {
|
|
post {
|
|
val user = call.receiveValidated(registerValidator)
|
|
|
|
if (userService.userExists(user.username, user.email))
|
|
return@post call.respondStatus(HttpStatusCode.Conflict)
|
|
|
|
val hashedPassword = BCrypt.hashpw(user.password, BCrypt.gensalt())
|
|
|
|
userService.createUser(user.username, user.email, hashedPassword)
|
|
|
|
call.respondStatus(HttpStatusCode.Created)
|
|
}
|
|
|
|
authenticate {
|
|
put {
|
|
val user = call.receiveValidated(registerValidator)
|
|
|
|
if (userService.userExists(user.username, user.email))
|
|
return@put call.respond(HttpStatusCode.Conflict)
|
|
|
|
val hashedPassword = BCrypt.hashpw(user.password, BCrypt.gensalt())
|
|
|
|
userService.updateUser(call.userId(), user.username, user.email, hashedPassword)
|
|
|
|
call.respondStatus(HttpStatusCode.OK)
|
|
}
|
|
|
|
delete {
|
|
val status = if (userService.deleteUser(call.userId()))
|
|
HttpStatusCode.OK
|
|
else
|
|
HttpStatusCode.NotFound
|
|
call.respondStatus(status)
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|